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 "partition_alloc/partition_alloc_base/time/time_override.h" 6 7 #include "partition_alloc/partition_alloc_base/check.h" 8 9 namespace partition_alloc::internal::base::subtle { 10 11 // static 12 bool ScopedTimeClockOverrides::overrides_active_ = false; 13 ScopedTimeClockOverrides(TimeNowFunction time_override,TimeTicksNowFunction time_ticks_override,ThreadTicksNowFunction thread_ticks_override)14ScopedTimeClockOverrides::ScopedTimeClockOverrides( 15 TimeNowFunction time_override, 16 TimeTicksNowFunction time_ticks_override, 17 ThreadTicksNowFunction thread_ticks_override) { 18 PA_BASE_DCHECK(!overrides_active_); 19 overrides_active_ = true; 20 if (time_override) { 21 internal::g_time_now_function.store(time_override, 22 std::memory_order_relaxed); 23 internal::g_time_now_from_system_time_function.store( 24 time_override, std::memory_order_relaxed); 25 } 26 if (time_ticks_override) { 27 internal::g_time_ticks_now_function.store(time_ticks_override, 28 std::memory_order_relaxed); 29 } 30 if (thread_ticks_override) { 31 internal::g_thread_ticks_now_function.store(thread_ticks_override, 32 std::memory_order_relaxed); 33 } 34 } 35 ~ScopedTimeClockOverrides()36ScopedTimeClockOverrides::~ScopedTimeClockOverrides() { 37 internal::g_time_now_function.store(&TimeNowIgnoringOverride); 38 internal::g_time_now_from_system_time_function.store( 39 &TimeNowFromSystemTimeIgnoringOverride); 40 internal::g_time_ticks_now_function.store(&TimeTicksNowIgnoringOverride); 41 internal::g_thread_ticks_now_function.store(&ThreadTicksNowIgnoringOverride); 42 overrides_active_ = false; 43 } 44 45 } // namespace partition_alloc::internal::base::subtle 46