Ignore:
Timestamp:
May 26, 2009, 3:31:47 AM (15 years ago)
Author:
rryu
Message:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/MacFaceLibrary/CPUStatisticsNtQuerySystemInformation.cs

    r121 r124  
     1// $Id$
    12using System;
    23using System.Diagnostics;
     
    1112        {
    1213                       
    13                 UInt64 idleTimePrev = 0;
    14                 UInt64 kernelTimePrev = 0;
    15                 UInt64 userTimePrev = 0;
     14                Int64 idleTimePrev = 0;
     15                Int64 kernelTimePrev = 0;
     16                Int64 userTimePrev = 0;
    1617
    1718                public CPUStatisticsNtQuerySystemInformation(int historySize) : base(historySize)
     
    2223                protected override CPUUsage NextValue()
    2324                {
    24                         UInt64 idleTime;
    25                         UInt64 kernelTime;
    26                         UInt64 userTime;
     25                        Int64 idleTime;
     26                        Int64 kernelTime;
     27                        Int64 userTime;
    2728
    28                         NtKernel.SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION sysProcessorPerfInfo = NtKernel.QuerySystemProcessorPerformanceInfomation();
     29                        NtKernel.SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION sysProcessorPerfInfo = NtKernel.QuerySystemProcessorPerformanceInfomation(1)[0];
    2930                       
    30                         idleTime = (UInt64)sysProcessorPerfInfo.IdleTime;
    31                         kernelTime = (UInt64)sysProcessorPerfInfo.KernelTime;
    32                         userTime = (UInt64)sysProcessorPerfInfo.UserTime;
     31                        idleTime = sysProcessorPerfInfo.IdleTime;
     32                        kernelTime = sysProcessorPerfInfo.KernelTime - idleTime;
     33                        userTime = sysProcessorPerfInfo.UserTime;
    3334                               
    34                         Int32 idleTimeDiff = (Int32)(idleTime - idleTimePrev);
    35                         Int32 userTimeDiff = (Int32)(userTime - userTimePrev);
    36                         Int32 kernelTimeDiff = (Int32)(kernelTime - kernelTimePrev);
    37                         Int32 systemTimeDiff = (Int32)(userTimeDiff + kernelTimeDiff);
     35                        Int64 idleTimeDiff = idleTime - idleTimePrev;
     36            Int64 userTimeDiff = userTime - userTimePrev;
     37            Int64 kernelTimeDiff = kernelTime - kernelTimePrev;
     38            Int64 totalTimeDiff = idleTimeDiff + userTimeDiff + kernelTimeDiff;
    3839
    3940                        idleTimePrev = idleTime;
     
    4243
    4344                        return new CPUUsage(
    44                                 (Int32)(100 - ((Double)idleTimeDiff / userTimePrev) * 100),
    45                                 (Int32)(100 - ((Double)idleTimeDiff / kernelTimePrev) * 100),
    46                                 (Int32)(((Double)idleTimeDiff / (systemTimeDiff)) * 100)
     45                                (Int32)(((Double)userTimeDiff / totalTimeDiff) * 100),
     46                                (Int32)(((Double)kernelTimeDiff / totalTimeDiff) * 100),
     47                                (Int32)(((Double)idleTimeDiff / totalTimeDiff) * 100)
    4748                        );
    4849                }
Note: See TracChangeset for help on using the changeset viewer.