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..313e28c3767a0cb54cc3e49b8ffc873ce17a7c8c 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_observer.h" |
namespace blink { |
namespace scheduler { |
@@ -34,6 +34,10 @@ void RecordImmediateTaskQueueingDuration(tracked_objects::Duration duration) { |
"RendererScheduler.TaskQueueManager.ImmediateTaskQueueingDuration", |
base::TimeDelta::FromMilliseconds(duration.InMilliseconds())); |
} |
+ |
+double MonotonicTimeInSeconds(base::TimeTicks timeTicks) { |
+ return (timeTicks - base::TimeTicks()).InSecondsF(); |
+} |
} |
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), |
@@ -195,9 +198,9 @@ void TaskQueueManager::DoWork(base::TimeTicks run_time, bool from_main_thread) { |
queues_to_delete_.clear(); |
LazyNow lazy_now(real_time_domain()->CreateLazyNow()); |
- base::TimeTicks task_start_time; |
+ base::TimeTicks task_start_time = base::TimeTicks(); |
alph
2016/08/26 18:24:17
nit: revert this.
panicker
2016/08/26 18:27:57
Can you clarify why this should be removed?
I thin
alph
2016/08/26 18:35:11
The original line does also make it call a default
panicker
2016/08/26 19:11:39
Done.
|
- if (!delegate_->IsNested() && task_time_tracker_) |
+ if (!delegate_->IsNested() && task_time_observers_.might_have_observers()) |
task_start_time = lazy_now.Now(); |
// Pass false and nullptr to UpdateWorkQueues here to prevent waking up a |
@@ -228,10 +231,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_start_time != base::TimeTicks()) { |
// 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(TaskTimeObserver, task_time_observers_, |
+ ReportTaskTime(MonotonicTimeInSeconds(task_start_time), |
+ MonotonicTimeInSeconds(task_end_time))); |
task_start_time = task_end_time; |
} |
@@ -374,6 +379,17 @@ void TaskQueueManager::RemoveTaskObserver( |
task_observers_.RemoveObserver(task_observer); |
} |
+void TaskQueueManager::AddTaskTimeObserver(TaskTimeObserver* task_time_observer) { |
+ DCHECK(main_thread_checker_.CalledOnValidThread()); |
+ task_time_observers_.AddObserver(task_time_observer); |
+} |
+ |
+void TaskQueueManager::RemoveTaskTimeObserver( |
+ 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; |