Chromium Code Reviews| Index: components/scheduler/renderer/renderer_scheduler_impl.cc |
| diff --git a/components/scheduler/renderer/renderer_scheduler_impl.cc b/components/scheduler/renderer/renderer_scheduler_impl.cc |
| index 9936a69f9fa5b9489f626e9bc478d8b8048f80a0..c58fd1fa77bb6a3d6526585097bef2c463e15ba7 100644 |
| --- a/components/scheduler/renderer/renderer_scheduler_impl.cc |
| +++ b/components/scheduler/renderer/renderer_scheduler_impl.cc |
| @@ -8,6 +8,8 @@ |
| #include "base/debug/stack_trace.h" |
| #include "base/logging.h" |
| #include "base/memory/ptr_util.h" |
| +#include "base/message_loop/message_loop.h" |
| +#include "base/metrics/histogram_macros.h" |
| #include "base/trace_event/trace_event.h" |
| #include "base/trace_event/trace_event_argument.h" |
| #include "cc/output/begin_frame_args.h" |
| @@ -56,8 +58,10 @@ RendererSchedulerImpl::RendererSchedulerImpl( |
| base::Bind(&RendererSchedulerImpl::UpdatePolicy, |
| base::Unretained(this)), |
| helper_.ControlTaskRunner()), |
| - main_thread_only_(compositor_task_runner_, |
| + main_thread_only_(this, |
| + compositor_task_runner_, |
| helper_.scheduler_tqm_delegate().get()), |
| + coarse_duration_timer_observing_(false), |
| policy_may_need_update_(&any_thread_lock_), |
| weak_factory_(this) { |
| throttling_helper_.reset(new ThrottlingHelper(this, "renderer.scheduler")); |
| @@ -78,6 +82,7 @@ RendererSchedulerImpl::RendererSchedulerImpl( |
| this); |
| helper_.SetObserver(this); |
| + AddTaskObserver(&MainThreadOnly().queueing_time_estimator); |
| } |
| RendererSchedulerImpl::~RendererSchedulerImpl() { |
| @@ -93,6 +98,7 @@ RendererSchedulerImpl::~RendererSchedulerImpl() { |
| timer_queue->RemoveTaskObserver( |
| &MainThreadOnly().timer_task_cost_estimator); |
| } |
| + RemoveTaskObserver(&MainThreadOnly().queueing_time_estimator); |
| // Ensure the renderer scheduler was shut down explicitly, because otherwise |
| // we could end up having stale pointers to the Blink heap which has been |
| @@ -101,6 +107,7 @@ RendererSchedulerImpl::~RendererSchedulerImpl() { |
| } |
| RendererSchedulerImpl::MainThreadOnly::MainThreadOnly( |
| + RendererSchedulerImpl* renderer_scheduler_impl, |
| const scoped_refptr<TaskQueue>& compositor_task_runner, |
| base::TickClock* time_source) |
| : loading_task_cost_estimator(time_source, |
| @@ -113,6 +120,9 @@ RendererSchedulerImpl::MainThreadOnly::MainThreadOnly( |
| time_source, |
| kShortIdlePeriodDurationSampleCount, |
| kShortIdlePeriodDurationPercentile), |
| + queueing_time_estimator(renderer_scheduler_impl, |
| + renderer_scheduler_impl->coarse_duration_timer(), |
| + base::TimeDelta::FromSeconds(5)), |
| current_use_case(UseCase::NONE), |
| timer_queue_suspend_count(0), |
| navigation_task_expected_count(0), |
| @@ -444,6 +454,14 @@ bool RendererSchedulerImpl::ShouldPrioritizeInputEvent( |
| void RendererSchedulerImpl::DidHandleInputEventOnCompositorThread( |
| const blink::WebInputEvent& web_input_event, |
| InputEventState event_state) { |
| + |
| + // TODO - move this. |
| + if (coarse_duration_timer_observing_ == false) { |
| + coarse_duration_timer_observing_ = true; |
| + base::MessageLoop::current()->AddRecentTimeObserver( |
| + &coarse_duration_timer_); |
| + } |
|
tdresser
2016/05/30 19:07:46
^
|
| + |
| TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), |
| "RendererSchedulerImpl::DidHandleInputEventOnCompositorThread"); |
| if (!ShouldPrioritizeInputEvent(web_input_event)) |
| @@ -1330,4 +1348,14 @@ void RendererSchedulerImpl::OnTriedToExecuteBlockedTask( |
| } |
| } |
| +void RendererSchedulerImpl::OnQueueingTimeForWindowEstimated( |
| + base::TimeDelta queueing_time) { |
| + // TODO - UMA_HISTOGRAM_TIMES is probably wrong. |
| + UMA_HISTOGRAM_TIMES("RendererScheduler.ExpectedTaskQueueingDuration", |
| + queueing_time); |
| + TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), |
| + "estimated_queueing_time_for_window", |
| + queueing_time.InMillisecondsF()); |
| +} |
| + |
| } // namespace scheduler |