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 0ebf0ab05dbc9b287384c6ef5b41bd3683e7e720..dabe30ae8cf37d2be9070c136f7b2f5474a2a99f 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 |
@@ -247,9 +247,20 @@ void TaskQueueManager::DoWork(base::TimeTicks run_time, bool from_main_thread) { |
// when we are in DoWork (but WorkQueue may be deleted). |
internal::TaskQueueImpl* task_queue = work_queue->task_queue(); |
+ if (!delegate_->IsNested()) { |
+ for (auto& observer : task_time_observers_) |
+ observer.ReportTaskStartTime(MonotonicTimeInSeconds(task_start_time)); |
+ } |
+ |
switch (ProcessTaskFromWorkQueue(work_queue)) { |
case ProcessTaskResult::DEFERRED: |
+ // TODO - test this case. |
// If a task was deferred, try again with another task. |
+ for (auto& observer : task_time_observers_) { |
+ observer.ReportTaskEndTime(task_queue, |
+ MonotonicTimeInSeconds(task_start_time), |
+ MonotonicTimeInSeconds(task_start_time)); |
+ } |
continue; |
case ProcessTaskResult::EXECUTED: |
break; |
@@ -262,9 +273,9 @@ void TaskQueueManager::DoWork(base::TimeTicks run_time, bool from_main_thread) { |
// Only report top level task durations. |
base::TimeTicks task_end_time = lazy_now.Now(); |
for (auto& observer : task_time_observers_) { |
- observer.ReportTaskTime(task_queue, |
- MonotonicTimeInSeconds(task_start_time), |
- MonotonicTimeInSeconds(task_end_time)); |
+ observer.ReportTaskEndTime(task_queue, |
+ MonotonicTimeInSeconds(task_start_time), |
+ MonotonicTimeInSeconds(task_end_time)); |
} |
task_start_time = task_end_time; |
} |