PpmPerfRecordUtility

__int64 __fastcall PpmPerfRecordUtility(__int64 a1){
  __int64 *v1; 
  unsigned __int8 *v3; 
  __int64 result; 
  __int64 v5; 
  __int64 v6; 
  unsigned __int64 v7; 
  __int64 v8; 
  __int64 v9; 
  unsigned __int64 v10; 
  unsigned __int64 v11; 
  int v12; 
  int v13; 
  int v14; 
  int v15; 
  unsigned int v16; 
  unsigned __int64 v17; 
  unsigned __int64 v18; 
  EVENT_DESCRIPTOR *v19; 
  UINT64 v20; 
  __int64 v21; 
  INT64 Keyword; 
  unsigned __int8 v23; 
  unsigned int *v24; 
  int v25; 
  int v26; 
  unsigned int v27; 
  unsigned int v28; 
  char v29; 
  unsigned __int64 v30; 
  unsigned int v31; 
  __int64 v32; 
  char *v33; 
  int v34; 
  int v35; 
  unsigned int v36; 
  unsigned int v37; 
  UINT64 UserDataCount; 
  __int16 v39; 
  int v40; 
  int v41; 
  __int64 v42; 
  unsigned __int8 *v43; 
  __int64 v44; 
  unsigned __int64 v45; 
  unsigned __int64 v46; 
  unsigned __int64 v47; 
  EVENT_DATA_DESCRIPTOR UserData; 
  __int64 *v49; 
  __int64 v50; 
  __int64 *v51; 
  __int64 v52; 
  __int64 *v53; 
  __int64 v54; 
  int *v55; 
  __int64 v56; 
  __int64 *v57; 
  __int64 v58; 
  __int64 *v59; 
  __int64 v60; 
  int *v61; 
  __int64 v62; 
  __int16 *v63; 
  __int64 v64; 
  __int64 v65; 
  __int64 v66; 
  __int64 *v67; 
  __int64 v68; 
  v1 = *(__int64 **)(a1 + 16);
  v3 = *(unsigned __int8 **)(a1 + 24);
  result = (unsigned int)PpmCheckMakeupCount;
  v5 = *(_QWORD *)(a1 + 8);
  v43 = v3;
  if( v1 )
  {
    v6 = *v1;
    v7 = v1[5] - *v1;
    v8 = v1[2];
    v9 = v1[1];
    v10 = v1[4] - v9;
    v11 = v1[6] - v8;
    v12 = *((_DWORD *)v1 + 30) - *((_DWORD *)v1 + 6);
    if( (_DWORD)PpmCheckMakeupCount )
    {
      v30 = v10 / (unsigned int)(PpmCheckMakeupCount + 1);
      v3 = v43;
      v10 = v30;
      if( v7 < v30 )
        v30 = v1[5] - *v1;
      v7 = v30;
      if( v11 >= v10 )
        v11 = v10;
    }
    v1[1] = v9 + v10;
    *v1 = v6 + v7;
    v1[2] = v11 + v8;
    *((_DWORD *)v1 + 6) = *((_DWORD *)v1 + 30);
    if( v7 > v10 )
      v7 = v10;
    if( v11 > v10 )
      v11 = v10;
    if( v10 <= 1 )
      v10 = 1i64;
    if( v3 )
    {
      result = *v3;
      *(_DWORD *)(a1 + 40) = *v3 * v3[1];
    }
    else
    {
      v13 = *(unsigned __int16 *)(a1 + 52);
      if( v5 )
      {
        v14 = *(_DWORD *)(v5 + 116);
        v15 = *(_DWORD *)(v5 + 120);
      }
      else
      {
        v14 = 100;
        v15 = 100;
      }
      LODWORD(v44) = v14;
      v16 = 0;
      LOBYTE(v39) = 100;
      LODWORD(v43) = v15;
      v47 = v11;
      v46 = v7;
      v41 = 0;
      v17 = v7 * (unsigned int)(100 * v15) / v10;
      LOWORD(v42) = v17;
      v18 = v7 * (unsigned int)(v13 * v15) / v10;
      v45 = v10 - v7;
      LOWORD(v40) = v18;
      if( *(_BYTE *)(a1 + 60) )
      {
        v19 = (EVENT_DESCRIPTOR *)&PPM_ETW_RECORDED_UTILITY;
        LOWORD(v41) = *(unsigned __int8 *)(a1 - 32920);
        BYTE2(v41) = *(_BYTE *)(a1 - 32919);
        v56 = 3i64;
      }
      else
      {
        v19 = (EVENT_DESCRIPTOR *)PPM_ETW_RECORDED_UTILITY_HV;
        v41 = *(_DWORD *)(*(_QWORD *)(a1 + 8) + 20i64);
        v56 = 4i64;
      }
      v55 = &v41;
      if( PpmEtwRegistered )
      {
        v20 = PpmEtwHandle;
        if( PpmEtwHandle )
        {
          if( (v21 = *(_QWORD *)(PpmEtwHandle + 32), Keyword = v19->Keyword, *(_DWORD *)(v21 + 96))
            && ((v23 = *(_BYTE *)(v21 + 100), v19->Level <= v23) || !v23)
            && ((*(_DWORD *)(v21 + 104) & 0x40) != 0 && !Keyword
             || (Keyword & *(_QWORD *)(v21 + 112)) != 0 && (*(_QWORD *)(v21 + 120) & Keyword) == *(_QWORD *)(v21 + 120))
            || *(_BYTE *)(PpmEtwHandle + 101)
            && EtwpLevelKeywordEnabled(*(_QWORD *)(PpmEtwHandle + 40) + 96i64, v19->Level, Keyword) )
          {
            *(_QWORD *)&UserData.Size = 8i64;
            UserData.Ptr = (unsigned __int64)&PpmCheckTime;
            v50 = 8i64;
            v49 = (__int64 *)&v45;
            v52 = 8i64;
            v51 = (__int64 *)&v46;
            v54 = 4i64;
            v53 = &v44;
            v58 = 4i64;
            v57 = (__int64 *)&v43;
            v59 = &v42;
            v61 = &v40;
            v63 = &v39;
            v65 = (__int64)v1 + 329;
            v67 = (__int64 *)&v47;
            LODWORD(UserDataCount) = 11;
            v60 = 2i64;
            v62 = 2i64;
            v64 = 1i64;
            v66 = 1i64;
            v68 = 8i64;
            EtwWriteEx(v20, v19, 0i64, 0i64, 0i64, 0i64, UserDataCount, &UserData);
          }
        }
      }
      v24 = *(unsigned int **)(a1 + 32);
      if( v24 )
      {
        v31 = *v24;
        v32 = v24[1];
        v33 = (char *)v24 + 10 * v32;
        v24[2] += (unsigned __int16)v17 - *((unsigned __int16 *)v33 + 16);
        v34 = *((unsigned __int16 *)v33 + 17);
        *((_WORD *)v33 + 16) = v17;
        v24[3] += (unsigned __int16)v18 - v34;
        v35 = *((unsigned __int16 *)v33 + 18);
        *((_WORD *)v33 + 17) = v18;
        v24[4] += (unsigned __int16)v15 - v35;
        *((_WORD *)v33 + 18) = v15;
        v24[5] -= (unsigned __int8)v33[38];
        v24[5] += *((unsigned __int8 *)v1 + 328);
        v33[38] = *((_BYTE *)v1 + 328);
        v24[6] -= (unsigned __int8)v33[39];
        v24[6] += *((unsigned __int8 *)v1 + 329);
        v33[39] = *((_BYTE *)v1 + 329);
        v24[7] -= (unsigned __int8)v33[40];
        v24[7] += *((unsigned __int8 *)v1 + 330);
        v33[40] = *((_BYTE *)v1 + 330);
        if( (_DWORD)v32 + 1 != v31 )
          v16 = v32 + 1;
        v36 = v24[2];
        v24[1] = v16;
        LODWORD(v17) = v36 / v31;
        LODWORD(v18) = v24[3] / v31;
        v15 = v24[4] / v31;
        v25 = v24[6] / v31;
      }
      else
      {
        LOWORD(v40) = *((_WORD *)v1 + 164);
        LOBYTE(v25) = BYTE1(v40);
      }
      if( (unsigned __int8)v25 >= 0x64u )
        LOBYTE(v25) = 100;
      v26 = (unsigned __int8)v25;
      v27 = v17 * (unsigned __int8)v25;
      result = 1374389535 * v27;
      v28 = v27 / 0x64;
      if( PpmCheckCurrentPipelineId == 5 )
      {
        v37 = v18 * v26;
        LODWORD(v17) = v17 - v28;
        v29 = 1;
        result = 1374389535 * v37;
        LODWORD(v18) = v18 - v37 / 0x64;
      }
      else
      {
        v29 = 0;
      }
      *(_DWORD *)(a1 + 40) = v17;
      *(_DWORD *)(a1 + 44) = v18;
      *(_DWORD *)(a1 + 48) = v28;
      *(_WORD *)(a1 + 54) = v15;
      *((_DWORD *)v1 + 84) = v12;
      if( v29 )
        return PpmPerfResetHistory(a1);
    }
  }
  return result;
}

Referenced by:

PpmCheckRecordAllUtility