aboutsummaryrefslogtreecommitdiff
path: root/externals/g3dlite/G3D.lib/source/Stopwatch.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'externals/g3dlite/G3D.lib/source/Stopwatch.cpp')
-rw-r--r--externals/g3dlite/G3D.lib/source/Stopwatch.cpp96
1 files changed, 0 insertions, 96 deletions
diff --git a/externals/g3dlite/G3D.lib/source/Stopwatch.cpp b/externals/g3dlite/G3D.lib/source/Stopwatch.cpp
deleted file mode 100644
index e55f689a9e2..00000000000
--- a/externals/g3dlite/G3D.lib/source/Stopwatch.cpp
+++ /dev/null
@@ -1,96 +0,0 @@
-/**
- @file Stopwatch.cpp
-
- @maintainer Morgan McGuire, matrix@graphics3d.com
-
- @created 2005-10-05
- @edited 2005-10-05
-
- Copyright 2000-2003, Morgan McGuire.
- All rights reserved.
- */
-
-#include "G3D/Stopwatch.h"
-#include "G3D/System.h"
-
-namespace G3D {
-
-Stopwatch::Stopwatch() : inBetween(false), lastTockTime(-1),
- lastDuration(0), lastCycleCount(0), m_fps(0), emwaFPS(0),
- m_smoothFPS(0), emwaDuration(0) {
- computeOverhead();
-}
-
-
-void Stopwatch::computeOverhead() {
- cycleOverhead = 0;
- tick();
- tock();
- cycleOverhead = elapsedCycles();
-}
-
-
-void Stopwatch::tick() {
- // This is 'alwaysAssert' instead of 'debugAssert'
- // since people rarely profile in debug mode.
- alwaysAssertM(! inBetween, "Stopwatch::tick() called twice in a row.");
- inBetween = true;
-
- // We read RDTSC twice here, but it is more abstract to implement this
- // way and at least we're reading the cycle count last.
- timeStart = System::time();
- System::beginCycleCount(cycleStart);
-}
-
-
-void Stopwatch::tock() {
- System::endCycleCount(cycleStart);
- RealTime now = System::time();
- lastDuration = now - timeStart;
- if (abs(emwaDuration - lastDuration) > max(emwaDuration, lastDuration) * 0.50) {
- // Off by more than 50%
- emwaDuration = lastDuration;
- } else {
- emwaDuration = lastDuration * 0.05 + emwaDuration * 0.95;
- }
-
- lastCycleCount = cycleStart - cycleOverhead;
- if (lastCycleCount < 0) {
- lastCycleCount = 0;
- }
-
- if (lastTockTime != -1.0) {
- m_fps = 1.0 / (now - lastTockTime);
-
- // Time smooth the average
- emwaFPS = m_fps * 0.01 + emwaFPS * 0.99;
-
- if (abs(emwaFPS - m_fps) > max(emwaFPS, m_fps) * 0.08) {
- // The difference between emwa and m_fps is way off
- // update emwa directly.
- emwaFPS = m_fps;
- }
-
- // Update m_smoothFPS only when the value varies significantly
- // We round so as to not mislead the user as to the accuracy of
- // the number.
- if (m_smoothFPS == 0) {
- m_smoothFPS = m_fps;
- } else if (emwaFPS <= 10) {
- if (::fabs(m_smoothFPS - emwaFPS) > .75) {
- m_smoothFPS = floor(emwaFPS * 10.0 + 0.5) / 10.0;
- }
- } else {
- if (::fabs(m_smoothFPS - emwaFPS) > 1.25) {
- m_smoothFPS = floor(emwaFPS + 0.5);
- }
- }
- }
- lastTockTime = now;
-
- alwaysAssertM(inBetween, "Stopwatch::tock() called without matching tick.");
- inBetween = false;
-}
-
-}
-