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); |