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