// Copyright 2015 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/task/sequence_manager/real_time_domain.h" #include "base/task/sequence_manager/sequence_manager.h" namespace base { namespace sequence_manager { namespace internal { RealTimeDomain::RealTimeDomain() {} RealTimeDomain::~RealTimeDomain() = default; LazyNow RealTimeDomain::CreateLazyNow() const { return LazyNow(sequence_manager()->GetTickClock()); } TimeTicks RealTimeDomain::Now() const { return sequence_manager()->NowTicks(); } Optional RealTimeDomain::DelayTillNextTask(LazyNow* lazy_now) { Optional next_run_time = NextScheduledRunTime(); if (!next_run_time) return nullopt; TimeTicks now = lazy_now->Now(); if (now >= next_run_time) { // Overdue work needs to be run immediately. return TimeDelta(); } TimeDelta delay = *next_run_time - now; TRACE_EVENT1("sequence_manager", "RealTimeDomain::DelayTillNextTask", "delay_ms", delay.InMillisecondsF()); return delay; } const char* RealTimeDomain::GetName() const { return "RealTimeDomain"; } } // namespace internal } // namespace sequence_manager } // namespace base