mirror of https://github.com/opencv/opencv.git
Open Source Computer Vision Library
https://opencv.org/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
1.8 KiB
76 lines
1.8 KiB
#pragma once |
|
|
|
#include <wrl.h> |
|
|
|
// Helper class for basic timing. |
|
ref class BasicTimer sealed |
|
{ |
|
public: |
|
// Initializes internal timer values. |
|
BasicTimer() |
|
{ |
|
if (!QueryPerformanceFrequency(&m_frequency)) |
|
{ |
|
throw ref new Platform::FailureException(); |
|
} |
|
Reset(); |
|
} |
|
|
|
// Reset the timer to initial values. |
|
void Reset() |
|
{ |
|
Update(); |
|
m_startTime = m_currentTime; |
|
m_total = 0.0f; |
|
m_delta = 1.0f / 60.0f; |
|
} |
|
|
|
// Update the timer's internal values. |
|
void Update() |
|
{ |
|
if (!QueryPerformanceCounter(&m_currentTime)) |
|
{ |
|
throw ref new Platform::FailureException(); |
|
} |
|
|
|
m_total = static_cast<float>( |
|
static_cast<double>(m_currentTime.QuadPart - m_startTime.QuadPart) / |
|
static_cast<double>(m_frequency.QuadPart) |
|
); |
|
|
|
if (m_lastTime.QuadPart == m_startTime.QuadPart) |
|
{ |
|
// If the timer was just reset, report a time delta equivalent to 60Hz frame time. |
|
m_delta = 1.0f / 60.0f; |
|
} |
|
else |
|
{ |
|
m_delta = static_cast<float>( |
|
static_cast<double>(m_currentTime.QuadPart - m_lastTime.QuadPart) / |
|
static_cast<double>(m_frequency.QuadPart) |
|
); |
|
} |
|
|
|
m_lastTime = m_currentTime; |
|
} |
|
|
|
// Duration in seconds between the last call to Reset() and the last call to Update(). |
|
property float Total |
|
{ |
|
float get() { return m_total; } |
|
} |
|
|
|
// Duration in seconds between the previous two calls to Update(). |
|
property float Delta |
|
{ |
|
float get() { return m_delta; } |
|
} |
|
|
|
private: |
|
LARGE_INTEGER m_frequency; |
|
LARGE_INTEGER m_currentTime; |
|
LARGE_INTEGER m_startTime; |
|
LARGE_INTEGER m_lastTime; |
|
float m_total; |
|
float m_delta; |
|
};
|
|
|