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

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: record max; flush hist; 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"
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
210 timer_tasks_seem_expensive(false), 210 timer_tasks_seem_expensive(false),
211 touchstart_expected_soon(false), 211 touchstart_expected_soon(false),
212 have_seen_a_begin_main_frame(false), 212 have_seen_a_begin_main_frame(false),
213 have_reported_blocking_intervention_in_current_policy(false), 213 have_reported_blocking_intervention_in_current_policy(false),
214 have_reported_blocking_intervention_since_navigation(false), 214 have_reported_blocking_intervention_since_navigation(false),
215 has_visible_render_widget_with_touch_handler(false), 215 has_visible_render_widget_with_touch_handler(false),
216 begin_frame_not_expected_soon(false), 216 begin_frame_not_expected_soon(false),
217 in_idle_period_for_testing(false), 217 in_idle_period_for_testing(false),
218 use_virtual_time(false), 218 use_virtual_time(false),
219 is_audio_playing(false), 219 is_audio_playing(false),
220 during_navigation(false),
220 rail_mode_observer(nullptr), 221 rail_mode_observer(nullptr),
221 wake_up_budget_pool(nullptr), 222 wake_up_budget_pool(nullptr),
222 task_duration_per_queue_type_histogram(base::Histogram::FactoryGet( 223 task_duration_per_queue_type_histogram(base::Histogram::FactoryGet(
223 "RendererScheduler.TaskDurationPerQueueType", 224 "RendererScheduler.TaskDurationPerQueueType",
224 1, 225 1,
225 static_cast<int>(TaskQueue::QueueType::COUNT), 226 static_cast<int>(TaskQueue::QueueType::COUNT),
226 static_cast<int>(TaskQueue::QueueType::COUNT) + 1, 227 static_cast<int>(TaskQueue::QueueType::COUNT) + 1,
227 base::HistogramBase::kUmaTargetedHistogramFlag)) { 228 base::HistogramBase::kUmaTargetedHistogramFlag)) {
228 foreground_main_thread_load_tracker.Resume(now); 229 foreground_main_thread_load_tracker.Resume(now);
229 } 230 }
(...skipping 1398 matching lines...) Expand 10 before | Expand all | Expand 10 after
1628 GetMainThreadOnly().navigation_task_expected_count > 0) { 1629 GetMainThreadOnly().navigation_task_expected_count > 0) {
1629 GetMainThreadOnly().navigation_task_expected_count--; 1630 GetMainThreadOnly().navigation_task_expected_count--;
1630 UpdatePolicy(); 1631 UpdatePolicy();
1631 } 1632 }
1632 } 1633 }
1633 1634
1634 void RendererSchedulerImpl::OnNavigationStarted() { 1635 void RendererSchedulerImpl::OnNavigationStarted() {
1635 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), 1636 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"),
1636 "RendererSchedulerImpl::OnNavigationStarted"); 1637 "RendererSchedulerImpl::OnNavigationStarted");
1637 base::AutoLock lock(any_thread_lock_); 1638 base::AutoLock lock(any_thread_lock_);
1639 GetMainThreadOnly().during_navigation = true;
1638 ResetForNavigationLocked(); 1640 ResetForNavigationLocked();
1639 } 1641 }
1640 1642
1641 void RendererSchedulerImpl::OnFirstMeaningfulPaint() { 1643 void RendererSchedulerImpl::OnFirstMeaningfulPaint() {
1642 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), 1644 TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"),
1643 "RendererSchedulerImpl::OnFirstMeaningfulPaint"); 1645 "RendererSchedulerImpl::OnFirstMeaningfulPaint");
1644 base::AutoLock lock(any_thread_lock_); 1646 base::AutoLock lock(any_thread_lock_);
1645 GetAnyThread().waiting_for_meaningful_paint = false; 1647 GetAnyThread().waiting_for_meaningful_paint = false;
1646 UpdatePolicyLocked(UpdateType::MAY_EARLY_OUT_IF_POLICY_UNCHANGED); 1648 UpdatePolicyLocked(UpdateType::MAY_EARLY_OUT_IF_POLICY_UNCHANGED);
1647 } 1649 }
(...skipping 25 matching lines...) Expand all
1673 GetAnyThread().user_model.Reset(helper_.scheduler_tqm_delegate()->NowTicks()); 1675 GetAnyThread().user_model.Reset(helper_.scheduler_tqm_delegate()->NowTicks());
1674 GetAnyThread().have_seen_a_potentially_blocking_gesture = false; 1676 GetAnyThread().have_seen_a_potentially_blocking_gesture = false;
1675 GetAnyThread().waiting_for_meaningful_paint = true; 1677 GetAnyThread().waiting_for_meaningful_paint = true;
1676 GetAnyThread().have_seen_input_since_navigation = false; 1678 GetAnyThread().have_seen_input_since_navigation = false;
1677 GetMainThreadOnly().loading_task_cost_estimator.Clear(); 1679 GetMainThreadOnly().loading_task_cost_estimator.Clear();
1678 GetMainThreadOnly().timer_task_cost_estimator.Clear(); 1680 GetMainThreadOnly().timer_task_cost_estimator.Clear();
1679 GetMainThreadOnly().idle_time_estimator.Clear(); 1681 GetMainThreadOnly().idle_time_estimator.Clear();
1680 GetMainThreadOnly().have_seen_a_begin_main_frame = false; 1682 GetMainThreadOnly().have_seen_a_begin_main_frame = false;
1681 GetMainThreadOnly().have_reported_blocking_intervention_since_navigation = 1683 GetMainThreadOnly().have_reported_blocking_intervention_since_navigation =
1682 false; 1684 false;
1685 GetMainThreadOnly().max_queuing_time_histogram.reset();
1686 GetMainThreadOnly().max_queuing_time = base::TimeDelta();
1687
1683 for (WebViewSchedulerImpl* web_view_scheduler : 1688 for (WebViewSchedulerImpl* web_view_scheduler :
1684 GetMainThreadOnly().web_view_schedulers) { 1689 GetMainThreadOnly().web_view_schedulers) {
1685 web_view_scheduler->OnNavigation(); 1690 web_view_scheduler->OnNavigation();
1686 } 1691 }
1687 UpdatePolicyLocked(UpdateType::MAY_EARLY_OUT_IF_POLICY_UNCHANGED); 1692 UpdatePolicyLocked(UpdateType::MAY_EARLY_OUT_IF_POLICY_UNCHANGED);
1688 } 1693 }
1689 1694
1690 void RendererSchedulerImpl::SetTopLevelBlameContext( 1695 void RendererSchedulerImpl::SetTopLevelBlameContext(
1691 base::trace_event::BlameContext* blame_context) { 1696 base::trace_event::BlameContext* blame_context) {
1692 // Any task that runs in the default task runners belongs to the context of 1697 // Any task that runs in the default task runners belongs to the context of
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
1897 } 1902 }
1898 1903
1899 void RendererSchedulerImpl::RemoveTaskTimeObserver( 1904 void RendererSchedulerImpl::RemoveTaskTimeObserver(
1900 TaskTimeObserver* task_time_observer) { 1905 TaskTimeObserver* task_time_observer) {
1901 helper_.RemoveTaskTimeObserver(task_time_observer); 1906 helper_.RemoveTaskTimeObserver(task_time_observer);
1902 } 1907 }
1903 1908
1904 void RendererSchedulerImpl::OnQueueingTimeForWindowEstimated( 1909 void RendererSchedulerImpl::OnQueueingTimeForWindowEstimated(
1905 base::TimeDelta queueing_time, 1910 base::TimeDelta queueing_time,
1906 base::TimeTicks window_start_time) { 1911 base::TimeTicks window_start_time) {
1912 if (GetMainThreadOnly().during_navigation) {
1913 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.
1914 GetMainThreadOnly().max_queuing_time_histogram =
1915 base::SingleSampleMetricsFactory::Get()->CreateCustomCountsMetric(
1916 "RendererScheduler.MaxQueueingTime", 1, 10000, 50);
1917 }
1918 if (GetMainThreadOnly().max_queuing_time < queueing_time) {
1919 GetMainThreadOnly().max_queuing_time_histogram->SetSample(
1920 GetMainThreadOnly().max_queuing_time.InMilliseconds());
1921 GetMainThreadOnly().max_queuing_time = queueing_time;
1922 }
1923 }
1907 // RendererScheduler reports the queueing time once per window's duration. 1924 // RendererScheduler reports the queueing time once per window's duration.
1908 // |stepEQT|stepEQT|stepEQT|stepEQT|stepEQT|stepEQT| 1925 // |stepEQT|stepEQT|stepEQT|stepEQT|stepEQT|stepEQT|
1909 // Report: |-------window EQT------| 1926 // Report: |-------window EQT------|
1910 // Discard: |-------window EQT------| 1927 // Discard: |-------window EQT------|
1911 // Discard: |-------window EQT------| 1928 // Discard: |-------window EQT------|
1912 // Report: |-------window EQT------| 1929 // Report: |-------window EQT------|
1913 if (window_start_time - 1930 if (window_start_time -
1914 GetMainThreadOnly().uma_last_queueing_time_report_window_start_time < 1931 GetMainThreadOnly().uma_last_queueing_time_report_window_start_time <
1915 kQueueingTimeWindowDuration) { 1932 kQueueingTimeWindowDuration) {
1916 return; 1933 return;
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
2054 case TimeDomainType::VIRTUAL: 2071 case TimeDomainType::VIRTUAL:
2055 return "virtual"; 2072 return "virtual";
2056 default: 2073 default:
2057 NOTREACHED(); 2074 NOTREACHED();
2058 return nullptr; 2075 return nullptr;
2059 } 2076 }
2060 } 2077 }
2061 2078
2062 } // namespace scheduler 2079 } // namespace scheduler
2063 } // namespace blink 2080 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698