summaryrefslogtreecommitdiff
path: root/Source/ThirdParty/ANGLE/util/osx/OSXTimer.cpp
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
commit1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch)
tree46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/ThirdParty/ANGLE/util/osx/OSXTimer.cpp
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/ThirdParty/ANGLE/util/osx/OSXTimer.cpp')
-rw-r--r--Source/ThirdParty/ANGLE/util/osx/OSXTimer.cpp60
1 files changed, 60 insertions, 0 deletions
diff --git a/Source/ThirdParty/ANGLE/util/osx/OSXTimer.cpp b/Source/ThirdParty/ANGLE/util/osx/OSXTimer.cpp
new file mode 100644
index 000000000..909155d86
--- /dev/null
+++ b/Source/ThirdParty/ANGLE/util/osx/OSXTimer.cpp
@@ -0,0 +1,60 @@
+//
+// 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.
+//
+
+// OSXTimer.cpp: Implementation of a high precision timer class on OSX
+
+#include "osx/OSXTimer.h"
+
+#include <CoreServices/CoreServices.h>
+#include <mach/mach.h>
+#include <mach/mach_time.h>
+
+OSXTimer::OSXTimer()
+ : mRunning(false)
+{
+}
+
+void OSXTimer::start()
+{
+ mStartTime = mach_absolute_time();
+ mRunning = true;
+}
+
+void OSXTimer::stop()
+{
+ mStopTime = mach_absolute_time();
+ mRunning = false;
+}
+
+double OSXTimer::getElapsedTime() const
+{
+ // If this is the first time we've run, get the timebase.
+ // We can use denom == 0 to indicate that sTimebaseInfo is
+ // uninitialised because it makes no sense to have a zero
+ // denominator in a fraction.
+ static mach_timebase_info_data_t timebaseInfo;
+ static double secondCoeff;
+
+ if ( timebaseInfo.denom == 0 )
+ {
+ mach_timebase_info(&timebaseInfo);
+ secondCoeff = timebaseInfo.numer * (1.0 / 1000000000) / timebaseInfo.denom;
+ }
+
+ if (mRunning)
+ {
+ return secondCoeff * (mach_absolute_time() - mStartTime);
+ }
+ else
+ {
+ return secondCoeff * (mStopTime - mStartTime);
+ }
+}
+
+Timer *CreateTimer()
+{
+ return new OSXTimer();
+}