PopFxCompleteComponentPerfState

VOID __stdcall PopFxCompleteComponentPerfState(
        _POP_FX_DEVICE *FxDevice,
        UINT64 Component,
        _POP_FX_PERF_INFO *FxPerf,
        UINT8 Succeeded){
  unsigned int v6; 
  signed __int32 v8; 
  __int64 v9; 
  int v10; 
  unsigned int i; 
  __int64 v12; 
  __int64 v13; 
  __int64 v14; 

  v6 = Component;
  v8 = _InterlockedExchangeAdd((volatile signed __int32 *)FxPerf + 10, 0xFFFFFFFF);
  v9 = *((_QWORD *)FxPerf + 10);
  v10 = v8 - 1;
  for( i = 0; i < *((_DWORD *)FxPerf + 14); *(_QWORD *)(v13 + 8) = *(_QWORD *)(*((_QWORD *)FxPerf + 6) + 8 * v12 + 8) )
  {
    v12 = i++;
    v12 *= 2i64;
    v13 = *((_QWORD *)FxPerf + 19) + 32i64 * *(unsigned int *)(*((_QWORD *)FxPerf + 6) + 8 * v12);
    *(_QWORD *)(v13 + 16) = *((_QWORD *)FxPerf + 8);
    *(_BYTE *)(v13 + 24) = 0;
  }
  PopDiagTraceFxPerfRequestProgress(FxPerf, v10 & 7);
  if( v10 >= 0 )
  {
    v10 = _InterlockedDecrement((volatile signed __int32 *)FxPerf + 10);
    if( (v10 & 0x8000000) == 0 )
      PopFxAddLogEntry(*((_QWORD *)FxDevice + 6), v6, 15, 1i64);
  }
  LOBYTE(v14) = Succeeded;
  (*((void(__fastcall **)(_QWORD, _QWORD, __int64, __int64))FxPerf + 4))(*((_QWORD *)FxDevice + 24), v6, v14, v9);
  if( v10 < 0 )
  {
    _InterlockedDecrement((volatile signed __int32 *)FxPerf + 10);
    KeSetEvent((PRKEVENT)((char *)FxPerf + 8), 0, 0);
  }
  PopDiagTraceFxPerfRequestComplete(FxPerf, Succeeded);
}

Referenced by:

PopFxComponentPerfWork
PopFxIssueComponentPerfStateChanges
PopFxProcessWork