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

Side by Side Diff: components/scheduler/renderer/renderer_scheduler_impl.cc

Issue 2017763003: Suspend more task queues for background renderers (experimental) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 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 "components/scheduler/renderer/renderer_scheduler_impl.h" 5 #include "components/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 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 kShortIdlePeriodDurationSampleCount, 114 kShortIdlePeriodDurationSampleCount,
115 kShortIdlePeriodDurationPercentile), 115 kShortIdlePeriodDurationPercentile),
116 current_use_case(UseCase::NONE), 116 current_use_case(UseCase::NONE),
117 timer_queue_suspend_count(0), 117 timer_queue_suspend_count(0),
118 navigation_task_expected_count(0), 118 navigation_task_expected_count(0),
119 expensive_task_policy(ExpensiveTaskPolicy::RUN), 119 expensive_task_policy(ExpensiveTaskPolicy::RUN),
120 renderer_hidden(false), 120 renderer_hidden(false),
121 renderer_backgrounded(false), 121 renderer_backgrounded(false),
122 timer_queue_suspension_when_backgrounded_enabled(false), 122 timer_queue_suspension_when_backgrounded_enabled(false),
123 timer_queue_suspended_when_backgrounded(false), 123 timer_queue_suspended_when_backgrounded(false),
124 queue_suspended(false),
124 was_shutdown(false), 125 was_shutdown(false),
125 loading_tasks_seem_expensive(false), 126 loading_tasks_seem_expensive(false),
126 timer_tasks_seem_expensive(false), 127 timer_tasks_seem_expensive(false),
127 touchstart_expected_soon(false), 128 touchstart_expected_soon(false),
128 have_seen_a_begin_main_frame(false), 129 have_seen_a_begin_main_frame(false),
129 have_reported_blocking_intervention_in_current_policy(false), 130 have_reported_blocking_intervention_in_current_policy(false),
130 have_reported_blocking_intervention_since_navigation(false), 131 have_reported_blocking_intervention_since_navigation(false),
131 has_visible_render_widget_with_touch_handler(false), 132 has_visible_render_widget_with_touch_handler(false),
132 begin_frame_not_expected_soon(false), 133 begin_frame_not_expected_soon(false),
133 expensive_task_blocking_allowed(true), 134 expensive_task_blocking_allowed(true),
(...skipping 691 matching lines...) Expand 10 before | Expand all | Expand 10 after
825 break; 826 break;
826 } 827 }
827 828
828 MainThreadOnly().expensive_task_policy = expensive_task_policy; 829 MainThreadOnly().expensive_task_policy = expensive_task_policy;
829 830
830 if (MainThreadOnly().timer_queue_suspend_count != 0 || 831 if (MainThreadOnly().timer_queue_suspend_count != 0 ||
831 MainThreadOnly().timer_queue_suspended_when_backgrounded) { 832 MainThreadOnly().timer_queue_suspended_when_backgrounded) {
832 new_policy.timer_queue_policy.is_enabled = false; 833 new_policy.timer_queue_policy.is_enabled = false;
833 } 834 }
834 835
836 if (MainThreadOnly().queue_suspended) {
837 new_policy.compositor_queue_policy.is_enabled = false;
838 new_policy.loading_queue_policy.is_enabled = false;
839 new_policy.control_queue_policy.is_enabled = false;
840 }
841
835 // Tracing is done before the early out check, because it's quite possible we 842 // Tracing is done before the early out check, because it's quite possible we
836 // will otherwise miss this information in traces. 843 // will otherwise miss this information in traces.
837 TRACE_EVENT_OBJECT_SNAPSHOT_WITH_ID( 844 TRACE_EVENT_OBJECT_SNAPSHOT_WITH_ID(
838 TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), "RendererScheduler", 845 TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), "RendererScheduler",
839 this, AsValueLocked(now)); 846 this, AsValueLocked(now));
840 TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), "use_case", 847 TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), "use_case",
841 use_case); 848 use_case);
842 TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"), 849 TRACE_COUNTER1(TRACE_DISABLED_BY_DEFAULT("renderer.scheduler"),
843 "touchstart_expected_soon", 850 "touchstart_expected_soon",
844 MainThreadOnly().touchstart_expected_soon); 851 MainThreadOnly().touchstart_expected_soon);
(...skipping 30 matching lines...) Expand all
875 MainThreadOnly().have_reported_blocking_intervention_in_current_policy = 882 MainThreadOnly().have_reported_blocking_intervention_in_current_policy =
876 false; 883 false;
877 884
878 // TODO(alexclarke): We shouldn't have to prioritize the default queue, but it 885 // TODO(alexclarke): We shouldn't have to prioritize the default queue, but it
879 // appears to be necessary since the order of loading tasks and IPCs (which 886 // appears to be necessary since the order of loading tasks and IPCs (which
880 // are mostly dispatched on the default queue) need to be preserved. 887 // are mostly dispatched on the default queue) need to be preserved.
881 ApplyTaskQueuePolicy(helper_.DefaultTaskRunner().get(), 888 ApplyTaskQueuePolicy(helper_.DefaultTaskRunner().get(),
882 MainThreadOnly().current_policy.default_queue_policy, 889 MainThreadOnly().current_policy.default_queue_policy,
883 new_policy.default_queue_policy); 890 new_policy.default_queue_policy);
884 891
885 DCHECK(compositor_task_runner_->IsQueueEnabled()); 892 ApplyTaskQueuePolicy(helper_.ControlTaskRunner().get(),
893 MainThreadOnly().current_policy.control_queue_policy,
894 new_policy.control_queue_policy);
895 ApplyTaskQueuePolicy(helper_.ControlAfterWakeUpTaskRunner().get(),
896 MainThreadOnly().current_policy.control_queue_policy,
897 new_policy.control_queue_policy);
898
886 MainThreadOnly().current_policy = new_policy; 899 MainThreadOnly().current_policy = new_policy;
887 } 900 }
888 901
889 void RendererSchedulerImpl::ApplyTaskQueuePolicy( 902 void RendererSchedulerImpl::ApplyTaskQueuePolicy(
890 TaskQueue* task_queue, 903 TaskQueue* task_queue,
891 const TaskQueuePolicy& old_task_queue_policy, 904 const TaskQueuePolicy& old_task_queue_policy,
892 const TaskQueuePolicy& new_task_queue_policy) const { 905 const TaskQueuePolicy& new_task_queue_policy) const {
893 // The ThrottlingHelper also calls SetQueueEnabled, so we can avoid calling 906 // The ThrottlingHelper also calls SetQueueEnabled, so we can avoid calling
894 // this here. 907 // this here.
895 if (new_task_queue_policy.time_domain_type != TimeDomainType::THROTTLED) 908 if (new_task_queue_policy.time_domain_type != TimeDomainType::THROTTLED)
(...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after
1207 base::TimeDelta::FromMilliseconds( 1220 base::TimeDelta::FromMilliseconds(
1208 kIdlePeriodStarvationThresholdMillis); 1221 kIdlePeriodStarvationThresholdMillis);
1209 } 1222 }
1210 1223
1211 void RendererSchedulerImpl::SuspendTimerQueueWhenBackgrounded() { 1224 void RendererSchedulerImpl::SuspendTimerQueueWhenBackgrounded() {
1212 DCHECK(MainThreadOnly().renderer_backgrounded); 1225 DCHECK(MainThreadOnly().renderer_backgrounded);
1213 if (MainThreadOnly().timer_queue_suspended_when_backgrounded) 1226 if (MainThreadOnly().timer_queue_suspended_when_backgrounded)
1214 return; 1227 return;
1215 1228
1216 MainThreadOnly().timer_queue_suspended_when_backgrounded = true; 1229 MainThreadOnly().timer_queue_suspended_when_backgrounded = true;
1230 MainThreadOnly().queue_suspended = true;
1217 ForceUpdatePolicy(); 1231 ForceUpdatePolicy();
1218 } 1232 }
1219 1233
1220 void RendererSchedulerImpl::ResumeTimerQueueWhenForegrounded() { 1234 void RendererSchedulerImpl::ResumeTimerQueueWhenForegrounded() {
1221 DCHECK(!MainThreadOnly().renderer_backgrounded); 1235 DCHECK(!MainThreadOnly().renderer_backgrounded);
1222 if (!MainThreadOnly().timer_queue_suspended_when_backgrounded) 1236 if (!MainThreadOnly().timer_queue_suspended_when_backgrounded)
1223 return; 1237 return;
1224 1238
1225 MainThreadOnly().timer_queue_suspended_when_backgrounded = false; 1239 MainThreadOnly().timer_queue_suspended_when_backgrounded = false;
1240 MainThreadOnly().queue_suspended = false;
1226 ForceUpdatePolicy(); 1241 ForceUpdatePolicy();
1227 } 1242 }
1228 1243
1229 void RendererSchedulerImpl::ResetForNavigationLocked() { 1244 void RendererSchedulerImpl::ResetForNavigationLocked() {
1230 helper_.CheckOnValidThread(); 1245 helper_.CheckOnValidThread();
1231 any_thread_lock_.AssertAcquired(); 1246 any_thread_lock_.AssertAcquired();
1232 AnyThread().user_model.Reset(helper_.scheduler_tqm_delegate()->NowTicks()); 1247 AnyThread().user_model.Reset(helper_.scheduler_tqm_delegate()->NowTicks());
1233 AnyThread().have_seen_touchstart = false; 1248 AnyThread().have_seen_touchstart = false;
1234 MainThreadOnly().loading_task_cost_estimator.Clear(); 1249 MainThreadOnly().loading_task_cost_estimator.Clear();
1235 MainThreadOnly().timer_task_cost_estimator.Clear(); 1250 MainThreadOnly().timer_task_cost_estimator.Clear();
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
1317 BroadcastConsoleWarning( 1332 BroadcastConsoleWarning(
1318 "Blink deferred a task in order to make scrolling smoother. " 1333 "Blink deferred a task in order to make scrolling smoother. "
1319 "Your timer tasks should take less than 50ms to run to avoid this. " 1334 "Your timer tasks should take less than 50ms to run to avoid this. "
1320 "Please see " 1335 "Please see "
1321 "https://developers.google.com/web/tools/chrome-devtools/profile/evaluat e-performance/rail" 1336 "https://developers.google.com/web/tools/chrome-devtools/profile/evaluat e-performance/rail"
1322 " and https://crbug.com/574343#c40 for more information."); 1337 " and https://crbug.com/574343#c40 for more information.");
1323 } 1338 }
1324 } 1339 }
1325 1340
1326 } // namespace scheduler 1341 } // namespace scheduler
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698