summaryrefslogtreecommitdiffstats
path: root/third_party/libwebrtc/system_wrappers/include/clock.h
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:22:09 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:22:09 +0000
commit43a97878ce14b72f0981164f87f2e35e14151312 (patch)
tree620249daf56c0258faa40cbdcf9cfba06de2a846 /third_party/libwebrtc/system_wrappers/include/clock.h
parentInitial commit. (diff)
downloadfirefox-43a97878ce14b72f0981164f87f2e35e14151312.tar.xz
firefox-43a97878ce14b72f0981164f87f2e35e14151312.zip
Adding upstream version 110.0.1.upstream/110.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'third_party/libwebrtc/system_wrappers/include/clock.h')
-rw-r--r--third_party/libwebrtc/system_wrappers/include/clock.h84
1 files changed, 84 insertions, 0 deletions
diff --git a/third_party/libwebrtc/system_wrappers/include/clock.h b/third_party/libwebrtc/system_wrappers/include/clock.h
new file mode 100644
index 0000000000..214b34c970
--- /dev/null
+++ b/third_party/libwebrtc/system_wrappers/include/clock.h
@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 2013 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 SYSTEM_WRAPPERS_INCLUDE_CLOCK_H_
+#define SYSTEM_WRAPPERS_INCLUDE_CLOCK_H_
+
+#include <stdint.h>
+
+#include <atomic>
+#include <memory>
+
+#include "api/units/timestamp.h"
+#include "rtc_base/system/rtc_export.h"
+#include "system_wrappers/include/ntp_time.h"
+
+namespace webrtc {
+
+// January 1970, in NTP seconds.
+const uint32_t kNtpJan1970 = 2208988800UL;
+
+// Magic NTP fractional unit.
+const double kMagicNtpFractionalUnit = 4.294967296E+9;
+
+// A clock interface that allows reading of absolute and relative timestamps.
+class RTC_EXPORT Clock {
+ public:
+ virtual ~Clock() {}
+
+ // Return a timestamp relative to an unspecified epoch.
+ virtual Timestamp CurrentTime() = 0;
+ int64_t TimeInMilliseconds() { return CurrentTime().ms(); }
+ int64_t TimeInMicroseconds() { return CurrentTime().us(); }
+
+ // Retrieve an NTP absolute timestamp (with an epoch of Jan 1, 1900).
+ NtpTime CurrentNtpTime() { return ConvertTimestampToNtpTime(CurrentTime()); }
+ int64_t CurrentNtpInMilliseconds() { return CurrentNtpTime().ToMs(); }
+
+ // Converts between a relative timestamp returned by this clock, to NTP time.
+ virtual NtpTime ConvertTimestampToNtpTime(Timestamp timestamp) = 0;
+ int64_t ConvertTimestampToNtpTimeInMilliseconds(int64_t timestamp_ms) {
+ return ConvertTimestampToNtpTime(Timestamp::Millis(timestamp_ms)).ToMs();
+ }
+
+ // Returns an instance of the real-time system clock implementation.
+ static Clock* GetRealTimeClockRaw();
+};
+
+class SimulatedClock : public Clock {
+ public:
+ // The constructors assume an epoch of Jan 1, 1970.
+ explicit SimulatedClock(int64_t initial_time_us);
+ explicit SimulatedClock(Timestamp initial_time);
+ ~SimulatedClock() override;
+
+ // Return a timestamp with an epoch of Jan 1, 1970.
+ Timestamp CurrentTime() override;
+
+ NtpTime ConvertTimestampToNtpTime(Timestamp timestamp) override;
+
+ // Advance the simulated clock with a given number of milliseconds or
+ // microseconds.
+ void AdvanceTimeMilliseconds(int64_t milliseconds);
+ void AdvanceTimeMicroseconds(int64_t microseconds);
+ void AdvanceTime(TimeDelta delta);
+
+ private:
+ // The time is read and incremented with relaxed order. Each thread will see
+ // monotonically increasing time, and when threads post tasks or messages to
+ // one another, the synchronization done as part of the message passing should
+ // ensure that any causual chain of events on multiple threads also
+ // corresponds to monotonically increasing time.
+ std::atomic<int64_t> time_us_;
+};
+
+} // namespace webrtc
+
+#endif // SYSTEM_WRAPPERS_INCLUDE_CLOCK_H_