• 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,LiveTicksNowFunction live_ticks_override,TimeTicksLowResolutionNowFunction time_ticks_low_resolution_override)15 ScopedTimeClockOverrides::ScopedTimeClockOverrides(
16     TimeNowFunction time_override,
17     TimeTicksNowFunction time_ticks_override,
18     ThreadTicksNowFunction thread_ticks_override,
19     LiveTicksNowFunction live_ticks_override,
20     TimeTicksLowResolutionNowFunction time_ticks_low_resolution_override) {
21   DCHECK(!overrides_active_);
22   overrides_active_ = true;
23   if (time_override) {
24     internal::g_time_now_function.store(time_override,
25                                         std::memory_order_relaxed);
26     internal::g_time_now_from_system_time_function.store(
27         time_override, std::memory_order_relaxed);
28   }
29   if (time_ticks_override) {
30     internal::g_time_ticks_now_function.store(time_ticks_override,
31                                               std::memory_order_relaxed);
32   }
33   if (live_ticks_override) {
34     internal::g_live_ticks_now_function.store(live_ticks_override,
35                                               std::memory_order_relaxed);
36   }
37   if (thread_ticks_override) {
38     internal::g_thread_ticks_now_function.store(thread_ticks_override,
39                                                 std::memory_order_relaxed);
40   }
41   if (time_ticks_low_resolution_override) {
42     internal::g_time_ticks_low_resolution_now_function.store(
43         time_ticks_low_resolution_override, std::memory_order_relaxed);
44   }
45 }
46 
~ScopedTimeClockOverrides()47 ScopedTimeClockOverrides::~ScopedTimeClockOverrides() {
48   internal::g_time_now_function.store(&TimeNowIgnoringOverride);
49   internal::g_time_now_from_system_time_function.store(
50       &TimeNowFromSystemTimeIgnoringOverride);
51   internal::g_time_ticks_now_function.store(&TimeTicksNowIgnoringOverride);
52   internal::g_live_ticks_now_function.store(&LiveTicksNowIgnoringOverride);
53   internal::g_thread_ticks_now_function.store(&ThreadTicksNowIgnoringOverride);
54   internal::g_time_ticks_low_resolution_now_function.store(
55       &TimeTicksLowResolutionNowIgnoringOverride);
56   overrides_active_ = false;
57 }
58 
59 }  // namespace subtle
60 }  // namespace base
61