|  | /* | 
|  | *  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_ |