xref: /aosp_15_r20/external/cronet/base/time/time_override.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 2018 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "base/time/time_override.h"
6 
7 #include "base/check.h"
8 
9 namespace base {
10 namespace subtle {
11 
12 // static
13 bool ScopedTimeClockOverrides::overrides_active_ = false;
14 
ScopedTimeClockOverrides(TimeNowFunction time_override,TimeTicksNowFunction time_ticks_override,ThreadTicksNowFunction thread_ticks_override,LiveTicksNowFunction live_ticks_override)15 ScopedTimeClockOverrides::ScopedTimeClockOverrides(
16     TimeNowFunction time_override,
17     TimeTicksNowFunction time_ticks_override,
18     ThreadTicksNowFunction thread_ticks_override,
19     LiveTicksNowFunction live_ticks_override) {
20   DCHECK(!overrides_active_);
21   overrides_active_ = true;
22   if (time_override) {
23     internal::g_time_now_function.store(time_override,
24                                         std::memory_order_relaxed);
25     internal::g_time_now_from_system_time_function.store(
26         time_override, std::memory_order_relaxed);
27   }
28   if (time_ticks_override) {
29     internal::g_time_ticks_now_function.store(time_ticks_override,
30                                               std::memory_order_relaxed);
31   }
32   if (live_ticks_override) {
33     internal::g_live_ticks_now_function.store(live_ticks_override,
34                                               std::memory_order_relaxed);
35   }
36   if (thread_ticks_override) {
37     internal::g_thread_ticks_now_function.store(thread_ticks_override,
38                                                 std::memory_order_relaxed);
39   }
40 }
41 
~ScopedTimeClockOverrides()42 ScopedTimeClockOverrides::~ScopedTimeClockOverrides() {
43   internal::g_time_now_function.store(&TimeNowIgnoringOverride);
44   internal::g_time_now_from_system_time_function.store(
45       &TimeNowFromSystemTimeIgnoringOverride);
46   internal::g_time_ticks_now_function.store(&TimeTicksNowIgnoringOverride);
47   internal::g_live_ticks_now_function.store(&LiveTicksNowIgnoringOverride);
48   internal::g_thread_ticks_now_function.store(&ThreadTicksNowIgnoringOverride);
49   overrides_active_ = false;
50 }
51 
52 }  // namespace subtle
53 }  // namespace base
54