| // |
| // Copyright (c) 2014 The ANGLE Project Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| // |
| |
| // WindowsTimer.cpp: Implementation of a high precision timer class on Windows |
| |
| #include "windows/WindowsTimer.h" |
| |
| WindowsTimer::WindowsTimer() : mRunning(false), mStartTime(0), mStopTime(0) |
| { |
| } |
| |
| void WindowsTimer::start() |
| { |
| LARGE_INTEGER frequency; |
| QueryPerformanceFrequency(&frequency); |
| mFrequency = frequency.QuadPart; |
| |
| LARGE_INTEGER curTime; |
| QueryPerformanceCounter(&curTime); |
| mStartTime = curTime.QuadPart; |
| |
| mRunning = true; |
| } |
| |
| void WindowsTimer::stop() |
| { |
| LARGE_INTEGER curTime; |
| QueryPerformanceCounter(&curTime); |
| mStopTime = curTime.QuadPart; |
| |
| mRunning = false; |
| } |
| |
| double WindowsTimer::getElapsedTime() const |
| { |
| LONGLONG endTime; |
| if (mRunning) |
| { |
| LARGE_INTEGER curTime; |
| QueryPerformanceCounter(&curTime); |
| endTime = curTime.QuadPart; |
| } |
| else |
| { |
| endTime = mStopTime; |
| } |
| |
| return static_cast<double>(endTime - mStartTime) / mFrequency; |
| } |
| |
| Timer *CreateTimer() |
| { |
| return new WindowsTimer(); |
| } |