Chromium Code Reviews| 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..377e68443fe2e6935d7ce1200c584c4015cd4a33 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 |
| @@ -217,6 +217,7 @@ RendererSchedulerImpl::MainThreadOnly::MainThreadOnly( |
| in_idle_period_for_testing(false), |
| use_virtual_time(false), |
| is_audio_playing(false), |
| + during_navigation(false), |
| rail_mode_observer(nullptr), |
| wake_up_budget_pool(nullptr), |
| task_duration_per_queue_type_histogram(base::Histogram::FactoryGet( |
| @@ -1635,6 +1636,7 @@ void RendererSchedulerImpl::OnNavigationStarted() { |
| TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), |
| "RendererSchedulerImpl::OnNavigationStarted"); |
| base::AutoLock lock(any_thread_lock_); |
| + GetMainThreadOnly().during_navigation = true; |
| ResetForNavigationLocked(); |
| } |
| @@ -1680,6 +1682,9 @@ void RendererSchedulerImpl::ResetForNavigationLocked() { |
| GetMainThreadOnly().have_seen_a_begin_main_frame = false; |
| GetMainThreadOnly().have_reported_blocking_intervention_since_navigation = |
| false; |
| + GetMainThreadOnly().max_queuing_time_histogram.reset(); |
| + GetMainThreadOnly().max_queuing_time = base::TimeDelta(); |
| + |
| for (WebViewSchedulerImpl* web_view_scheduler : |
| GetMainThreadOnly().web_view_schedulers) { |
| web_view_scheduler->OnNavigation(); |
| @@ -1904,6 +1909,18 @@ void RendererSchedulerImpl::RemoveTaskTimeObserver( |
| void RendererSchedulerImpl::OnQueueingTimeForWindowEstimated( |
| base::TimeDelta queueing_time, |
| base::TimeTicks window_start_time) { |
| + if (GetMainThreadOnly().during_navigation) { |
| + if (!GetMainThreadOnly().max_queuing_time_histogram) { |
|
tdresser
2017/05/23 14:57:51
Add a comment about why we're instantiating this h
Liquan (Max) Gu
2017/05/25 16:27:28
Done.
|
| + GetMainThreadOnly().max_queuing_time_histogram = |
| + base::SingleSampleMetricsFactory::Get()->CreateCustomCountsMetric( |
| + "RendererScheduler.MaxQueueingTime", 1, 10000, 50); |
| + } |
| + if (GetMainThreadOnly().max_queuing_time < queueing_time) { |
| + GetMainThreadOnly().max_queuing_time_histogram->SetSample( |
| + GetMainThreadOnly().max_queuing_time.InMilliseconds()); |
| + GetMainThreadOnly().max_queuing_time = queueing_time; |
| + } |
| + } |
| // RendererScheduler reports the queueing time once per window's duration. |
| // |stepEQT|stepEQT|stepEQT|stepEQT|stepEQT|stepEQT| |
| // Report: |-------window EQT------| |