PpmResetProcessorIdleAccounting
VOID __stdcall PpmResetProcessorIdleAccounting(_PROC_IDLE_ACCOUNTING *Accounting, UINT64 StartTime){
unsigned int StateCount;
unsigned int ResetCount;
_PROC_IDLE_STATE_BUCKET *IdleTimeBuckets;
__int64 v7;
__int64 v8;
unsigned __int64 *p_MinTime;
unsigned __int64 *v10;
__int64 v11;
StateCount = Accounting->StateCount;
ResetCount = Accounting->ResetCount;
*(_OWORD *)&Accounting->StateCount = 0i64;
*(_OWORD *)&Accounting->StartTime = 0i64;
*(_QWORD *)&Accounting->TimeUnit = 0i64;
if( StateCount )
{
IdleTimeBuckets = Accounting->State[0].IdleTimeBuckets;
v7 = StateCount;
v8 = StateCount;
do
{
*(_OWORD *)&Accounting->StateCount = 0i64;
*(_OWORD *)&Accounting->StartTime = 0i64;
*(_QWORD *)&Accounting->TimeUnit = 0i64;
memset(IdleTimeBuckets, 0i64, 0x340u);
IdleTimeBuckets = (_PROC_IDLE_STATE_BUCKET *)((char *)IdleTimeBuckets + 1000);
--v8;
}
while( v8 );
p_MinTime = &Accounting->State[0].IdleTimeBuckets[0].MinTime;
do
{
*(p_MinTime - 19) = -1i64;
v10 = p_MinTime;
v11 = 26i64;
do
{
*v10 = -1i64;
v10 += 4;
--v11;
}
while( v11 );
p_MinTime += 125;
--v7;
}
while( v7 );
}
Accounting->TimeUnit = PpmIdleBucketTimeInQpc;
Accounting->StateCount = StateCount;
Accounting->ResetCount = ResetCount + 1;
Accounting->StartTime = StartTime;
}Referenced by:
PoIdle
PpmResetIdlePolicy