| Index: components/scheduler/base/real_time_domain.cc
|
| diff --git a/components/scheduler/base/real_time_domain.cc b/components/scheduler/base/real_time_domain.cc
|
| index 8a57a0415cf3181d1d2117a587b3c7009459417e..c3b4505fb1aa7967114cd15c06e63588b5397dbd 100644
|
| --- a/components/scheduler/base/real_time_domain.cc
|
| +++ b/components/scheduler/base/real_time_domain.cc
|
| @@ -10,29 +10,59 @@
|
|
|
| namespace scheduler {
|
|
|
| -RealTimeDomain::RealTimeDomain(
|
| +RealTimeDomain::RealTimeDomain() : weak_factory_(this) {}
|
| +
|
| +RealTimeDomain::~RealTimeDomain() {}
|
| +
|
| +void RealTimeDomain::OnRegisterWithTaskQueueManager(
|
| TaskQueueManagerDelegate* task_queue_manager_delegate,
|
| - base::Closure do_work_closure)
|
| - : task_queue_manager_delegate_(task_queue_manager_delegate),
|
| - do_work_closure_(do_work_closure) {
|
| + base::Closure do_work_closure) {
|
| + task_queue_manager_delegate_ = task_queue_manager_delegate;
|
| + do_work_closure_ = do_work_closure;
|
| DCHECK(task_queue_manager_delegate_);
|
| }
|
|
|
| -RealTimeDomain::~RealTimeDomain() {}
|
| -
|
| LazyNow RealTimeDomain::CreateLazyNow() {
|
| + DCHECK(task_queue_manager_delegate_);
|
| return LazyNow(task_queue_manager_delegate_);
|
| }
|
|
|
| -void RealTimeDomain::RequestWakeup(base::TimeDelta delay) {
|
| - task_queue_manager_delegate_->PostDelayedTask(FROM_HERE, do_work_closure_,
|
| - delay);
|
| +void RealTimeDomain::RequestWakeup(LazyNow* lazy_now, base::TimeDelta delay) {
|
| + PostWrappedDoWork(lazy_now->Now(), lazy_now->Now() + delay);
|
| }
|
|
|
| bool RealTimeDomain::MaybeAdvanceTime() {
|
| + base::TimeTicks next_run_time;
|
| + if (!NextScheduledRunTime(&next_run_time))
|
| + return false;
|
| +
|
| + DCHECK(task_queue_manager_delegate_);
|
| + base::TimeTicks now = task_queue_manager_delegate_->NowTicks();
|
| + if (now >= next_run_time)
|
| + return true;
|
| +
|
| + PostWrappedDoWork(now, next_run_time);
|
| return false;
|
| }
|
|
|
| +void RealTimeDomain::PostWrappedDoWork(base::TimeTicks now,
|
| + base::TimeTicks run_time) {
|
| + DCHECK_GE(run_time, now);
|
| + DCHECK(task_queue_manager_delegate_);
|
| + if (pending_wakeups_.insert(run_time).second) {
|
| + task_queue_manager_delegate_->PostDelayedTask(
|
| + FROM_HERE,
|
| + base::Bind(&RealTimeDomain::WrappedDoWorkTask,
|
| + weak_factory_.GetWeakPtr(), run_time),
|
| + run_time - now);
|
| + }
|
| +}
|
| +
|
| +void RealTimeDomain::WrappedDoWorkTask(base::TimeTicks run_time) {
|
| + pending_wakeups_.erase(run_time);
|
| + do_work_closure_.Run();
|
| +}
|
| +
|
| void RealTimeDomain::AsValueIntoInternal(
|
| base::trace_event::TracedValue* state) const {}
|
|
|
|
|