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

Unified 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: RenderSchedulerImpl owns all the things. Created 4 years, 5 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 side-by-side diff with in-line comments
Download patch
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 c02624efe41caf4f0b62d006dc0eeb7f3611df19..901c7c8f143241f46d1132a516b76b3ac91b56fe 100644
--- a/components/scheduler/renderer/renderer_scheduler_impl.cc
+++ b/components/scheduler/renderer/renderer_scheduler_impl.cc
@@ -8,6 +8,7 @@
#include "base/debug/stack_trace.h"
#include "base/logging.h"
#include "base/memory/ptr_util.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"
@@ -22,7 +23,7 @@ namespace scheduler {
namespace {
// The run time of loading tasks is strongly bimodal. The vast majority are
// very cheap, but there are usually a handful of very expensive tasks (e.g ~1
-// second on a mobile device) so we take a very pesimistic view when estimating
+// second on a mobile device) so we take a very pessimistic view when estimating
// the cost of loading tasks.
const int kLoadingTaskEstimationSampleCount = 1000;
const double kLoadingTaskEstimationPercentile = 99;
@@ -47,16 +48,17 @@ RendererSchedulerImpl::RendererSchedulerImpl(
TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"),
"RendererSchedulerIdlePeriod",
base::TimeDelta()),
+ task_time_tracker_(this),
render_widget_scheduler_signals_(this),
control_task_runner_(helper_.ControlTaskRunner()),
- compositor_task_runner_(
- helper_.NewTaskQueue(TaskQueue::Spec("compositor_tq")
- .SetShouldMonitorQuiescence(true))),
+ compositor_task_runner_(helper_.NewTaskQueue(
+ TaskQueue::Spec("compositor_tq").SetShouldMonitorQuiescence(true))),
delayed_update_policy_runner_(
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()),
policy_may_need_update_(&any_thread_lock_),
weak_factory_(this) {
@@ -78,6 +80,7 @@ RendererSchedulerImpl::RendererSchedulerImpl(
this);
helper_.SetObserver(this);
+ helper_.SetTaskTimeTracker(&task_time_tracker_);
}
RendererSchedulerImpl::~RendererSchedulerImpl() {
@@ -101,6 +104,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,
@@ -109,6 +113,8 @@ RendererSchedulerImpl::MainThreadOnly::MainThreadOnly(
timer_task_cost_estimator(time_source,
kTimerTaskEstimationSampleCount,
kTimerTaskEstimationPercentile),
+ queueing_time_estimator(renderer_scheduler_impl,
+ base::TimeDelta::FromSeconds(1)),
idle_time_estimator(compositor_task_runner,
time_source,
kShortIdlePeriodDurationSampleCount,
@@ -1383,6 +1389,21 @@ void RendererSchedulerImpl::OnTriedToExecuteBlockedTask(
}
}
+void RendererSchedulerImpl::ReportTaskTime(base::TimeTicks start_time,
+ base::TimeTicks end_time) {
+ MainThreadOnly().queueing_time_estimator.OnToplevelTaskCompleted(start_time,
+ end_time);
+}
+
+void RendererSchedulerImpl::OnQueueingTimeForWindowEstimated(
+ base::TimeDelta queueing_time) {
+ UMA_HISTOGRAM_TIMES("RendererScheduler.ExpectedTaskQueueingDuration",
+ queueing_time);
+ TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"),
+ "estimated_queueing_time_for_window",
+ queueing_time.InMillisecondsF());
+}
+
// static
const char* RendererSchedulerImpl::UseCaseToString(UseCase use_case) {
switch (use_case) {

Powered by Google App Engine
This is Rietveld 408576698