| Index: third_party/WebKit/Source/platform/scheduler/base/task_queue_manager.cc
|
| diff --git a/third_party/WebKit/Source/platform/scheduler/base/task_queue_manager.cc b/third_party/WebKit/Source/platform/scheduler/base/task_queue_manager.cc
|
| index e42fee10c09e0aa1542725e07936804dca855cc6..2a4f441b9b126813610fce556c2496a1b9cabf42 100644
|
| --- a/third_party/WebKit/Source/platform/scheduler/base/task_queue_manager.cc
|
| +++ b/third_party/WebKit/Source/platform/scheduler/base/task_queue_manager.cc
|
| @@ -230,10 +230,9 @@ void TaskQueueManager::MaybeScheduleImmediateWorkLocked(
|
|
|
| void TaskQueueManager::MaybeScheduleDelayedWork(
|
| const tracked_objects::Location& from_here,
|
| - base::TimeTicks now,
|
| - base::TimeDelta delay) {
|
| + LazyNow* lazy_now,
|
| + base::TimeTicks run_time) {
|
| DCHECK(main_thread_checker_.CalledOnValidThread());
|
| - DCHECK_GE(delay, base::TimeDelta());
|
| {
|
| base::AutoLock lock(any_thread_lock_);
|
|
|
| @@ -248,11 +247,16 @@ void TaskQueueManager::MaybeScheduleDelayedWork(
|
| }
|
|
|
| // De-duplicate DoWork posts.
|
| - base::TimeTicks run_time = now + delay;
|
| if (next_scheduled_delayed_do_work_time_ <= run_time &&
|
| !next_scheduled_delayed_do_work_time_.is_null())
|
| return;
|
|
|
| + cancelable_delayed_do_work_closure_.Reset(delayed_do_work_closure_);
|
| +
|
| + base::TimeDelta delay =
|
| + std::max(base::TimeDelta(), run_time - lazy_now->Now());
|
| + next_scheduled_delayed_do_work_time_ = lazy_now->Now() + delay;
|
| +
|
| TRACE_EVENT1(disabled_by_default_tracing_category_,
|
| "TaskQueueManager::MaybeScheduleDelayedWork::PostDelayedTask",
|
| "delay_ms", delay.InMillisecondsF());
|
| @@ -263,6 +267,15 @@ void TaskQueueManager::MaybeScheduleDelayedWork(
|
| from_here, cancelable_delayed_do_work_closure_.callback(), delay);
|
| }
|
|
|
| +void TaskQueueManager::CancelDelayedWork(base::TimeTicks run_time) {
|
| + DCHECK(main_thread_checker_.CalledOnValidThread());
|
| + if (next_scheduled_delayed_do_work_time_ != run_time)
|
| + return;
|
| +
|
| + cancelable_delayed_do_work_closure_.Cancel();
|
| + next_scheduled_delayed_do_work_time_ = base::TimeTicks();
|
| +}
|
| +
|
| void TaskQueueManager::DoWork(bool delayed) {
|
| DCHECK(main_thread_checker_.CalledOnValidThread());
|
| TRACE_EVENT1(tracing_category_, "TaskQueueManager::DoWork", "delayed",
|
|
|