Blame view

3rdparty/opencv-4.5.4/samples/wp8/OcvRotatingCube/PhoneXamlDirect3DApp1/PhoneXamlDirect3DApp1Comp/BasicTimer.h 1.83 KB
f4334277   Hu Chunming   提交3rdparty
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
  #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;
  };