PpmIdleCompleteExitLatencyTrace
__int64 PpmIdleCompleteExitLatencyTrace(__int64 a1, int a2, char a3, ...){
__int64 v3;
unsigned __int64 v4;
int v5;
__int64 result;
UINT64 *ExitTime;
UINT64 ProcessorStateIndex;
va_list ProcessorStateIndexa;
__int64 v10;
UINT64 ReturnLatency;
UINT64 PlatformStateIndex;
UINT64 LatencyTraceFlags;
va_list va1;
va_start(va1, a3);
va_start(ProcessorStateIndexa, a3);
ProcessorStateIndex = va_arg(va1, _QWORD);
v10 = va_arg(va1, _QWORD);
ReturnLatency = va_arg(va1, _QWORD);
PlatformStateIndex = va_arg(va1, _QWORD);
LatencyTraceFlags = va_arg(va1, _QWORD);
v3 = a1;
if( a2 < 0 )
return PpmCancelExitLatencyTrace(a1);
if( a3 && (v4 = *(_QWORD *)(*(_QWORD *)(a1 + 0x8000) + 56i64), ProcessorStateIndex > v4) )
v5 = PpmConvertTime(ProcessorStateIndex - v4, PopQpcFrequency, 0x989680ui64);
else
v5 = v10;
LODWORD(ExitTime) = v5;
if( !PpmTraceExitLatency(
(UINT64)ProcessorStateIndexa,
(unsigned int)PlatformStateIndex,
(unsigned int)LatencyTraceFlags,
(unsigned int)ReturnLatency,
ExitTime) )
{
a1 = v3;
return PpmCancelExitLatencyTrace(a1);
}
result = *(_QWORD *)(v3 + 0x8000);
*(_BYTE *)(result + 3) = 0;
*(_QWORD *)(result + 56) = 0i64;
return result;
}Referenced by:
PpmIdleExecuteTransition