示例#1
0
 public override long GetKernelTicks()
 {
     bool en = Processor.DisableInterrupts();
     this.AcquireLock();
     try {
         if (this.hpetClock == null) {
             return (long) pmClock.GetKernelTicks();
         }
         else {
             return (long) hpetClock.GetKernelTicks();
         }
     }
     finally {
         this.ReleaseLock();
         Processor.RestoreInterrupts(en);
     }
 }
示例#2
0
        private long InternalGetKernelTicks()
        {
            if (!tscSnapshotValid)
            {
                if (hpetClock == null)
                {
                    ticksSnapshot = (long)pmClock.GetKernelTicks();
                }
                else
                {
                    ticksSnapshot = (long)hpetClock.GetKernelTicks();
                }
                tscSnapshot      = Processor.CycleCount;
                tscSnapshotValid = true;

                return(ticksSnapshot);
            }
            else
            {
                long tscDelta  = (long)(Processor.CycleCount - tscSnapshot);
                long tickDelta = (tscDelta * tickScale) >> tickRoll;
                return(ticksSnapshot + tickDelta);
            }
        }