1 /* 2 * Copyright 2008 The WebRTC Project Authors. All rights reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #ifndef WEBRTC_BASE_TIMING_H_ 12 #define WEBRTC_BASE_TIMING_H_ 13 14 #if defined(WEBRTC_WIN) 15 #include "webrtc/base/win32.h" 16 #endif 17 18 namespace rtc { 19 20 class Timing { 21 public: 22 Timing(); 23 virtual ~Timing(); 24 25 // WallTimeNow() returns the current wall-clock time in seconds, 26 // within 10 milliseconds resolution. 27 // WallTimeNow is static and does not require a timer_handle_ on Windows. 28 static double WallTimeNow(); 29 30 // TimerNow() is like WallTimeNow(), but is monotonically 31 // increasing. It returns seconds in resolution of 10 microseconds 32 // or better. Although timer and wall-clock time have the same 33 // timing unit, they do not necessarily correlate because wall-clock 34 // time may be adjusted backwards, hence not monotonic. 35 // Made virtual so we can make a fake one. 36 virtual double TimerNow(); 37 38 // BusyWait() exhausts CPU as long as the time elapsed is less than 39 // the specified interval in seconds. Returns the actual waiting 40 // time based on TimerNow() measurement. 41 double BusyWait(double period); 42 43 // IdleWait() relinquishes control of CPU for specified period in 44 // seconds. It uses highest resolution sleep mechanism as possible, 45 // but does not otherwise guarantee the accuracy. Returns the 46 // actual waiting time based on TimerNow() measurement. 47 // 48 // This function is not re-entrant for an object. Create a fresh 49 // Timing object for each thread. 50 double IdleWait(double period); 51 52 private: 53 #if defined(WEBRTC_WIN) 54 HANDLE timer_handle_; 55 #endif 56 }; 57 58 } // namespace rtc 59 60 #endif // WEBRTC_BASE_TIMING_H_ 61