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

Unified Diff: components/scheduler/renderer/renderer_scheduler_impl.cc

Issue 1420773003: scheduler: Don't block expensive loading tasks during main thread gestures (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Review comments. Created 5 years, 2 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | components/scheduler/renderer/renderer_scheduler_impl_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/scheduler/renderer/renderer_scheduler_impl.cc
diff --git a/components/scheduler/renderer/renderer_scheduler_impl.cc b/components/scheduler/renderer/renderer_scheduler_impl.cc
index 51015be4f074331d8c7b114d13da895e6365063c..24f98749ed128759df218141eae4e872d3574c10 100644
--- a/components/scheduler/renderer/renderer_scheduler_impl.cc
+++ b/components/scheduler/renderer/renderer_scheduler_impl.cc
@@ -610,11 +610,13 @@ void RendererSchedulerImpl::UpdatePolicyLocked(UpdateType update_type) {
}
Policy new_policy;
- bool block_expensive_tasks = false;
+ bool block_expensive_loading_tasks = false;
+ bool block_expensive_timer_tasks = false;
switch (use_case) {
case UseCase::COMPOSITOR_GESTURE:
if (touchstart_expected_soon) {
- block_expensive_tasks = true;
+ block_expensive_loading_tasks = true;
+ block_expensive_timer_tasks = true;
} else {
// What we really want to do is priorize loading tasks, but that doesn't
// seem to be safe. Instead we do that by proxy by deprioritizing
@@ -625,20 +627,29 @@ void RendererSchedulerImpl::UpdatePolicyLocked(UpdateType update_type) {
break;
case UseCase::MAIN_THREAD_GESTURE:
+ // In main thread gestures we don't have perfect knowledge about which
+ // things we should be prioritizing. The following is best guess
+ // heuristic which lets us produce frames quickly but does not prevent
+ // loading of additional content.
new_policy.compositor_queue_priority = TaskQueue::HIGH_PRIORITY;
- block_expensive_tasks = true;
+ block_expensive_loading_tasks = false;
+ block_expensive_timer_tasks = true;
break;
case UseCase::TOUCHSTART:
new_policy.compositor_queue_priority = TaskQueue::HIGH_PRIORITY;
new_policy.loading_queue_priority = TaskQueue::DISABLED_PRIORITY;
new_policy.timer_queue_priority = TaskQueue::DISABLED_PRIORITY;
- block_expensive_tasks = true; // NOTE this is a nop due to the above.
+ // NOTE these are nops due to the above.
+ block_expensive_loading_tasks = true;
+ block_expensive_timer_tasks = true;
break;
case UseCase::NONE:
- if (touchstart_expected_soon)
- block_expensive_tasks = true;
+ if (touchstart_expected_soon) {
+ block_expensive_loading_tasks = true;
+ block_expensive_timer_tasks = true;
+ }
break;
case UseCase::LOADING:
@@ -651,17 +662,21 @@ void RendererSchedulerImpl::UpdatePolicyLocked(UpdateType update_type) {
}
// Don't block expensive tasks unless we have actually seen something.
- if (!MainThreadOnly().have_seen_a_begin_main_frame)
- block_expensive_tasks = false;
+ if (!MainThreadOnly().have_seen_a_begin_main_frame) {
+ block_expensive_loading_tasks = false;
+ block_expensive_timer_tasks = false;
+ }
// Don't block expensive tasks if we are expecting a navigation.
- if (MainThreadOnly().navigation_task_expected_count > 0)
- block_expensive_tasks = false;
+ if (MainThreadOnly().navigation_task_expected_count > 0) {
+ block_expensive_loading_tasks = false;
+ block_expensive_timer_tasks = false;
+ }
- if (block_expensive_tasks && loading_tasks_seem_expensive)
+ if (block_expensive_loading_tasks && loading_tasks_seem_expensive)
new_policy.loading_queue_priority = TaskQueue::DISABLED_PRIORITY;
- if ((block_expensive_tasks && timer_tasks_seem_expensive) ||
+ if ((block_expensive_timer_tasks && timer_tasks_seem_expensive) ||
MainThreadOnly().timer_queue_suspend_count != 0 ||
MainThreadOnly().timer_queue_suspended_when_backgrounded) {
new_policy.timer_queue_priority = TaskQueue::DISABLED_PRIORITY;
« no previous file with comments | « no previous file | components/scheduler/renderer/renderer_scheduler_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698