PpmPerfFeedbackCounterRead
VOID __stdcall PpmPerfFeedbackCounterRead(_PROC_FEEDBACK_COUNTER *Counter, UINT8 Reset, UINT64 *Value){
void(__fastcall *InstantaneousRead)(unsigned __int64, unsigned int *);
unsigned __int64 Context;
unsigned __int64 LastReferenceCount;
unsigned __int64 v8;
unsigned __int64 LastActualCount;
__int64 v10;
unsigned __int64 v11;
__int64 v12;
InstantaneousRead = Counter->InstantaneousRead;
Context = Counter->Context;
v12 = 0i64;
v11 = 0i64;
if( Counter->Differential )
{
((void(__fastcall *)(unsigned __int64, UINT8, unsigned __int64 *, __int64 *))InstantaneousRead)(
Context,
Reset,
&v11,
&v12);
LastReferenceCount = Counter->LastReferenceCount;
if( v11 == LastReferenceCount )
{
LODWORD(v8) = Counter->CachedValue;
}
else
{
LastActualCount = Counter->LastActualCount;
v10 = v12 - LastActualCount;
v8 = (v12 - LastActualCount) * Counter->Scaling / (v11 - LastReferenceCount);
Counter->LastReferenceCount = v11;
Counter->CachedValue = v8;
Counter->LastActualCount = v10 + LastActualCount;
}
*(_DWORD *)Value = v8;
}
else
{
InstantaneousRead(Context, (unsigned int *)Value);
}
}Referenced by:
PpmInstallFeedbackCounters