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