Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(647)

Side by Side Diff: components/scheduler/renderer/renderer_scheduler_impl.cc

Issue 1898233002: Report expected task queueing time via UMA (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/scheduler/renderer/renderer_scheduler_impl.h" 5 #include "components/scheduler/renderer/renderer_scheduler_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/debug/stack_trace.h" 8 #include "base/debug/stack_trace.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/metrics/histogram_macros.h"
10 #include "base/trace_event/trace_event.h" 11 #include "base/trace_event/trace_event.h"
11 #include "base/trace_event/trace_event_argument.h" 12 #include "base/trace_event/trace_event_argument.h"
12 #include "cc/output/begin_frame_args.h" 13 #include "cc/output/begin_frame_args.h"
13 #include "components/scheduler/base/task_queue_impl.h" 14 #include "components/scheduler/base/task_queue_impl.h"
14 #include "components/scheduler/base/task_queue_selector.h" 15 #include "components/scheduler/base/task_queue_selector.h"
15 #include "components/scheduler/base/virtual_time_domain.h" 16 #include "components/scheduler/base/virtual_time_domain.h"
16 #include "components/scheduler/child/scheduler_tqm_delegate.h" 17 #include "components/scheduler/child/scheduler_tqm_delegate.h"
17 #include "components/scheduler/renderer/web_view_scheduler_impl.h" 18 #include "components/scheduler/renderer/web_view_scheduler_impl.h"
18 #include "components/scheduler/renderer/webthread_impl_for_renderer_scheduler.h" 19 #include "components/scheduler/renderer/webthread_impl_for_renderer_scheduler.h"
19 20
(...skipping 18 matching lines...) Expand all
38 TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), 39 TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"),
39 TRACE_DISABLED_BY_DEFAULT("renderer.scheduler.debug")), 40 TRACE_DISABLED_BY_DEFAULT("renderer.scheduler.debug")),
40 idle_helper_(&helper_, 41 idle_helper_(&helper_,
41 this, 42 this,
42 "renderer.scheduler", 43 "renderer.scheduler",
43 TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), 44 TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"),
44 "RendererSchedulerIdlePeriod", 45 "RendererSchedulerIdlePeriod",
45 base::TimeDelta()), 46 base::TimeDelta()),
46 render_widget_scheduler_signals_(this), 47 render_widget_scheduler_signals_(this),
47 control_task_runner_(helper_.ControlTaskRunner()), 48 control_task_runner_(helper_.ControlTaskRunner()),
48 compositor_task_runner_( 49 compositor_task_runner_(helper_.NewTaskQueue(
49 helper_.NewTaskQueue(TaskQueue::Spec("compositor_tq") 50 TaskQueue::Spec("compositor_tq").SetShouldMonitorQuiescence(true))),
50 .SetShouldMonitorQuiescence(true))),
51 delayed_update_policy_runner_( 51 delayed_update_policy_runner_(
52 base::Bind(&RendererSchedulerImpl::UpdatePolicy, 52 base::Bind(&RendererSchedulerImpl::UpdatePolicy,
53 base::Unretained(this)), 53 base::Unretained(this)),
54 helper_.ControlTaskRunner()), 54 helper_.ControlTaskRunner()),
55 main_thread_only_(compositor_task_runner_, 55 main_thread_only_(this,
56 compositor_task_runner_,
56 helper_.scheduler_tqm_delegate().get()), 57 helper_.scheduler_tqm_delegate().get()),
57 policy_may_need_update_(&any_thread_lock_), 58 policy_may_need_update_(&any_thread_lock_),
58 weak_factory_(this) { 59 weak_factory_(this) {
59 throttling_helper_.reset(new ThrottlingHelper(this, "renderer.scheduler")); 60 throttling_helper_.reset(new ThrottlingHelper(this, "renderer.scheduler"));
60 update_policy_closure_ = base::Bind(&RendererSchedulerImpl::UpdatePolicy, 61 update_policy_closure_ = base::Bind(&RendererSchedulerImpl::UpdatePolicy,
61 weak_factory_.GetWeakPtr()); 62 weak_factory_.GetWeakPtr());
62 end_renderer_hidden_idle_period_closure_.Reset(base::Bind( 63 end_renderer_hidden_idle_period_closure_.Reset(base::Bind(
63 &RendererSchedulerImpl::EndIdlePeriod, weak_factory_.GetWeakPtr())); 64 &RendererSchedulerImpl::EndIdlePeriod, weak_factory_.GetWeakPtr()));
64 65
65 suspend_timers_when_backgrounded_closure_.Reset( 66 suspend_timers_when_backgrounded_closure_.Reset(
66 base::Bind(&RendererSchedulerImpl::SuspendTimerQueueWhenBackgrounded, 67 base::Bind(&RendererSchedulerImpl::SuspendTimerQueueWhenBackgrounded,
67 weak_factory_.GetWeakPtr())); 68 weak_factory_.GetWeakPtr()));
68 69
69 default_loading_task_runner_ = NewLoadingTaskRunner("default_loading_tq"); 70 default_loading_task_runner_ = NewLoadingTaskRunner("default_loading_tq");
70 default_timer_task_runner_ = NewTimerTaskRunner("default_timer_tq"); 71 default_timer_task_runner_ = NewTimerTaskRunner("default_timer_tq");
71 72
72 TRACE_EVENT_OBJECT_CREATED_WITH_ID( 73 TRACE_EVENT_OBJECT_CREATED_WITH_ID(
73 TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), "RendererScheduler", 74 TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), "RendererScheduler",
74 this); 75 this);
75 76
76 helper_.SetObserver(this); 77 helper_.SetObserver(this);
78 AddTaskObserver(&MainThreadOnly().queueing_time_estimator);
Sami 2016/04/20 09:51:27 Please also remove this in the destructor.
tdresser 2016/04/20 15:13:33 Whoops, thanks!
77 } 79 }
78 80
79 RendererSchedulerImpl::~RendererSchedulerImpl() { 81 RendererSchedulerImpl::~RendererSchedulerImpl() {
80 TRACE_EVENT_OBJECT_DELETED_WITH_ID( 82 TRACE_EVENT_OBJECT_DELETED_WITH_ID(
81 TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), "RendererScheduler", 83 TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), "RendererScheduler",
82 this); 84 this);
83 85
84 for (const scoped_refptr<TaskQueue>& loading_queue : loading_task_runners_) { 86 for (const scoped_refptr<TaskQueue>& loading_queue : loading_task_runners_) {
85 loading_queue->RemoveTaskObserver( 87 loading_queue->RemoveTaskObserver(
86 &MainThreadOnly().loading_task_cost_estimator); 88 &MainThreadOnly().loading_task_cost_estimator);
87 } 89 }
88 for (const scoped_refptr<TaskQueue>& timer_queue : timer_task_runners_) { 90 for (const scoped_refptr<TaskQueue>& timer_queue : timer_task_runners_) {
89 timer_queue->RemoveTaskObserver( 91 timer_queue->RemoveTaskObserver(
90 &MainThreadOnly().timer_task_cost_estimator); 92 &MainThreadOnly().timer_task_cost_estimator);
91 } 93 }
92 94
93 // Ensure the renderer scheduler was shut down explicitly, because otherwise 95 // Ensure the renderer scheduler was shut down explicitly, because otherwise
94 // we could end up having stale pointers to the Blink heap which has been 96 // we could end up having stale pointers to the Blink heap which has been
95 // terminated by this point. 97 // terminated by this point.
96 DCHECK(MainThreadOnly().was_shutdown); 98 DCHECK(MainThreadOnly().was_shutdown);
97 } 99 }
98 100
99 RendererSchedulerImpl::MainThreadOnly::MainThreadOnly( 101 RendererSchedulerImpl::MainThreadOnly::MainThreadOnly(
102 RendererSchedulerImpl* renderer_scheduler_impl,
100 const scoped_refptr<TaskQueue>& compositor_task_runner, 103 const scoped_refptr<TaskQueue>& compositor_task_runner,
101 base::TickClock* time_source) 104 base::TickClock* time_source)
102 : loading_task_cost_estimator(time_source, 105 : loading_task_cost_estimator(time_source,
103 kLoadingTaskEstimationSampleCount, 106 kLoadingTaskEstimationSampleCount,
104 kLoadingTaskEstimationPercentile), 107 kLoadingTaskEstimationPercentile),
105 timer_task_cost_estimator(time_source, 108 timer_task_cost_estimator(time_source,
106 kTimerTaskEstimationSampleCount, 109 kTimerTaskEstimationSampleCount,
107 kTimerTaskEstimationPercentile), 110 kTimerTaskEstimationPercentile),
108 idle_time_estimator(compositor_task_runner, 111 idle_time_estimator(compositor_task_runner,
109 time_source, 112 time_source,
110 kShortIdlePeriodDurationSampleCount, 113 kShortIdlePeriodDurationSampleCount,
111 kShortIdlePeriodDurationPercentile), 114 kShortIdlePeriodDurationPercentile),
115 queueing_time_estimator(renderer_scheduler_impl,
116 time_source,
117 base::TimeDelta::FromSeconds(5)),
112 current_use_case(UseCase::NONE), 118 current_use_case(UseCase::NONE),
113 timer_queue_suspend_count(0), 119 timer_queue_suspend_count(0),
114 navigation_task_expected_count(0), 120 navigation_task_expected_count(0),
115 expensive_task_policy(ExpensiveTaskPolicy::RUN), 121 expensive_task_policy(ExpensiveTaskPolicy::RUN),
116 renderer_hidden(false), 122 renderer_hidden(false),
117 renderer_backgrounded(false), 123 renderer_backgrounded(false),
118 timer_queue_suspension_when_backgrounded_enabled(false), 124 timer_queue_suspension_when_backgrounded_enabled(false),
119 timer_queue_suspended_when_backgrounded(false), 125 timer_queue_suspended_when_backgrounded(false),
120 was_shutdown(false), 126 was_shutdown(false),
121 loading_tasks_seem_expensive(false), 127 loading_tasks_seem_expensive(false),
(...skipping 1121 matching lines...) Expand 10 before | Expand all | Expand 10 after
1243 return; 1249 return;
1244 } 1250 }
1245 MainThreadOnly().have_reported_blocking_intervention_since_navigation = 1251 MainThreadOnly().have_reported_blocking_intervention_since_navigation =
1246 true; 1252 true;
1247 BroadcastConsoleWarning( 1253 BroadcastConsoleWarning(
1248 "Deferred long-running timer task(s) to improve scrolling smoothness. " 1254 "Deferred long-running timer task(s) to improve scrolling smoothness. "
1249 "See crbug.com/574343."); 1255 "See crbug.com/574343.");
1250 } 1256 }
1251 } 1257 }
1252 1258
1259 void RendererSchedulerImpl::OnQueueingTimeForWindowEstimated(
1260 base::TimeDelta queueing_time) {
1261 UMA_HISTOGRAM_TIMES("RendererScheduler.ExpectedTaskQueueingDuration",
Sami 2016/04/20 09:51:27 Would you mind adding a trace counter[1] for this
tdresser 2016/04/20 15:13:33 Done.
1262 queueing_time);
1263 }
1264
1253 } // namespace scheduler 1265 } // namespace scheduler
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698