blob: 46cc88437cd99dcacebcfb82aeec536e8d3f5a04 [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/test/scoped_mock_clock_override.h"
namespace base {
ScopedMockClockOverride* ScopedMockClockOverride::scoped_mock_clock_ = nullptr;
ScopedMockClockOverride::ScopedMockClockOverride()
: // Start the offset past zero so that it's not treated as a null value.
offset_(TimeDelta::FromDays(365)) {
DCHECK(!scoped_mock_clock_)
<< "Nested ScopedMockClockOverrides are not supported.";
scoped_mock_clock_ = this;
time_clock_overrides_ = std::make_unique<subtle::ScopedTimeClockOverrides>(
&ScopedMockClockOverride::Now, &ScopedMockClockOverride::NowTicks,
&ScopedMockClockOverride::NowThreadTicks);
}
ScopedMockClockOverride::~ScopedMockClockOverride() {
scoped_mock_clock_ = nullptr;
}
Time ScopedMockClockOverride::Now() {
return Time() + scoped_mock_clock_->offset_;
}
TimeTicks ScopedMockClockOverride::NowTicks() {
return TimeTicks() + scoped_mock_clock_->offset_;
}
ThreadTicks ScopedMockClockOverride::NowThreadTicks() {
return ThreadTicks() + scoped_mock_clock_->offset_;
}
void ScopedMockClockOverride::Advance(TimeDelta delta) {
DCHECK_GT(delta, base::TimeDelta())
<< "Monotonically increasing time may not go backwards";
offset_ += delta;
}
} // namespace base