• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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)15 ScopedTimeClockOverrides::ScopedTimeClockOverrides(
16     TimeNowFunction time_override,
17     TimeTicksNowFunction time_ticks_override,
18     ThreadTicksNowFunction thread_ticks_override) {
19   DCHECK(!overrides_active_);
20   overrides_active_ = true;
21   if (time_override) {
22     internal::g_time_now_function.store(time_override,
23                                         std::memory_order_relaxed);
24     internal::g_time_now_from_system_time_function.store(
25         time_override, std::memory_order_relaxed);
26   }
27   if (time_ticks_override) {
28     internal::g_time_ticks_now_function.store(time_ticks_override,
29                                               std::memory_order_relaxed);
30   }
31   if (thread_ticks_override) {
32     internal::g_thread_ticks_now_function.store(thread_ticks_override,
33                                                 std::memory_order_relaxed);
34   }
35 }
36 
~ScopedTimeClockOverrides()37 ScopedTimeClockOverrides::~ScopedTimeClockOverrides() {
38   internal::g_time_now_function.store(&TimeNowIgnoringOverride);
39   internal::g_time_now_from_system_time_function.store(
40       &TimeNowFromSystemTimeIgnoringOverride);
41   internal::g_time_ticks_now_function.store(&TimeTicksNowIgnoringOverride);
42   internal::g_thread_ticks_now_function.store(&ThreadTicksNowIgnoringOverride);
43   overrides_active_ = false;
44 }
45 
46 }  // namespace subtle
47 }  // namespace base
48