Index: chrome/browser/sync/util/highres_timer-linux.h |
=================================================================== |
--- chrome/browser/sync/util/highres_timer-linux.h (revision 0) |
+++ chrome/browser/sync/util/highres_timer-linux.h (revision 0) |
@@ -0,0 +1,79 @@ |
+// Copyright (c) 2009 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+// |
+// High resolution timer functions for use in Linux. |
+ |
+#ifndef CHROME_BROWSER_SYNC_UTIL_HIGHRES_TIMER_LINUX_H_ |
+#define CHROME_BROWSER_SYNC_UTIL_HIGHRES_TIMER_LINUX_H_ |
+ |
+#include "base/basictypes.h" |
+ |
+#include <sys/time.h> |
+ |
+const uint64 MICROS_IN_SECOND = 1000000L; |
+ |
+// A handy class for reliably measuring wall-clock time with decent resolution. |
+// |
+// We want to measure time with high resolution on Linux. What to do? |
+// |
+// RDTSC? Sure, but how do you convert it to wall clock time? |
+// clock_gettime? It's not in all Linuxes. |
+// |
+// Let's just use gettimeofday; it's good to the microsecond. |
+class HighresTimer { |
+ public: |
+ // Captures the current start time. |
+ HighresTimer(); |
+ |
+ // Captures the current tick, can be used to reset a timer for reuse. |
+ void Start(); |
+ |
+ // Returns the elapsed ticks with full resolution. |
+ uint64 GetElapsedTicks() const; |
+ |
+ // Returns the elapsed time in milliseconds, rounded to the nearest |
+ // millisecond. |
+ uint64 GetElapsedMs() const; |
+ |
+ // Returns the elapsed time in seconds, rounded to the nearest second. |
+ uint64 GetElapsedSec() const; |
+ |
+ uint64 start_ticks() const { return start_ticks_; } |
+ |
+ // Returns timer frequency from cache, should be less overhead than |
+ // ::QueryPerformanceFrequency. |
+ static uint64 GetTimerFrequency(); |
+ // Returns current ticks. |
+ static uint64 GetCurrentTicks(); |
+ |
+ private: |
+ // Captured start time. |
+ uint64 start_ticks_; |
+}; |
+ |
+inline HighresTimer::HighresTimer() { |
+ Start(); |
+} |
+ |
+inline void HighresTimer::Start() { |
+ start_ticks_ = GetCurrentTicks(); |
+} |
+ |
+inline uint64 HighresTimer::GetTimerFrequency() { |
+ // Fixed; one "tick" is one microsecond. |
+ return MICROS_IN_SECOND; |
+} |
+ |
+inline uint64 HighresTimer::GetCurrentTicks() { |
+ timeval tv; |
+ gettimeofday(&tv, 0); |
+ |
+ return tv.tv_sec * MICROS_IN_SECOND + tv.tv_usec; |
+} |
+ |
+inline uint64 HighresTimer::GetElapsedTicks() const { |
+ return start_ticks_ - GetCurrentTicks(); |
+} |
+ |
+#endif // CHROME_BROWSER_SYNC_UTIL_HIGHRES_TIMER_LINUX_H_ |
Property changes on: chrome\browser\sync\util\highres_timer-linux.h |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |