summaryrefslogtreecommitdiff
path: root/Source/ThirdParty/ANGLE/util/linux/LinuxTimer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/ThirdParty/ANGLE/util/linux/LinuxTimer.cpp')
-rw-r--r--Source/ThirdParty/ANGLE/util/linux/LinuxTimer.cpp49
1 files changed, 49 insertions, 0 deletions
diff --git a/Source/ThirdParty/ANGLE/util/linux/LinuxTimer.cpp b/Source/ThirdParty/ANGLE/util/linux/LinuxTimer.cpp
new file mode 100644
index 000000000..196820580
--- /dev/null
+++ b/Source/ThirdParty/ANGLE/util/linux/LinuxTimer.cpp
@@ -0,0 +1,49 @@
+//
+// Copyright (c) 2015 The ANGLE Project Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+
+// LinuxTimer.cpp: Implementation of a high precision timer class on Linux
+
+#include "linux/LinuxTimer.h"
+#include <iostream>
+
+LinuxTimer::LinuxTimer()
+ : mRunning(false)
+{
+}
+
+void LinuxTimer::start()
+{
+ clock_gettime(CLOCK_MONOTONIC, &mStartTime);
+ mRunning = true;
+}
+
+void LinuxTimer::stop()
+{
+ clock_gettime(CLOCK_MONOTONIC, &mStopTime);
+ mRunning = false;
+}
+
+double LinuxTimer::getElapsedTime() const
+{
+ struct timespec endTime;
+ if (mRunning)
+ {
+ clock_gettime(CLOCK_MONOTONIC, &endTime);
+ }
+ else
+ {
+ endTime = mStopTime;
+ }
+
+ double startSeconds = mStartTime.tv_sec + (1.0 / 1000000000) * mStartTime.tv_nsec;
+ double endSeconds = endTime.tv_sec + (1.0 / 1000000000) * endTime.tv_nsec;
+ return endSeconds - startSeconds;
+}
+
+Timer *CreateTimer()
+{
+ return new LinuxTimer();
+}