KiEndDebugAccumulation
VOID __stdcall KiEndDebugAccumulation(_KPRCB *Prcb){
_ETHREAD *CurrentThread;
unsigned __int64 v3;
unsigned __int64 StartCycles;
unsigned __int64 v5;
int FrequencyBucket;
if( !Prcb->NestingLevel && !PoAllProcIntrDisabled )
{
Prcb->NestingLevel = 1;
CurrentThread = Prcb->CurrentThread;
v3 = __rdtsc();
StartCycles = Prcb->StartCycles;
v5 = v3 - StartCycles;
Prcb->CycleTime += v5;
if( (CurrentThread->Tcb.gap0[2] & 0x20) != 0 )
{
FrequencyBucket = PoGetFrequencyBucket(Prcb);
Prcb->Cycles[FrequencyBucket][Prcb->PowerState.ArchitecturalEfficiencyClass] += v5;
StartCycles = Prcb->StartCycles;
CurrentThread = Prcb->CurrentThread;
}
Prcb->StartCycles = v5 + StartCycles;
if( (CurrentThread->Tcb.gap0[2] & 2) != 0 )
KiBeginCounterAccumulation(&CurrentThread->Tcb, 0);
Prcb->NestingLevel = 0;
}
}Referenced by:
KeThawExecution
KiFreezeTargetExecution