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)15ScopedTimeClockOverrides::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()37ScopedTimeClockOverrides::~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