KiBeginThreadAccountingPeriod

VOID __stdcall KiBeginThreadAccountingPeriod(_KPRCB *Prcb, _ETHREAD *Thread, UINT64 NetCycles){
  _ETHREAD *CurrentThread; 
  char v6; 
  char v7; 
  _PROC_PERF_DOMAIN *Domain; 
  _PROC_PERF_CONSTRAINT *Constraint; 
  unsigned int LatestFrequencyPercent; 
  unsigned int v11; 
  unsigned __int64 *v12; 
  int v13; 
  _KSCHEDULING_GROUP *volatile SchedulingGroup; 
  char *v15; 
  _BYTE *SchedulerAssist; 

  CurrentThread = Thread;
  if( Thread )
  {
    v6 = 1;
  }
  else
  {
    CurrentThread = (_ETHREAD *)KeGetCurrentThread();
    v6 = 0;
  }
  v7 = CurrentThread->Tcb.gap0[2];
  if( (v7 & 0x10) != 0 )
    Prcb->TaggedCyclesStart = Prcb->StartCycles;
  if( (v7 & 0x20) != 0 )
  {
    Domain = Prcb->PowerState.CheckContext.Domain;
    Constraint = Prcb->PowerState.CheckContext.Constraint;
    if( Domain && Constraint )
    {
      if( Constraint->Selection.Autonomous )
      {
        LatestFrequencyPercent = Constraint->LatestFrequencyPercent;
      }
      else
      {
        LatestFrequencyPercent = Constraint->Selection.SelectedPercent;
        if( LatestFrequencyPercent >= Domain->GuaranteedPercent )
          LatestFrequencyPercent = Domain->GuaranteedPercent;
      }
    }
    else
    {
      LatestFrequencyPercent = 100;
    }
    if( LatestFrequencyPercent < 0x4B )
      v11 = LatestFrequencyPercent / 0x19;
    else
      v11 = 3;
    v12 = &Prcb->Cycles[v11][Prcb->PowerState.ArchitecturalEfficiencyClass];
    *v12 += NetCycles;
  }
  if( (v7 & 0x40) != 0 )
  {
    SchedulerAssist = CurrentThread->Tcb.SchedulerAssist;
    if( SchedulerAssist )
      SchedulerAssist[64] = 1;
  }
  Prcb->NestingLevel = 0;
  if( v6 )
  {
    if( (v7 & 0x36) == 0 )
    {
      _enable();
      return;
    }
    if( CurrentThread->Tcb.WaitBlock[0].SparePtr )
      KiBeginCounterAccumulation(&CurrentThread->Tcb, 1u);
    _enable();
    if( (CurrentThread->Tcb.gap0[2] & 4) != 0 )
    {
      v13 = *(&CurrentThread->Tcb.MiscFlags + 1);
      if( (v13 & 0x800) == 0 )
      {
        if( (v13 & 0x600) != 0 )
          return;
        SchedulingGroup = CurrentThread->Tcb.SchedulingGroup;
        if( !SchedulingGroup )
          return;
        v15 = (char *)SchedulingGroup + Prcb->ScbOffset;
        if( !v15 )
          return;
        while( (v15[112] & 2) == 0 )
        {
          v15 = (char *)*((_QWORD *)v15 + 51);
          if( !v15 )
            return;
        }
      }
      KiInsertDeferredPreemptionApc(Prcb, &CurrentThread->Tcb, 1u);
    }
  }
  else if( (v7 & 2) != 0 )
  {
    KiBeginCounterAccumulation(&CurrentThread->Tcb, 0);
  }
}

Referenced by:

KiIpiInterrupt
KiSpuriousDispatchNoEOI
KiSwInterrupt
KxIsrLinkage
SwapContext