Chromium Code Reviews| 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..ca32dd893eefe3c966d0a01ca7e45ccb447c4588 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,9 +14,9 @@ |
| #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" |
| +#include "public/platform/scheduler/base/task_time_tracker.h" |
| namespace blink { |
| namespace scheduler { |
| @@ -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() / |
|
alph
2016/08/22 23:51:07
nit: (timeTicks - base::TimeTicks()).InSecondsF()
panicker
2016/08/25 23:11:52
Done.
|
| + static_cast<double>(base::Time::kMicrosecondsPerSecond)); |
| +} |
| } |
| TaskQueueManager::TaskQueueManager( |
| @@ -46,7 +51,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 +201,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_trackers_.might_have_observers()) |
| task_start_time = lazy_now.Now(); |
| // Pass false and nullptr to UpdateWorkQueues here to prevent waking up a |
| @@ -228,10 +232,12 @@ 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_trackers_.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(TaskTimeTracker, task_time_trackers_, |
| + ReportTaskTime(MonotonicTimeInSeconds(task_start_time), |
| + MonotonicTimeInSeconds(task_end_time))); |
| task_start_time = task_end_time; |
|
alph
2016/08/22 23:51:07
Looks like the first time the observer will get a
panickercorp
2016/08/23 17:43:31
There can be an issue if there are 0 observers at
panicker
2016/08/25 23:11:52
I'm leaving this as is, as this is not worse than
Sami
2016/08/26 11:03:56
Sorry, I missed this question earlier. I think it
|
| } |
| @@ -374,6 +380,17 @@ void TaskQueueManager::RemoveTaskObserver( |
| task_observers_.RemoveObserver(task_observer); |
| } |
| +void TaskQueueManager::AddTaskTimeTracker(TaskTimeTracker* task_time_tracker) { |
| + DCHECK(main_thread_checker_.CalledOnValidThread()); |
| + task_time_trackers_.AddObserver(task_time_tracker); |
| +} |
| + |
| +void TaskQueueManager::RemoveTaskTimeTracker( |
| + TaskTimeTracker* task_time_tracker) { |
| + DCHECK(main_thread_checker_.CalledOnValidThread()); |
| + task_time_trackers_.RemoveObserver(task_time_tracker); |
| +} |
| + |
| bool TaskQueueManager::GetAndClearSystemIsQuiescentBit() { |
| bool task_was_run = task_was_run_on_quiescence_monitored_queue_; |
| task_was_run_on_quiescence_monitored_queue_ = false; |