scoped_mock_clock_override.cc 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  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/test/scoped_mock_clock_override.h"
  5. #include <ostream>
  6. #include "base/check_op.h"
  7. namespace base {
  8. ScopedMockClockOverride* ScopedMockClockOverride::scoped_mock_clock_ = nullptr;
  9. ScopedMockClockOverride::ScopedMockClockOverride()
  10. : // Start the offset past zero so that it's not treated as a null value.
  11. offset_(Days(365)) {
  12. DCHECK(!scoped_mock_clock_)
  13. << "Nested ScopedMockClockOverrides are not supported.";
  14. scoped_mock_clock_ = this;
  15. time_clock_overrides_ = std::make_unique<subtle::ScopedTimeClockOverrides>(
  16. &ScopedMockClockOverride::Now, &ScopedMockClockOverride::NowTicks,
  17. &ScopedMockClockOverride::NowThreadTicks);
  18. }
  19. ScopedMockClockOverride::~ScopedMockClockOverride() {
  20. scoped_mock_clock_ = nullptr;
  21. }
  22. Time ScopedMockClockOverride::Now() {
  23. return Time() + scoped_mock_clock_->offset_;
  24. }
  25. TimeTicks ScopedMockClockOverride::NowTicks() {
  26. return TimeTicks() + scoped_mock_clock_->offset_;
  27. }
  28. ThreadTicks ScopedMockClockOverride::NowThreadTicks() {
  29. return ThreadTicks() + scoped_mock_clock_->offset_;
  30. }
  31. void ScopedMockClockOverride::Advance(TimeDelta delta) {
  32. DCHECK_GT(delta, base::TimeDelta())
  33. << "Monotonically increasing time may not go backwards";
  34. offset_ += delta;
  35. }
  36. } // namespace base