| Index: third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl.cc
|
| diff --git a/third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl.cc b/third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl.cc
|
| index b3812dc5780262f6b79143108f71885aee99d4b6..fe50e03b54d6bc55ec9bcb622ef9c8ffad553500 100644
|
| --- a/third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl.cc
|
| +++ b/third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl.cc
|
| @@ -14,6 +14,7 @@
|
| #include "base/trace_event/trace_event.h"
|
| #include "base/trace_event/trace_event_argument.h"
|
| #include "cc/output/begin_frame_args.h"
|
| +#include "components/metrics/single_sample_metrics_factory_impl.h"
|
| #include "platform/RuntimeEnabledFeatures.h"
|
| #include "platform/scheduler/base/real_time_domain.h"
|
| #include "platform/scheduler/base/task_queue_impl.h"
|
| @@ -217,6 +218,7 @@ RendererSchedulerImpl::MainThreadOnly::MainThreadOnly(
|
| in_idle_period_for_testing(false),
|
| use_virtual_time(false),
|
| is_audio_playing(false),
|
| + has_navigated(false),
|
| rail_mode_observer(nullptr),
|
| wake_up_budget_pool(nullptr),
|
| task_duration_per_queue_type_histogram(base::Histogram::FactoryGet(
|
| @@ -1631,6 +1633,25 @@ void RendererSchedulerImpl::RemovePendingNavigation(NavigatingFrameType type) {
|
| }
|
| }
|
|
|
| +void RendererSchedulerImpl::OnCommitProvisionalLoad() {
|
| + // Initialize |max_queueing_time_histogram| as we need it so that
|
| + // |SingleSampleMetricsFactory::SetFactory()| is called before
|
| + // |SingleSampleMetricsFactory::Get()|
|
| + if (!GetMainThreadOnly().max_queueing_time_histogram) {
|
| + GetMainThreadOnly().max_queueing_time_histogram =
|
| + GetMaxQueueingTimeHistogram();
|
| + }
|
| + GetMainThreadOnly().max_queueing_time_histogram.reset();
|
| + GetMainThreadOnly().max_queueing_time = base::TimeDelta();
|
| + GetMainThreadOnly().has_navigated = true;
|
| +}
|
| +
|
| +std::unique_ptr<base::SingleSampleMetric>
|
| +RendererSchedulerImpl::GetMaxQueueingTimeHistogram() {
|
| + return base::SingleSampleMetricsFactory::Get()->CreateCustomCountsMetric(
|
| + "RendererScheduler.MaxQueueingTime", 1, 10000, 50);
|
| +}
|
| +
|
| void RendererSchedulerImpl::OnNavigationStarted() {
|
| TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"),
|
| "RendererSchedulerImpl::OnNavigationStarted");
|
| @@ -1904,6 +1925,17 @@ void RendererSchedulerImpl::RemoveTaskTimeObserver(
|
| void RendererSchedulerImpl::OnQueueingTimeForWindowEstimated(
|
| base::TimeDelta queueing_time,
|
| base::TimeTicks window_start_time) {
|
| + if (GetMainThreadOnly().has_navigated) {
|
| + if (GetMainThreadOnly().max_queueing_time < queueing_time) {
|
| + if (!GetMainThreadOnly().max_queueing_time_histogram) {
|
| + GetMainThreadOnly().max_queueing_time_histogram =
|
| + GetMaxQueueingTimeHistogram();
|
| + }
|
| + GetMainThreadOnly().max_queueing_time_histogram->SetSample(
|
| + GetMainThreadOnly().max_queueing_time.InMilliseconds());
|
| + GetMainThreadOnly().max_queueing_time = queueing_time;
|
| + }
|
| + }
|
| // RendererScheduler reports the queueing time once per window's duration.
|
| // |stepEQT|stepEQT|stepEQT|stepEQT|stepEQT|stepEQT|
|
| // Report: |-------window EQT------|
|
|
|