149be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Lang// 249be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Lang// Copyright (c) 2014 The ANGLE Project Authors. All rights reserved. 349be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Lang// Use of this source code is governed by a BSD-style license that can be 449be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Lang// found in the LICENSE file. 549be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Lang// 649be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Lang 749be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Lang#include "win32/Win32Timer.h" 849be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Lang 949be2ad9f863f5b238997e740aa35adc40ba66e3Geoff LangWin32Timer::Win32Timer() 1049be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Lang : mRunning(0), 1149be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Lang mStartTime(0), 1249be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Lang mStopTime(0) 1349be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Lang{ 1449be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Lang} 1549be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Lang 1649be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Langvoid Win32Timer::start() 1749be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Lang{ 1849be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Lang LARGE_INTEGER frequency; 1949be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Lang QueryPerformanceFrequency(&frequency); 2049be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Lang mFrequency = frequency.QuadPart; 2149be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Lang 2249be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Lang LARGE_INTEGER curTime; 2349be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Lang QueryPerformanceCounter(&curTime); 2449be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Lang mStartTime = curTime.QuadPart; 2549be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Lang 2649be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Lang mRunning = true; 2749be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Lang} 2849be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Lang 2949be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Langvoid Win32Timer::stop() 3049be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Lang{ 3149be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Lang LARGE_INTEGER curTime; 3249be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Lang QueryPerformanceCounter(&curTime); 3349be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Lang mStopTime = curTime.QuadPart; 3449be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Lang 3549be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Lang mRunning = false; 3649be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Lang} 3749be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Lang 3849be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Langdouble Win32Timer::getElapsedTime() const 3949be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Lang{ 4049be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Lang LONGLONG endTime; 4149be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Lang if (mRunning) 4249be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Lang { 4349be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Lang LARGE_INTEGER curTime; 4449be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Lang QueryPerformanceCounter(&curTime); 4549be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Lang endTime = curTime.QuadPart; 4649be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Lang } 4749be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Lang else 4849be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Lang { 4949be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Lang endTime = mStopTime; 5049be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Lang } 5149be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Lang 5249be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Lang return static_cast<double>(endTime - mStartTime) / mFrequency; 5349be2ad9f863f5b238997e740aa35adc40ba66e3Geoff Lang} 548def9aac0e28bdbc9e05264eb90e0455526fcb76Geoff Lang 558def9aac0e28bdbc9e05264eb90e0455526fcb76Geoff LangTimer *CreateTimer() 568def9aac0e28bdbc9e05264eb90e0455526fcb76Geoff Lang{ 578def9aac0e28bdbc9e05264eb90e0455526fcb76Geoff Lang return new Win32Timer(); 588def9aac0e28bdbc9e05264eb90e0455526fcb76Geoff Lang} 59