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

Side by Side Diff: third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl.cc

Issue 2890173002: EQT: Record the max queueing time from navigation start to navigation away (Closed)
Patch Set: DEPS adjust Created 3 years, 6 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 "platform/scheduler/renderer/renderer_scheduler_impl.h" 5 #include "platform/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/memory/ptr_util.h" 10 #include "base/memory/ptr_util.h"
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
213 touchstart_expected_soon(false), 213 touchstart_expected_soon(false),
214 have_seen_a_begin_main_frame(false), 214 have_seen_a_begin_main_frame(false),
215 have_reported_blocking_intervention_in_current_policy(false), 215 have_reported_blocking_intervention_in_current_policy(false),
216 have_reported_blocking_intervention_since_navigation(false), 216 have_reported_blocking_intervention_since_navigation(false),
217 has_visible_render_widget_with_touch_handler(false), 217 has_visible_render_widget_with_touch_handler(false),
218 begin_frame_not_expected_soon(false), 218 begin_frame_not_expected_soon(false),
219 in_idle_period_for_testing(false), 219 in_idle_period_for_testing(false),
220 use_virtual_time(false), 220 use_virtual_time(false),
221 is_audio_playing(false), 221 is_audio_playing(false),
222 virtual_time_paused(false), 222 virtual_time_paused(false),
223 has_navigated(false),
223 rail_mode_observer(nullptr), 224 rail_mode_observer(nullptr),
224 wake_up_budget_pool(nullptr), 225 wake_up_budget_pool(nullptr),
225 task_duration_reporter("RendererScheduler.TaskDurationPerQueueType2"), 226 task_duration_reporter("RendererScheduler.TaskDurationPerQueueType2"),
226 foreground_task_duration_reporter( 227 foreground_task_duration_reporter(
227 "RendererScheduler.TaskDurationPerQueueType2.Foreground"), 228 "RendererScheduler.TaskDurationPerQueueType2.Foreground"),
228 background_task_duration_reporter( 229 background_task_duration_reporter(
229 "RendererScheduler.TaskDurationPerQueueType2.Background") { 230 "RendererScheduler.TaskDurationPerQueueType2.Background") {
230 foreground_main_thread_load_tracker.Resume(now); 231 foreground_main_thread_load_tracker.Resume(now);
231 } 232 }
232 233
(...skipping 1406 matching lines...) Expand 10 before | Expand all | Expand 10 after
1639 void RendererSchedulerImpl::RemovePendingNavigation(NavigatingFrameType type) { 1640 void RendererSchedulerImpl::RemovePendingNavigation(NavigatingFrameType type) {
1640 helper_.CheckOnValidThread(); 1641 helper_.CheckOnValidThread();
1641 DCHECK_GT(GetMainThreadOnly().navigation_task_expected_count, 0); 1642 DCHECK_GT(GetMainThreadOnly().navigation_task_expected_count, 0);
1642 if (type == NavigatingFrameType::kMainFrame && 1643 if (type == NavigatingFrameType::kMainFrame &&
1643 GetMainThreadOnly().navigation_task_expected_count > 0) { 1644 GetMainThreadOnly().navigation_task_expected_count > 0) {
1644 GetMainThreadOnly().navigation_task_expected_count--; 1645 GetMainThreadOnly().navigation_task_expected_count--;
1645 UpdatePolicy(); 1646 UpdatePolicy();
1646 } 1647 }
1647 } 1648 }
1648 1649
1650 void RendererSchedulerImpl::OnCommitProvisionalLoad() {
Charlie Reis 2017/06/02 22:38:36 nit: This should be after OnNavigationStarted (to
Liquan (Max) Gu 2017/06/02 23:32:06 Done.
1651 // Initialize |max_queueing_time_metric| lazily so that
1652 // |SingleSampleMetricsFactory::SetFactory()| is called before
1653 // |SingleSampleMetricsFactory::Get()|
1654 if (!GetMainThreadOnly().max_queueing_time_metric) {
1655 GetMainThreadOnly().max_queueing_time_metric =
1656 CreateMaxQueueingTimeMetric();
1657 }
1658 GetMainThreadOnly().max_queueing_time_metric.reset();
1659 GetMainThreadOnly().max_queueing_time = base::TimeDelta();
1660 GetMainThreadOnly().has_navigated = true;
1661 }
1662
1663 std::unique_ptr<base::SingleSampleMetric>
1664 RendererSchedulerImpl::CreateMaxQueueingTimeMetric() {
1665 return base::SingleSampleMetricsFactory::Get()->CreateCustomCountsMetric(
1666 "RendererScheduler.MaxQueueingTime", 1, 10000, 50);
1667 }
1668
1649 void RendererSchedulerImpl::OnNavigationStarted() { 1669 void RendererSchedulerImpl::OnNavigationStarted() {
1650 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), 1670 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"),
1651 "RendererSchedulerImpl::OnNavigationStarted"); 1671 "RendererSchedulerImpl::OnNavigationStarted");
1652 base::AutoLock lock(any_thread_lock_); 1672 base::AutoLock lock(any_thread_lock_);
1653 ResetForNavigationLocked(); 1673 ResetForNavigationLocked();
1654 } 1674 }
1655 1675
1656 void RendererSchedulerImpl::OnFirstMeaningfulPaint() { 1676 void RendererSchedulerImpl::OnFirstMeaningfulPaint() {
1657 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), 1677 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"),
1658 "RendererSchedulerImpl::OnFirstMeaningfulPaint"); 1678 "RendererSchedulerImpl::OnFirstMeaningfulPaint");
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after
1907 } 1927 }
1908 1928
1909 void RendererSchedulerImpl::RemoveTaskTimeObserver( 1929 void RendererSchedulerImpl::RemoveTaskTimeObserver(
1910 TaskTimeObserver* task_time_observer) { 1930 TaskTimeObserver* task_time_observer) {
1911 helper_.RemoveTaskTimeObserver(task_time_observer); 1931 helper_.RemoveTaskTimeObserver(task_time_observer);
1912 } 1932 }
1913 1933
1914 void RendererSchedulerImpl::OnQueueingTimeForWindowEstimated( 1934 void RendererSchedulerImpl::OnQueueingTimeForWindowEstimated(
1915 base::TimeDelta queueing_time, 1935 base::TimeDelta queueing_time,
1916 base::TimeTicks window_start_time) { 1936 base::TimeTicks window_start_time) {
1937 if (GetMainThreadOnly().has_navigated) {
1938 if (GetMainThreadOnly().max_queueing_time < queueing_time) {
1939 if (!GetMainThreadOnly().max_queueing_time_metric) {
1940 GetMainThreadOnly().max_queueing_time_metric =
1941 CreateMaxQueueingTimeMetric();
1942 }
1943 GetMainThreadOnly().max_queueing_time_metric->SetSample(
1944 queueing_time.InMilliseconds());
1945 GetMainThreadOnly().max_queueing_time = queueing_time;
1946 }
1947 }
1948
1917 // RendererScheduler reports the queueing time once per window's duration. 1949 // RendererScheduler reports the queueing time once per window's duration.
1918 // |stepEQT|stepEQT|stepEQT|stepEQT|stepEQT|stepEQT| 1950 // |stepEQT|stepEQT|stepEQT|stepEQT|stepEQT|stepEQT|
1919 // Report: |-------window EQT------| 1951 // Report: |-------window EQT------|
1920 // Discard: |-------window EQT------| 1952 // Discard: |-------window EQT------|
1921 // Discard: |-------window EQT------| 1953 // Discard: |-------window EQT------|
1922 // Report: |-------window EQT------| 1954 // Report: |-------window EQT------|
1923 if (window_start_time - 1955 if (window_start_time -
1924 GetMainThreadOnly().uma_last_queueing_time_report_window_start_time < 1956 GetMainThreadOnly().uma_last_queueing_time_report_window_start_time <
1925 kQueueingTimeWindowDuration) { 1957 kQueueingTimeWindowDuration) {
1926 return; 1958 return;
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
2064 case TimeDomainType::VIRTUAL: 2096 case TimeDomainType::VIRTUAL:
2065 return "virtual"; 2097 return "virtual";
2066 default: 2098 default:
2067 NOTREACHED(); 2099 NOTREACHED();
2068 return nullptr; 2100 return nullptr;
2069 } 2101 }
2070 } 2102 }
2071 2103
2072 } // namespace scheduler 2104 } // namespace scheduler
2073 } // namespace blink 2105 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698