/* * Copyright 2008 The WebRTC 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 in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ #ifndef WEBRTC_BASE_TIMING_H_ #define WEBRTC_BASE_TIMING_H_ #if defined(WEBRTC_WIN) #include "webrtc/base/win32.h" #endif namespace rtc { class Timing { public: Timing(); virtual ~Timing(); // WallTimeNow() returns the current wall-clock time in seconds, // within 10 milliseconds resolution. // WallTimeNow is static and does not require a timer_handle_ on Windows. static double WallTimeNow(); // TimerNow() is like WallTimeNow(), but is monotonically // increasing. It returns seconds in resolution of 10 microseconds // or better. Although timer and wall-clock time have the same // timing unit, they do not necessarily correlate because wall-clock // time may be adjusted backwards, hence not monotonic. // Made virtual so we can make a fake one. virtual double TimerNow(); // BusyWait() exhausts CPU as long as the time elapsed is less than // the specified interval in seconds. Returns the actual waiting // time based on TimerNow() measurement. double BusyWait(double period); // IdleWait() relinquishes control of CPU for specified period in // seconds. It uses highest resolution sleep mechanism as possible, // but does not otherwise guarantee the accuracy. Returns the // actual waiting time based on TimerNow() measurement. // // This function is not re-entrant for an object. Create a fresh // Timing object for each thread. double IdleWait(double period); private: #if defined(WEBRTC_WIN) HANDLE timer_handle_; #endif }; } // namespace rtc #endif // WEBRTC_BASE_TIMING_H_