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..b5d865364adc73b21f87ca7258406652236b8ad5 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 |
@@ -14,7 +14,6 @@ |
#include "platform/scheduler/base/task_queue_impl.h" |
#include "platform/scheduler/base/task_queue_manager_delegate.h" |
#include "platform/scheduler/base/task_queue_selector.h" |
-#include "platform/scheduler/base/task_time_tracker.h" |
#include "platform/scheduler/base/work_queue.h" |
#include "platform/scheduler/base/work_queue_sets.h" |
@@ -34,6 +33,11 @@ void RecordImmediateTaskQueueingDuration(tracked_objects::Duration duration) { |
"RendererScheduler.TaskQueueManager.ImmediateTaskQueueingDuration", |
base::TimeDelta::FromMilliseconds(duration.InMilliseconds())); |
} |
+ |
+double MonotonicTimeInSeconds(base::TimeTicks timeTicks) { |
caseq
2016/08/22 18:48:49
WTF::monotonicallyIncreasingTime()?
panicker
2016/08/22 23:14:14
I'm trying to convert the provided timeTicks, not
|
+ return (timeTicks.ToInternalValue() / static_cast<double>( |
+ base::Time::kMicrosecondsPerSecond)); |
+} |
} |
TaskQueueManager::TaskQueueManager( |
@@ -46,7 +50,6 @@ TaskQueueManager::TaskQueueManager( |
task_was_run_on_quiescence_monitored_queue_(false), |
work_batch_size_(1), |
task_count_(0), |
- task_time_tracker_(nullptr), |
tracing_category_(tracing_category), |
disabled_by_default_tracing_category_( |
disabled_by_default_tracing_category), |
@@ -197,7 +200,7 @@ void TaskQueueManager::DoWork(base::TimeTicks run_time, bool from_main_thread) { |
LazyNow lazy_now(real_time_domain()->CreateLazyNow()); |
base::TimeTicks task_start_time; |
- if (!delegate_->IsNested() && task_time_tracker_) |
+ if (!delegate_->IsNested() && task_time_observers_.might_have_observers() > 0) |
task_start_time = lazy_now.Now(); |
// Pass false and nullptr to UpdateWorkQueues here to prevent waking up a |
@@ -215,7 +218,19 @@ 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()) { |
+ FOR_EACH_OBSERVER(WebThread::TaskTimeObserver, task_time_observers_, |
Sami
2016/08/22 15:51:30
(Indentation looks a little off -- git cl format s
panicker
2016/08/22 23:14:14
Done.
|
+ willProcessTask()); |
+ } |
+ TaskQueueManager::ProcessTaskResult result = ProcessTaskFromWorkQueue( |
+ work_queue, &previous_task); |
+ if (!delegate_->IsNested()) { |
+ FOR_EACH_OBSERVER(WebThread::TaskTimeObserver, task_time_observers_, |
caseq
2016/08/22 18:48:49
Have you considered moving this into ProcessTaskFr
panicker
2016/08/22 23:14:14
Addressed in new patch.
Sami had the same comment
|
+ 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 |
@@ -228,10 +243,13 @@ void TaskQueueManager::DoWork(base::TimeTicks run_time, bool from_main_thread) { |
} |
lazy_now = real_time_domain()->CreateLazyNow(); |
- if (!delegate_->IsNested() && task_time_tracker_) { |
+ if (!delegate_->IsNested() && task_time_observers_.might_have_observers()) { |
// Only report top level task durations. |
base::TimeTicks task_end_time = lazy_now.Now(); |
- task_time_tracker_->ReportTaskTime(task_start_time, task_end_time); |
+ FOR_EACH_OBSERVER( |
+ WebThread::TaskTimeObserver, task_time_observers_, reportTaskTime( |
+ MonotonicTimeInSeconds(task_start_time), |
+ MonotonicTimeInSeconds(task_end_time))); |
task_start_time = task_end_time; |
} |
@@ -374,6 +392,18 @@ void TaskQueueManager::RemoveTaskObserver( |
task_observers_.RemoveObserver(task_observer); |
} |
+void TaskQueueManager::AddTaskTimeObserver( |
+ WebThread::TaskTimeObserver* task_time_observer) { |
+ DCHECK(main_thread_checker_.CalledOnValidThread()); |
+ task_time_observers_.AddObserver(task_time_observer); |
alph
2016/08/22 22:21:27
nit: You could also add it into task_observers_, s
panicker
2016/08/22 23:14:14
yep - done in new patch.
|
+} |
+ |
+void TaskQueueManager::RemoveTaskTimeObserver( |
+ WebThread::TaskTimeObserver* task_time_observer) { |
+ DCHECK(main_thread_checker_.CalledOnValidThread()); |
+ task_time_observers_.RemoveObserver(task_time_observer); |
+} |
+ |
bool TaskQueueManager::GetAndClearSystemIsQuiescentBit() { |
bool task_was_run = task_was_run_on_quiescence_monitored_queue_; |
task_was_run_on_quiescence_monitored_queue_ = false; |