Home | History | Annotate | Download | only in timer
      1 /*
      2  * Copyright 2011 Google Inc.
      3  *
      4  * Use of this source code is governed by a BSD-style license that can be
      5  * found in the LICENSE file.
      6  */
      7 #include "SysTimer_windows.h"
      8 
      9 static ULONGLONG win_cpu_time() {
     10     FILETIME createTime;
     11     FILETIME exitTime;
     12     FILETIME usrTime;
     13     FILETIME sysTime;
     14     if (0 == GetProcessTimes(GetCurrentProcess(), &createTime, &exitTime, &sysTime, &usrTime)) {
     15         return 0;
     16     }
     17     ULARGE_INTEGER start_cpu_sys;
     18     ULARGE_INTEGER start_cpu_usr;
     19     start_cpu_sys.LowPart  = sysTime.dwLowDateTime;
     20     start_cpu_sys.HighPart = sysTime.dwHighDateTime;
     21     start_cpu_usr.LowPart  = usrTime.dwLowDateTime;
     22     start_cpu_usr.HighPart = usrTime.dwHighDateTime;
     23     return start_cpu_sys.QuadPart + start_cpu_usr.QuadPart;
     24 }
     25 
     26 void SysTimer::startWall() {
     27     if (0 == ::QueryPerformanceCounter(&fStartWall)) {
     28         fStartWall.QuadPart = 0;
     29     }
     30 }
     31 void SysTimer::startCpu() {
     32     fStartCpu = win_cpu_time();
     33 }
     34 
     35 double SysTimer::endCpu() {
     36     ULONGLONG end_cpu = win_cpu_time();
     37     return static_cast<double>(end_cpu - fStartCpu) / 10000.0L;
     38 }
     39 double SysTimer::endWall() {
     40     LARGE_INTEGER end_wall;
     41     if (0 == ::QueryPerformanceCounter(&end_wall)) {
     42         end_wall.QuadPart = 0;
     43     }
     44 
     45     LARGE_INTEGER ticks_elapsed;
     46     ticks_elapsed.QuadPart = end_wall.QuadPart - fStartWall.QuadPart;
     47 
     48     LARGE_INTEGER frequency;
     49     if (0 == ::QueryPerformanceFrequency(&frequency)) {
     50         return 0.0L;
     51     } else {
     52         return static_cast<double>(ticks_elapsed.QuadPart)
     53              / static_cast<double>(frequency.QuadPart)
     54              * 1000.0L;
     55     }
     56 }
     57