Revision: 12651
Author:   [email protected]
Date:     Tue Oct  2 03:59:44 2012
Log:      Adding a high-resolution timer to platform win32.

BUG=None

Review URL: https://codereview.chromium.org/10867057
Patch from Sergey Rogulenko <[email protected]>.
http://code.google.com/p/v8/source/detail?r=12651

Modified:
 /branches/bleeding_edge/src/platform-win32.cc

=======================================
--- /branches/bleeding_edge/src/platform-win32.cc       Tue Oct  2 03:51:00 2012
+++ /branches/bleeding_edge/src/platform-win32.cc       Tue Oct  2 03:59:44 2012
@@ -591,8 +591,16 @@
   return t.ToJSTime();
 }

-// Returns the tickcounter based on timeGetTime.
+
+static LARGE_INTEGER frequency = 0;
+
+
+// Returns the tickcounter based on QueryPerformanceCounter or timeGetTime.
 int64_t OS::Ticks() {
+  static LARGE_INTEGER tick;
+  if (frequency != 0 && QueryPerformanceCounter(&tick)) {
+    return static_cast<int64_t>(tick.QuadPart * 1e6 / frequency->QuadPart);
+  }
   return timeGetTime() * 1000;  // Convert to microseconds.
 }

@@ -2087,12 +2095,15 @@
   // call this setup code within the same millisecond.
   uint64_t seed = static_cast<uint64_t>(TimeCurrentMillis());
   srand(static_cast<unsigned int>(seed));
+  // Get the number of ticks per second that is used in OS::Ticks()
+  QueryPerformanceFrequency(&frequency);
   limit_mutex = CreateMutex();
   SamplerThread::SetUp();
 }


 void OS::TearDown() {
+  frequency = 0;
   SamplerThread::TearDown();
   delete limit_mutex;
 }

--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to