time_override.cc 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. // Copyright 2018 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "base/time/time_override.h"
  5. #include "base/check.h"
  6. namespace base {
  7. namespace subtle {
  8. // static
  9. bool ScopedTimeClockOverrides::overrides_active_ = false;
  10. ScopedTimeClockOverrides::ScopedTimeClockOverrides(
  11. TimeNowFunction time_override,
  12. TimeTicksNowFunction time_ticks_override,
  13. ThreadTicksNowFunction thread_ticks_override) {
  14. DCHECK(!overrides_active_);
  15. overrides_active_ = true;
  16. if (time_override) {
  17. internal::g_time_now_function.store(time_override,
  18. std::memory_order_relaxed);
  19. internal::g_time_now_from_system_time_function.store(
  20. time_override, std::memory_order_relaxed);
  21. }
  22. if (time_ticks_override) {
  23. internal::g_time_ticks_now_function.store(time_ticks_override,
  24. std::memory_order_relaxed);
  25. }
  26. if (thread_ticks_override) {
  27. internal::g_thread_ticks_now_function.store(thread_ticks_override,
  28. std::memory_order_relaxed);
  29. }
  30. }
  31. ScopedTimeClockOverrides::~ScopedTimeClockOverrides() {
  32. internal::g_time_now_function.store(&TimeNowIgnoringOverride);
  33. internal::g_time_now_from_system_time_function.store(
  34. &TimeNowFromSystemTimeIgnoringOverride);
  35. internal::g_time_ticks_now_function.store(&TimeTicksNowIgnoringOverride);
  36. internal::g_thread_ticks_now_function.store(&ThreadTicksNowIgnoringOverride);
  37. overrides_active_ = false;
  38. }
  39. } // namespace subtle
  40. } // namespace base