blob: d28c2422d9e2d693b11a34fca7928fbc9654eb46 [file] [log] [blame] [edit]
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/reporting/util/mock_clock.h"
#include "base/no_destructor.h"
#include "base/synchronization/lock.h"
#include "base/time/time.h"
#include "base/time/time_override.h"
namespace reporting::test {
// static
MockClock& MockClock::Get() {
static base::NoDestructor<MockClock> mock_clock;
return *mock_clock;
}
void MockClock::Advance(base::TimeDelta duration) {
base::AutoLock lock(lock_);
offset_ += duration;
}
// static
base::Time MockClock::MockedNow() {
return base::subtle::TimeNowIgnoringOverride() + Get().Offset();
}
// static
base::TimeTicks MockClock::MockedTicksNow() {
return base::subtle::TimeTicksNowIgnoringOverride() + Get().Offset();
}
MockClock::MockClock()
: time_override_(std::make_unique<base::subtle::ScopedTimeClockOverrides>(
&MockClock::MockedNow,
&MockClock::MockedTicksNow,
nullptr)) {}
MockClock::~MockClock() = default;
base::TimeDelta MockClock::Offset() {
base::AutoLock lock(lock_);
return offset_;
}
} // namespace reporting::test