| 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 31adb7257af790faa8ed72b0ed0487afd98a3768..b945da63b78e027c5284e1f8ff18011582cd8be9 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
|
| @@ -34,6 +34,11 @@ void RecordImmediateTaskQueueingDuration(tracked_objects::Duration duration) {
|
| "RendererScheduler.TaskQueueManager.ImmediateTaskQueueingDuration",
|
| base::TimeDelta::FromMilliseconds(duration.InMilliseconds()));
|
| }
|
| +
|
| +double MonotonicTimeInSeconds(base::TimeTicks timeTicks) {
|
| + return (timeTicks.ToInternalValue() / static_cast<double>(
|
| + base::Time::kMicrosecondsPerSecond));
|
| +}
|
| }
|
|
|
| TaskQueueManager::TaskQueueManager(
|
| @@ -47,6 +52,7 @@ TaskQueueManager::TaskQueueManager(
|
| work_batch_size_(1),
|
| task_count_(0),
|
| task_time_tracker_(nullptr),
|
| + task_time_observer_(nullptr),
|
| tracing_category_(tracing_category),
|
| disabled_by_default_tracing_category_(
|
| disabled_by_default_tracing_category),
|
| @@ -215,7 +221,14 @@ void TaskQueueManager::DoWork(base::TimeTicks run_time, bool from_main_thread) {
|
| bool should_trigger_wakeup = work_queue->task_queue()->wakeup_policy() ==
|
| TaskQueue::WakeupPolicy::CAN_WAKE_OTHER_QUEUES;
|
|
|
| - switch (ProcessTaskFromWorkQueue(work_queue, &previous_task)) {
|
| + if (!delegate_->IsNested() && task_time_observer_)
|
| + task_time_observer_->willProcessTask();
|
| + TaskQueueManager::ProcessTaskResult result = ProcessTaskFromWorkQueue(
|
| + work_queue, &previous_task);
|
| + if (!delegate_->IsNested() && task_time_observer_)
|
| + task_time_observer_->didProcessTask();
|
| +
|
| + switch (result) {
|
| case ProcessTaskResult::DEFERRED:
|
| // If a task was deferred, try again with another task. Note that this
|
| // means deferred tasks (i.e. non-nestable tasks) will never trigger
|
| @@ -232,6 +245,10 @@ 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();
|
| task_time_tracker_->ReportTaskTime(task_start_time, task_end_time);
|
| + if (task_time_observer_)
|
| + task_time_observer_->reportTaskTime(
|
| + MonotonicTimeInSeconds(task_start_time),
|
| + MonotonicTimeInSeconds(task_end_time));
|
| task_start_time = task_end_time;
|
| }
|
|
|
|
|