| Index: third_party/WebKit/Source/platform/scheduler/child/worker_scheduler_impl.cc
|
| diff --git a/third_party/WebKit/Source/platform/scheduler/child/worker_scheduler_impl.cc b/third_party/WebKit/Source/platform/scheduler/child/worker_scheduler_impl.cc
|
| index a93dca0474ba97202e2b12c32a923b9577e2c5fa..2164f4fda6d9ff79b26491298db7339f77e24c81 100644
|
| --- a/third_party/WebKit/Source/platform/scheduler/child/worker_scheduler_impl.cc
|
| +++ b/third_party/WebKit/Source/platform/scheduler/child/worker_scheduler_impl.cc
|
| @@ -8,8 +8,10 @@
|
| #include "base/metrics/histogram_macros.h"
|
| #include "base/trace_event/trace_event.h"
|
| #include "base/trace_event/trace_event_argument.h"
|
| +#include "platform/Histogram.h"
|
| #include "platform/scheduler/base/time_converter.h"
|
| #include "platform/scheduler/child/scheduler_tqm_delegate.h"
|
| +#include "platform/wtf/PtrUtil.h"
|
| #include "public/platform/scheduler/base/task_queue.h"
|
|
|
| namespace blink {
|
| @@ -36,27 +38,28 @@ void ReportWorkerTaskLoad(base::TimeTicks time, double load) {
|
|
|
| WorkerSchedulerImpl::WorkerSchedulerImpl(
|
| scoped_refptr<SchedulerTqmDelegate> main_task_runner)
|
| - : helper_(main_task_runner,
|
| - "worker.scheduler",
|
| - TRACE_DISABLED_BY_DEFAULT("worker.scheduler"),
|
| - TRACE_DISABLED_BY_DEFAULT("worker.scheduler.debug")),
|
| - idle_helper_(&helper_,
|
| + : WorkerScheduler(WTF::MakeUnique<SchedulerHelper>(
|
| + main_task_runner,
|
| + "worker.scheduler",
|
| + TRACE_DISABLED_BY_DEFAULT("worker.scheduler"),
|
| + TRACE_DISABLED_BY_DEFAULT("worker.scheduler.debug"))),
|
| + idle_helper_(helper_.get(),
|
| this,
|
| "worker.scheduler",
|
| TRACE_DISABLED_BY_DEFAULT("worker.scheduler"),
|
| "WorkerSchedulerIdlePeriod",
|
| base::TimeDelta::FromMilliseconds(300)),
|
| idle_canceled_delayed_task_sweeper_("worker.scheduler",
|
| - &helper_,
|
| + helper_.get(),
|
| idle_helper_.IdleTaskRunner()),
|
| - load_tracker_(helper_.scheduler_tqm_delegate()->NowTicks(),
|
| + load_tracker_(helper_->scheduler_tqm_delegate()->NowTicks(),
|
| base::Bind(&ReportWorkerTaskLoad),
|
| kWorkerThreadLoadTrackerReportingInterval,
|
| kWorkerThreadLoadTrackerWaitingPeriodBeforeReporting) {
|
| initialized_ = false;
|
| - thread_start_time_ = helper_.scheduler_tqm_delegate()->NowTicks();
|
| + thread_start_time_ = helper_->scheduler_tqm_delegate()->NowTicks();
|
| load_tracker_.Resume(thread_start_time_);
|
| - helper_.AddTaskTimeObserver(this);
|
| + helper_->AddTaskTimeObserver(this);
|
| TRACE_EVENT_OBJECT_CREATED_WITH_ID(
|
| TRACE_DISABLED_BY_DEFAULT("worker.scheduler"), "WorkerScheduler", this);
|
| }
|
| @@ -64,7 +67,7 @@ WorkerSchedulerImpl::WorkerSchedulerImpl(
|
| WorkerSchedulerImpl::~WorkerSchedulerImpl() {
|
| TRACE_EVENT_OBJECT_DELETED_WITH_ID(
|
| TRACE_DISABLED_BY_DEFAULT("worker.scheduler"), "WorkerScheduler", this);
|
| - helper_.RemoveTaskTimeObserver(this);
|
| + helper_->RemoveTaskTimeObserver(this);
|
| }
|
|
|
| void WorkerSchedulerImpl::Init() {
|
| @@ -74,7 +77,7 @@ void WorkerSchedulerImpl::Init() {
|
|
|
| scoped_refptr<TaskQueue> WorkerSchedulerImpl::DefaultTaskRunner() {
|
| DCHECK(initialized_);
|
| - return helper_.DefaultTaskRunner();
|
| + return helper_->DefaultTaskRunner();
|
| }
|
|
|
| scoped_refptr<SingleThreadIdleTaskRunner>
|
| @@ -96,19 +99,19 @@ bool WorkerSchedulerImpl::ShouldYieldForHighPriorityWork() {
|
| void WorkerSchedulerImpl::AddTaskObserver(
|
| base::MessageLoop::TaskObserver* task_observer) {
|
| DCHECK(initialized_);
|
| - helper_.AddTaskObserver(task_observer);
|
| + helper_->AddTaskObserver(task_observer);
|
| }
|
|
|
| void WorkerSchedulerImpl::RemoveTaskObserver(
|
| base::MessageLoop::TaskObserver* task_observer) {
|
| DCHECK(initialized_);
|
| - helper_.RemoveTaskObserver(task_observer);
|
| + helper_->RemoveTaskObserver(task_observer);
|
| }
|
|
|
| void WorkerSchedulerImpl::Shutdown() {
|
| DCHECK(initialized_);
|
| - load_tracker_.RecordIdle(helper_.scheduler_tqm_delegate()->NowTicks());
|
| - base::TimeTicks end_time = helper_.scheduler_tqm_delegate()->NowTicks();
|
| + load_tracker_.RecordIdle(helper_->scheduler_tqm_delegate()->NowTicks());
|
| + base::TimeTicks end_time = helper_->scheduler_tqm_delegate()->NowTicks();
|
| base::TimeDelta delta = end_time - thread_start_time_;
|
|
|
| // The lifetime could be radically different for different workers,
|
| @@ -117,11 +120,11 @@ void WorkerSchedulerImpl::Shutdown() {
|
| UMA_HISTOGRAM_CUSTOM_TIMES(
|
| "WorkerThread.Runtime", delta, base::TimeDelta::FromSeconds(1),
|
| base::TimeDelta::FromDays(1), 50 /* bucket count */);
|
| - helper_.Shutdown();
|
| + helper_->Shutdown();
|
| }
|
|
|
| SchedulerHelper* WorkerSchedulerImpl::GetSchedulerHelperForTesting() {
|
| - return &helper_;
|
| + return helper_.get();
|
| }
|
|
|
| bool WorkerSchedulerImpl::CanEnterLongIdlePeriod(base::TimeTicks,
|
| @@ -139,6 +142,12 @@ void WorkerSchedulerImpl::WillProcessTask(TaskQueue* task_queue,
|
| void WorkerSchedulerImpl::DidProcessTask(TaskQueue* task_queue,
|
| double start_time,
|
| double end_time) {
|
| + DEFINE_THREAD_SAFE_STATIC_LOCAL(
|
| + CustomCountHistogram, task_time_counter,
|
| + new CustomCountHistogram("WorkerThread.Task.Time", 0, 10000000, 50));
|
| + task_time_counter.Count((end_time - start_time) *
|
| + base::Time::kMicrosecondsPerSecond);
|
| +
|
| base::TimeTicks start_time_ticks =
|
| MonotonicTimeInSecondsToTimeTicks(start_time);
|
| base::TimeTicks end_time_ticks = MonotonicTimeInSecondsToTimeTicks(end_time);
|
|
|