OLD | NEW |
| (Empty) |
1 /* | |
2 * Copyright (c) 2013 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_SYSTEM_WRAPPERS_INTERFACE_CLOCK_H_ | |
12 #define WEBRTC_SYSTEM_WRAPPERS_INTERFACE_CLOCK_H_ | |
13 | |
14 #include "webrtc/base/scoped_ptr.h" | |
15 #include "webrtc/system_wrappers/interface/rw_lock_wrapper.h" | |
16 #include "webrtc/typedefs.h" | |
17 | |
18 namespace webrtc { | |
19 | |
20 // January 1970, in NTP seconds. | |
21 const uint32_t kNtpJan1970 = 2208988800UL; | |
22 | |
23 // Magic NTP fractional unit. | |
24 const double kMagicNtpFractionalUnit = 4.294967296E+9; | |
25 | |
26 // A clock interface that allows reading of absolute and relative timestamps. | |
27 class Clock { | |
28 public: | |
29 virtual ~Clock() {} | |
30 | |
31 // Return a timestamp in milliseconds relative to some arbitrary source; the | |
32 // source is fixed for this clock. | |
33 virtual int64_t TimeInMilliseconds() const = 0; | |
34 | |
35 // Return a timestamp in microseconds relative to some arbitrary source; the | |
36 // source is fixed for this clock. | |
37 virtual int64_t TimeInMicroseconds() const = 0; | |
38 | |
39 // Retrieve an NTP absolute timestamp in seconds and fractions of a second. | |
40 virtual void CurrentNtp(uint32_t& seconds, uint32_t& fractions) const = 0; | |
41 | |
42 // Retrieve an NTP absolute timestamp in milliseconds. | |
43 virtual int64_t CurrentNtpInMilliseconds() const = 0; | |
44 | |
45 // Converts an NTP timestamp to a millisecond timestamp. | |
46 static int64_t NtpToMs(uint32_t seconds, uint32_t fractions); | |
47 | |
48 // Returns an instance of the real-time system clock implementation. | |
49 static Clock* GetRealTimeClock(); | |
50 }; | |
51 | |
52 class SimulatedClock : public Clock { | |
53 public: | |
54 explicit SimulatedClock(int64_t initial_time_us); | |
55 | |
56 ~SimulatedClock() override; | |
57 | |
58 // Return a timestamp in milliseconds relative to some arbitrary source; the | |
59 // source is fixed for this clock. | |
60 int64_t TimeInMilliseconds() const override; | |
61 | |
62 // Return a timestamp in microseconds relative to some arbitrary source; the | |
63 // source is fixed for this clock. | |
64 int64_t TimeInMicroseconds() const override; | |
65 | |
66 // Retrieve an NTP absolute timestamp in milliseconds. | |
67 void CurrentNtp(uint32_t& seconds, uint32_t& fractions) const override; | |
68 | |
69 // Converts an NTP timestamp to a millisecond timestamp. | |
70 int64_t CurrentNtpInMilliseconds() const override; | |
71 | |
72 // Advance the simulated clock with a given number of milliseconds or | |
73 // microseconds. | |
74 void AdvanceTimeMilliseconds(int64_t milliseconds); | |
75 void AdvanceTimeMicroseconds(int64_t microseconds); | |
76 | |
77 private: | |
78 int64_t time_us_; | |
79 rtc::scoped_ptr<RWLockWrapper> lock_; | |
80 }; | |
81 | |
82 }; // namespace webrtc | |
83 | |
84 #endif // WEBRTC_SYSTEM_WRAPPERS_INTERFACE_CLOCK_H_ | |
OLD | NEW |