| 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 1c6836e0f515a7c9468c01749b35663884b8aa3d..7def64ac93093b72ead7c15b75b697fc0de71f4e 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
|
| @@ -233,6 +233,10 @@ void TaskQueueManager::DoWork(base::TimeTicks run_time, bool from_main_thread) {
|
| if (!SelectWorkQueueToService(&work_queue))
|
| break;
|
|
|
| + // TaskQueueManager guarantees that task queue will not be deleted
|
| + // when we are in DoWork (but WorkQueue may be deleted).
|
| + internal::TaskQueueImpl* task_queue = work_queue->task_queue();
|
| +
|
| switch (ProcessTaskFromWorkQueue(work_queue)) {
|
| case ProcessTaskResult::DEFERRED:
|
| // If a task was deferred, try again with another task.
|
| @@ -247,9 +251,10 @@ void TaskQueueManager::DoWork(base::TimeTicks run_time, bool from_main_thread) {
|
| if (!delegate_->IsNested() && task_start_time != base::TimeTicks()) {
|
| // Only report top level task durations.
|
| base::TimeTicks task_end_time = lazy_now.Now();
|
| - FOR_EACH_OBSERVER(TaskTimeObserver, task_time_observers_,
|
| - ReportTaskTime(MonotonicTimeInSeconds(task_start_time),
|
| - MonotonicTimeInSeconds(task_end_time)));
|
| + FOR_EACH_OBSERVER(
|
| + TaskTimeObserver, task_time_observers_,
|
| + ReportTaskTime(task_queue, MonotonicTimeInSeconds(task_start_time),
|
| + MonotonicTimeInSeconds(task_end_time)));
|
| task_start_time = task_end_time;
|
| }
|
|
|
|
|