• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 // Copyright (c) 2014 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
5 //
6 
7 // WindowsTimer.cpp: Implementation of a high precision timer class on Windows
8 
9 #include "windows/WindowsTimer.h"
10 
WindowsTimer()11 WindowsTimer::WindowsTimer() : mRunning(false), mStartTime(0), mStopTime(0)
12 {
13 }
14 
start()15 void WindowsTimer::start()
16 {
17     LARGE_INTEGER frequency;
18     QueryPerformanceFrequency(&frequency);
19     mFrequency = frequency.QuadPart;
20 
21     LARGE_INTEGER curTime;
22     QueryPerformanceCounter(&curTime);
23     mStartTime = curTime.QuadPart;
24 
25     mRunning = true;
26 }
27 
stop()28 void WindowsTimer::stop()
29 {
30     LARGE_INTEGER curTime;
31     QueryPerformanceCounter(&curTime);
32     mStopTime = curTime.QuadPart;
33 
34     mRunning = false;
35 }
36 
getElapsedTime() const37 double WindowsTimer::getElapsedTime() const
38 {
39     LONGLONG endTime;
40     if (mRunning)
41     {
42         LARGE_INTEGER curTime;
43         QueryPerformanceCounter(&curTime);
44         endTime = curTime.QuadPart;
45     }
46     else
47     {
48         endTime = mStopTime;
49     }
50 
51     return static_cast<double>(endTime - mStartTime) / mFrequency;
52 }
53 
CreateTimer()54 Timer *CreateTimer()
55 {
56     return new WindowsTimer();
57 }
58