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

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: flush hist in OnCommitProvitionalLoad Created 3 years, 7 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"
11 #include "base/metrics/histogram.h" 11 #include "base/metrics/histogram.h"
12 #include "base/metrics/histogram_macros.h" 12 #include "base/metrics/histogram_macros.h"
13 #include "base/threading/thread_task_runner_handle.h" 13 #include "base/threading/thread_task_runner_handle.h"
14 #include "base/trace_event/trace_event.h" 14 #include "base/trace_event/trace_event.h"
15 #include "base/trace_event/trace_event_argument.h" 15 #include "base/trace_event/trace_event_argument.h"
16 #include "cc/output/begin_frame_args.h" 16 #include "cc/output/begin_frame_args.h"
17 #include "components/metrics/single_sample_metrics_factory_impl.h"
17 #include "platform/RuntimeEnabledFeatures.h" 18 #include "platform/RuntimeEnabledFeatures.h"
18 #include "platform/scheduler/base/real_time_domain.h" 19 #include "platform/scheduler/base/real_time_domain.h"
19 #include "platform/scheduler/base/task_queue_impl.h" 20 #include "platform/scheduler/base/task_queue_impl.h"
20 #include "platform/scheduler/base/task_queue_selector.h" 21 #include "platform/scheduler/base/task_queue_selector.h"
21 #include "platform/scheduler/base/time_converter.h" 22 #include "platform/scheduler/base/time_converter.h"
22 #include "platform/scheduler/base/trace_helper.h" 23 #include "platform/scheduler/base/trace_helper.h"
23 #include "platform/scheduler/base/virtual_time_domain.h" 24 #include "platform/scheduler/base/virtual_time_domain.h"
24 #include "platform/scheduler/child/scheduler_tqm_delegate.h" 25 #include "platform/scheduler/child/scheduler_tqm_delegate.h"
25 #include "platform/scheduler/renderer/auto_advancing_virtual_time_domain.h" 26 #include "platform/scheduler/renderer/auto_advancing_virtual_time_domain.h"
26 #include "platform/scheduler/renderer/task_queue_throttler.h" 27 #include "platform/scheduler/renderer/task_queue_throttler.h"
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
210 timer_tasks_seem_expensive(false), 211 timer_tasks_seem_expensive(false),
211 touchstart_expected_soon(false), 212 touchstart_expected_soon(false),
212 have_seen_a_begin_main_frame(false), 213 have_seen_a_begin_main_frame(false),
213 have_reported_blocking_intervention_in_current_policy(false), 214 have_reported_blocking_intervention_in_current_policy(false),
214 have_reported_blocking_intervention_since_navigation(false), 215 have_reported_blocking_intervention_since_navigation(false),
215 has_visible_render_widget_with_touch_handler(false), 216 has_visible_render_widget_with_touch_handler(false),
216 begin_frame_not_expected_soon(false), 217 begin_frame_not_expected_soon(false),
217 in_idle_period_for_testing(false), 218 in_idle_period_for_testing(false),
218 use_virtual_time(false), 219 use_virtual_time(false),
219 is_audio_playing(false), 220 is_audio_playing(false),
221 has_navigated(false),
220 rail_mode_observer(nullptr), 222 rail_mode_observer(nullptr),
221 wake_up_budget_pool(nullptr), 223 wake_up_budget_pool(nullptr),
222 task_duration_per_queue_type_histogram(base::Histogram::FactoryGet( 224 task_duration_per_queue_type_histogram(base::Histogram::FactoryGet(
223 "RendererScheduler.TaskDurationPerQueueType", 225 "RendererScheduler.TaskDurationPerQueueType",
224 1, 226 1,
225 static_cast<int>(TaskQueue::QueueType::COUNT), 227 static_cast<int>(TaskQueue::QueueType::COUNT),
226 static_cast<int>(TaskQueue::QueueType::COUNT) + 1, 228 static_cast<int>(TaskQueue::QueueType::COUNT) + 1,
227 base::HistogramBase::kUmaTargetedHistogramFlag)) { 229 base::HistogramBase::kUmaTargetedHistogramFlag)) {
228 foreground_main_thread_load_tracker.Resume(now); 230 foreground_main_thread_load_tracker.Resume(now);
229 } 231 }
(...skipping 1394 matching lines...) Expand 10 before | Expand all | Expand 10 after
1624 void RendererSchedulerImpl::RemovePendingNavigation(NavigatingFrameType type) { 1626 void RendererSchedulerImpl::RemovePendingNavigation(NavigatingFrameType type) {
1625 helper_.CheckOnValidThread(); 1627 helper_.CheckOnValidThread();
1626 DCHECK_GT(GetMainThreadOnly().navigation_task_expected_count, 0); 1628 DCHECK_GT(GetMainThreadOnly().navigation_task_expected_count, 0);
1627 if (type == NavigatingFrameType::kMainFrame && 1629 if (type == NavigatingFrameType::kMainFrame &&
1628 GetMainThreadOnly().navigation_task_expected_count > 0) { 1630 GetMainThreadOnly().navigation_task_expected_count > 0) {
1629 GetMainThreadOnly().navigation_task_expected_count--; 1631 GetMainThreadOnly().navigation_task_expected_count--;
1630 UpdatePolicy(); 1632 UpdatePolicy();
1631 } 1633 }
1632 } 1634 }
1633 1635
1636 void RendererSchedulerImpl::OnCommitProvisionalLoad() {
1637 // Initialize |max_queueing_time_histogram| as we need it so that
1638 // |SingleSampleMetricsFactory::SetFactory()| is called before
1639 // |SingleSampleMetricsFactory::Get()|
1640 if (!GetMainThreadOnly().max_queueing_time_histogram) {
1641 GetMainThreadOnly().max_queueing_time_histogram =
1642 GetMaxQueueingTimeHistogram();
1643 }
1644 GetMainThreadOnly().max_queueing_time_histogram.reset();
1645 GetMainThreadOnly().max_queueing_time = base::TimeDelta();
1646 GetMainThreadOnly().has_navigated = true;
1647 }
1648
1649 std::unique_ptr<base::SingleSampleMetric>
1650 RendererSchedulerImpl::GetMaxQueueingTimeHistogram() {
1651 return base::SingleSampleMetricsFactory::Get()->CreateCustomCountsMetric(
1652 "RendererScheduler.MaxQueueingTime", 1, 10000, 50);
1653 }
1654
1634 void RendererSchedulerImpl::OnNavigationStarted() { 1655 void RendererSchedulerImpl::OnNavigationStarted() {
1635 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), 1656 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"),
1636 "RendererSchedulerImpl::OnNavigationStarted"); 1657 "RendererSchedulerImpl::OnNavigationStarted");
1637 base::AutoLock lock(any_thread_lock_); 1658 base::AutoLock lock(any_thread_lock_);
1638 ResetForNavigationLocked(); 1659 ResetForNavigationLocked();
1639 } 1660 }
1640 1661
1641 void RendererSchedulerImpl::OnFirstMeaningfulPaint() { 1662 void RendererSchedulerImpl::OnFirstMeaningfulPaint() {
1642 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), 1663 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"),
1643 "RendererSchedulerImpl::OnFirstMeaningfulPaint"); 1664 "RendererSchedulerImpl::OnFirstMeaningfulPaint");
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
1897 } 1918 }
1898 1919
1899 void RendererSchedulerImpl::RemoveTaskTimeObserver( 1920 void RendererSchedulerImpl::RemoveTaskTimeObserver(
1900 TaskTimeObserver* task_time_observer) { 1921 TaskTimeObserver* task_time_observer) {
1901 helper_.RemoveTaskTimeObserver(task_time_observer); 1922 helper_.RemoveTaskTimeObserver(task_time_observer);
1902 } 1923 }
1903 1924
1904 void RendererSchedulerImpl::OnQueueingTimeForWindowEstimated( 1925 void RendererSchedulerImpl::OnQueueingTimeForWindowEstimated(
1905 base::TimeDelta queueing_time, 1926 base::TimeDelta queueing_time,
1906 base::TimeTicks window_start_time) { 1927 base::TimeTicks window_start_time) {
1928 if (GetMainThreadOnly().has_navigated) {
1929 if (GetMainThreadOnly().max_queueing_time < queueing_time) {
1930 if (!GetMainThreadOnly().max_queueing_time_histogram) {
1931 GetMainThreadOnly().max_queueing_time_histogram =
1932 GetMaxQueueingTimeHistogram();
1933 }
1934 GetMainThreadOnly().max_queueing_time_histogram->SetSample(
1935 GetMainThreadOnly().max_queueing_time.InMilliseconds());
1936 GetMainThreadOnly().max_queueing_time = queueing_time;
1937 }
1938 }
1907 // RendererScheduler reports the queueing time once per window's duration. 1939 // RendererScheduler reports the queueing time once per window's duration.
1908 // |stepEQT|stepEQT|stepEQT|stepEQT|stepEQT|stepEQT| 1940 // |stepEQT|stepEQT|stepEQT|stepEQT|stepEQT|stepEQT|
1909 // Report: |-------window EQT------| 1941 // Report: |-------window EQT------|
1910 // Discard: |-------window EQT------| 1942 // Discard: |-------window EQT------|
1911 // Discard: |-------window EQT------| 1943 // Discard: |-------window EQT------|
1912 // Report: |-------window EQT------| 1944 // Report: |-------window EQT------|
1913 if (window_start_time - 1945 if (window_start_time -
1914 GetMainThreadOnly().uma_last_queueing_time_report_window_start_time < 1946 GetMainThreadOnly().uma_last_queueing_time_report_window_start_time <
1915 kQueueingTimeWindowDuration) { 1947 kQueueingTimeWindowDuration) {
1916 return; 1948 return;
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
2054 case TimeDomainType::VIRTUAL: 2086 case TimeDomainType::VIRTUAL:
2055 return "virtual"; 2087 return "virtual";
2056 default: 2088 default:
2057 NOTREACHED(); 2089 NOTREACHED();
2058 return nullptr; 2090 return nullptr;
2059 } 2091 }
2060 } 2092 }
2061 2093
2062 } // namespace scheduler 2094 } // namespace scheduler
2063 } // namespace blink 2095 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698