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

Side by Side Diff: cc/trees/thread_proxy.cc

Issue 1425973003: cc: Don't attempt main thread synchronization if it is slow. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: new tests Created 5 years, 1 month 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 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 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 "cc/trees/thread_proxy.h" 5 #include "cc/trees/thread_proxy.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 9
10 #include "base/auto_reset.h" 10 #include "base/auto_reset.h"
(...skipping 1054 matching lines...) Expand 10 before | Expand all | Expand 10 after
1065 bool smoothness_takes_priority = 1065 bool smoothness_takes_priority =
1066 impl().layer_tree_host_impl->pinch_gesture_active() || 1066 impl().layer_tree_host_impl->pinch_gesture_active() ||
1067 impl().layer_tree_host_impl->page_scale_animation_active() || 1067 impl().layer_tree_host_impl->page_scale_animation_active() ||
1068 impl().layer_tree_host_impl->IsActivelyScrolling(); 1068 impl().layer_tree_host_impl->IsActivelyScrolling();
1069 1069
1070 // Schedule expiration if smoothness currently takes priority. 1070 // Schedule expiration if smoothness currently takes priority.
1071 if (smoothness_takes_priority) 1071 if (smoothness_takes_priority)
1072 impl().smoothness_priority_expiration_notifier.Schedule(); 1072 impl().smoothness_priority_expiration_notifier.Schedule();
1073 1073
1074 // We use the same priority for both trees by default. 1074 // We use the same priority for both trees by default.
1075 TreePriority priority = SAME_PRIORITY_FOR_BOTH_TREES; 1075 TreePriority tree_priority = SAME_PRIORITY_FOR_BOTH_TREES;
1076 1076
1077 // Smoothness takes priority if we have an expiration for it scheduled. 1077 // Smoothness takes priority if we have an expiration for it scheduled.
1078 if (impl().smoothness_priority_expiration_notifier.HasPendingNotification()) 1078 if (impl().smoothness_priority_expiration_notifier.HasPendingNotification())
1079 priority = SMOOTHNESS_TAKES_PRIORITY; 1079 tree_priority = SMOOTHNESS_TAKES_PRIORITY;
1080 1080
1081 // New content always takes priority when there is an invalid viewport size or 1081 // New content always takes priority when there is an invalid viewport size or
1082 // ui resources have been evicted. 1082 // ui resources have been evicted.
1083 if (impl().layer_tree_host_impl->active_tree()->ViewportSizeInvalid() || 1083 if (impl().layer_tree_host_impl->active_tree()->ViewportSizeInvalid() ||
1084 impl().layer_tree_host_impl->EvictedUIResourcesExist() || 1084 impl().layer_tree_host_impl->EvictedUIResourcesExist() ||
1085 impl().input_throttled_until_commit) { 1085 impl().input_throttled_until_commit) {
1086 // Once we enter NEW_CONTENTS_TAKES_PRIORITY mode, visible tiles on active 1086 // Once we enter NEW_CONTENTS_TAKES_PRIORITY mode, visible tiles on active
1087 // tree might be freed. We need to set RequiresHighResToDraw to ensure that 1087 // tree might be freed. We need to set RequiresHighResToDraw to ensure that
1088 // high res tiles will be required to activate pending tree. 1088 // high res tiles will be required to activate pending tree.
1089 impl().layer_tree_host_impl->SetRequiresHighResToDraw(); 1089 impl().layer_tree_host_impl->SetRequiresHighResToDraw();
1090 priority = NEW_CONTENT_TAKES_PRIORITY; 1090 tree_priority = NEW_CONTENT_TAKES_PRIORITY;
1091 } 1091 }
1092 1092
1093 impl().layer_tree_host_impl->SetTreePriority(priority); 1093 impl().layer_tree_host_impl->SetTreePriority(tree_priority);
1094 1094
1095 // Only put the scheduler in impl latency prioritization mode if we don't 1095 // Only put the scheduler in impl latency prioritization mode if we don't
1096 // have a scroll listener. This gives the scroll listener a better chance of 1096 // have a scroll listener. This gives the scroll listener a better chance of
1097 // handling scroll updates within the same frame. The tree itself is still 1097 // handling scroll updates within the same frame. The tree itself is still
1098 // kept in prefer smoothness mode to allow checkerboarding. 1098 // kept in prefer smoothness mode to allow checkerboarding.
1099 impl().scheduler->SetImplLatencyTakesPriority( 1099 ScrollHandlerState scroll_handler_state =
1100 priority == SMOOTHNESS_TAKES_PRIORITY && 1100 impl().layer_tree_host_impl->scroll_affects_scroll_handler()
1101 !impl().layer_tree_host_impl->scroll_affects_scroll_handler()); 1101 ? SCROLL_AFFECTS_SCROLL_HANDLER
1102 : SCROLL_DOES_NOT_AFFECT_SCROLL_HANDLER;
1103 impl().scheduler->SetSmoothnessMode(tree_priority, scroll_handler_state);
1102 1104
1103 // Notify the the client of this compositor via the output surface. 1105 // Notify the the client of this compositor via the output surface.
1104 // TODO(epenner): Route this to compositor-thread instead of output-surface 1106 // TODO(epenner): Route this to compositor-thread instead of output-surface
1105 // after GTFO refactor of compositor-thread (http://crbug/170828). 1107 // after GTFO refactor of compositor-thread (http://crbug/170828).
1106 if (impl().layer_tree_host_impl->output_surface()) { 1108 if (impl().layer_tree_host_impl->output_surface()) {
1107 impl() 1109 impl()
1108 .layer_tree_host_impl->output_surface() 1110 .layer_tree_host_impl->output_surface()
1109 ->UpdateSmoothnessTakesPriority(priority == SMOOTHNESS_TAKES_PRIORITY); 1111 ->UpdateSmoothnessTakesPriority(tree_priority ==
1112 SMOOTHNESS_TAKES_PRIORITY);
1110 } 1113 }
1111 } 1114 }
1112 1115
1113 void ThreadProxy::PostDelayedAnimationTaskOnImplThread( 1116 void ThreadProxy::PostDelayedAnimationTaskOnImplThread(
1114 const base::Closure& task, 1117 const base::Closure& task,
1115 base::TimeDelta delay) { 1118 base::TimeDelta delay) {
1116 task_runner_provider_->ImplThreadTaskRunner()->PostDelayedTask(FROM_HERE, 1119 task_runner_provider_->ImplThreadTaskRunner()->PostDelayedTask(FROM_HERE,
1117 task, delay); 1120 task, delay);
1118 } 1121 }
1119 1122
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
1187 1190
1188 base::WeakPtr<ProxyMain> ThreadProxy::GetMainWeakPtr() { 1191 base::WeakPtr<ProxyMain> ThreadProxy::GetMainWeakPtr() {
1189 return main_thread_weak_ptr_; 1192 return main_thread_weak_ptr_;
1190 } 1193 }
1191 1194
1192 base::WeakPtr<ProxyImpl> ThreadProxy::GetImplWeakPtr() { 1195 base::WeakPtr<ProxyImpl> ThreadProxy::GetImplWeakPtr() {
1193 return impl_thread_weak_ptr_; 1196 return impl_thread_weak_ptr_;
1194 } 1197 }
1195 1198
1196 } // namespace cc 1199 } // namespace cc
OLDNEW
« cc/scheduler/scheduler_state_machine.h ('K') | « cc/test/scheduler_test_common.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698