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

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

Issue 15855008: cc: Call ManageTiles explicitly (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 7 years, 6 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 | Annotate | Revision Log
« no previous file with comments | « cc/trees/layer_tree_host_impl.h ('k') | cc/trees/layer_tree_host_impl_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/layer_tree_host_impl.h" 5 #include "cc/trees/layer_tree_host_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/json/json_writer.h" 10 #include "base/json/json_writer.h"
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 const LayerTreeSettings& settings, 156 const LayerTreeSettings& settings,
157 LayerTreeHostImplClient* client, 157 LayerTreeHostImplClient* client,
158 Proxy* proxy, 158 Proxy* proxy,
159 RenderingStatsInstrumentation* rendering_stats_instrumentation) 159 RenderingStatsInstrumentation* rendering_stats_instrumentation)
160 : client_(client), 160 : client_(client),
161 proxy_(proxy), 161 proxy_(proxy),
162 input_handler_client_(NULL), 162 input_handler_client_(NULL),
163 did_lock_scrolling_layer_(false), 163 did_lock_scrolling_layer_(false),
164 should_bubble_scrolls_(false), 164 should_bubble_scrolls_(false),
165 wheel_scrolling_(false), 165 wheel_scrolling_(false),
166 manage_tiles_needed_(false),
166 root_layer_scroll_offset_delegate_(NULL), 167 root_layer_scroll_offset_delegate_(NULL),
167 settings_(settings), 168 settings_(settings),
168 visible_(true), 169 visible_(true),
169 managed_memory_policy_( 170 managed_memory_policy_(
170 PrioritizedResourceManager::DefaultMemoryAllocationLimit(), 171 PrioritizedResourceManager::DefaultMemoryAllocationLimit(),
171 ManagedMemoryPolicy::CUTOFF_ALLOW_EVERYTHING, 172 ManagedMemoryPolicy::CUTOFF_ALLOW_EVERYTHING,
172 0, 173 0,
173 ManagedMemoryPolicy::CUTOFF_ALLOW_NOTHING), 174 ManagedMemoryPolicy::CUTOFF_ALLOW_NOTHING),
174 pinch_gesture_active_(false), 175 pinch_gesture_active_(false),
175 fps_counter_(FrameRateCounter::Create(proxy_->HasImplThread())), 176 fps_counter_(FrameRateCounter::Create(proxy_->HasImplThread())),
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
231 232
232 void LayerTreeHostImpl::CommitComplete() { 233 void LayerTreeHostImpl::CommitComplete() {
233 TRACE_EVENT0("cc", "LayerTreeHostImpl::CommitComplete"); 234 TRACE_EVENT0("cc", "LayerTreeHostImpl::CommitComplete");
234 235
235 // Impl-side painting needs an update immediately post-commit to have the 236 // Impl-side painting needs an update immediately post-commit to have the
236 // opportunity to create tilings. Other paths can call UpdateDrawProperties 237 // opportunity to create tilings. Other paths can call UpdateDrawProperties
237 // more lazily when needed prior to drawing. 238 // more lazily when needed prior to drawing.
238 if (settings_.impl_side_painting) { 239 if (settings_.impl_side_painting) {
239 pending_tree_->set_needs_update_draw_properties(); 240 pending_tree_->set_needs_update_draw_properties();
240 pending_tree_->UpdateDrawProperties(); 241 pending_tree_->UpdateDrawProperties();
242 // Start working on newly created tiles immediately if needed.
243 ManageTiles();
241 } else { 244 } else {
242 active_tree_->set_needs_update_draw_properties(); 245 active_tree_->set_needs_update_draw_properties();
243 } 246 }
244 247
245 client_->SendManagedMemoryStats(); 248 client_->SendManagedMemoryStats();
246 } 249 }
247 250
248 bool LayerTreeHostImpl::CanDraw() { 251 bool LayerTreeHostImpl::CanDraw() {
249 // Note: If you are changing this function or any other function that might 252 // Note: If you are changing this function or any other function that might
250 // affect the result of CanDraw, make sure to call 253 // affect the result of CanDraw, make sure to call
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
285 base::Time wall_clock_time) { 288 base::Time wall_clock_time) {
286 if (input_handler_client_) 289 if (input_handler_client_)
287 input_handler_client_->Animate(monotonic_time); 290 input_handler_client_->Animate(monotonic_time);
288 AnimatePageScale(monotonic_time); 291 AnimatePageScale(monotonic_time);
289 AnimateLayers(monotonic_time, wall_clock_time); 292 AnimateLayers(monotonic_time, wall_clock_time);
290 AnimateScrollbars(monotonic_time); 293 AnimateScrollbars(monotonic_time);
291 AnimateTopControls(monotonic_time); 294 AnimateTopControls(monotonic_time);
292 } 295 }
293 296
294 void LayerTreeHostImpl::ManageTiles() { 297 void LayerTreeHostImpl::ManageTiles() {
295 DCHECK(tile_manager_); 298 if (!tile_manager_)
299 return;
300 if (!manage_tiles_needed_)
301 return;
302 manage_tiles_needed_ = false;
296 tile_manager_->ManageTiles(); 303 tile_manager_->ManageTiles();
297 304
298 size_t memory_required_bytes; 305 size_t memory_required_bytes;
299 size_t memory_nice_to_have_bytes; 306 size_t memory_nice_to_have_bytes;
300 size_t memory_used_bytes; 307 size_t memory_used_bytes;
301 tile_manager_->GetMemoryStats(&memory_required_bytes, 308 tile_manager_->GetMemoryStats(&memory_required_bytes,
302 &memory_nice_to_have_bytes, 309 &memory_nice_to_have_bytes,
303 &memory_used_bytes); 310 &memory_used_bytes);
304 SendManagedMemoryStats(memory_required_bytes, 311 SendManagedMemoryStats(memory_required_bytes,
305 memory_nice_to_have_bytes, 312 memory_nice_to_have_bytes,
(...skipping 657 matching lines...) Expand 10 before | Expand all | Expand 10 after
963 // possible. crbug.com/224475 970 // possible. crbug.com/224475
964 new_state.unused_memory_limit_in_bytes = static_cast<size_t>( 971 new_state.unused_memory_limit_in_bytes = static_cast<size_t>(
965 (static_cast<int64>(new_state.memory_limit_in_bytes) * 972 (static_cast<int64>(new_state.memory_limit_in_bytes) *
966 settings_.max_unused_resource_memory_percentage) / 100); 973 settings_.max_unused_resource_memory_percentage) / 100);
967 new_state.memory_limit_policy = 974 new_state.memory_limit_policy =
968 ManagedMemoryPolicy::PriorityCutoffToTileMemoryLimitPolicy( 975 ManagedMemoryPolicy::PriorityCutoffToTileMemoryLimitPolicy(
969 visible_ ? 976 visible_ ?
970 policy.priority_cutoff_when_visible : 977 policy.priority_cutoff_when_visible :
971 policy.priority_cutoff_when_not_visible); 978 policy.priority_cutoff_when_not_visible);
972 tile_manager_->SetGlobalState(new_state); 979 tile_manager_->SetGlobalState(new_state);
980 manage_tiles_needed_ = true;
973 } 981 }
974 982
975 bool LayerTreeHostImpl::HasImplThread() const { 983 bool LayerTreeHostImpl::HasImplThread() const {
976 return proxy_->HasImplThread(); 984 return proxy_->HasImplThread();
977 } 985 }
978 986
979 void LayerTreeHostImpl::ScheduleManageTiles() {
980 if (client_)
981 client_->SetNeedsManageTilesOnImplThread();
982 }
983
984 void LayerTreeHostImpl::DidInitializeVisibleTile() { 987 void LayerTreeHostImpl::DidInitializeVisibleTile() {
985 // TODO(reveman): Determine tiles that changed and only damage 988 // TODO(reveman): Determine tiles that changed and only damage
986 // what's necessary. 989 // what's necessary.
987 SetFullRootLayerDamage(); 990 SetFullRootLayerDamage();
988 if (client_) 991 if (client_)
989 client_->DidInitializeVisibleTileOnImplThread(); 992 client_->DidInitializeVisibleTileOnImplThread();
990 } 993 }
991 994
992 bool LayerTreeHostImpl:: 995 bool LayerTreeHostImpl::
993 ShouldForceTileUploadsRequiredForActivationToComplete() const { 996 ShouldForceTileUploadsRequiredForActivationToComplete() const {
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after
1331 } 1334 }
1332 1335
1333 bool LayerTreeHostImpl::ActivatePendingTreeIfNeeded() { 1336 bool LayerTreeHostImpl::ActivatePendingTreeIfNeeded() {
1334 if (!pending_tree_) 1337 if (!pending_tree_)
1335 return false; 1338 return false;
1336 1339
1337 CHECK(settings_.impl_side_painting); 1340 CHECK(settings_.impl_side_painting);
1338 1341
1339 // TODO(enne): This needs to be moved somewhere else (post-animate?) 1342 // TODO(enne): This needs to be moved somewhere else (post-animate?)
1340 pending_tree_->UpdateDrawProperties(); 1343 pending_tree_->UpdateDrawProperties();
1344 // Note: This will likely cause ManageTiles to be needed. However,
1345 // it is only out of date as far as the last commit or the last draw.
1346 // For performance reasons, don't call ManageTiles again here.
1341 1347
1342 TRACE_EVENT_ASYNC_STEP1( 1348 TRACE_EVENT_ASYNC_STEP1(
1343 "cc", 1349 "cc",
1344 "PendingTree", pending_tree_.get(), "activate", 1350 "PendingTree", pending_tree_.get(), "activate",
1345 "state", TracedValue::FromValue(ActivationStateAsValue().release())); 1351 "state", TracedValue::FromValue(ActivationStateAsValue().release()));
1346 1352
1347 if (tile_manager_) { 1353 if (tile_manager_) {
1348 tile_manager_->CheckForCompletedTileUploads(); 1354 tile_manager_->CheckForCompletedTileUploads();
1349 if (!tile_manager_->AreTilesRequiredForActivationReady()) 1355 if (!tile_manager_->AreTilesRequiredForActivationReady())
1350 return false; 1356 return false;
(...skipping 873 matching lines...) Expand 10 before | Expand all | Expand 10 after
2224 void LayerTreeHostImpl::SetTreePriority(TreePriority priority) { 2230 void LayerTreeHostImpl::SetTreePriority(TreePriority priority) {
2225 if (!tile_manager_) 2231 if (!tile_manager_)
2226 return; 2232 return;
2227 2233
2228 GlobalStateThatImpactsTilePriority new_state(tile_manager_->GlobalState()); 2234 GlobalStateThatImpactsTilePriority new_state(tile_manager_->GlobalState());
2229 if (new_state.tree_priority == priority) 2235 if (new_state.tree_priority == priority)
2230 return; 2236 return;
2231 2237
2232 new_state.tree_priority = priority; 2238 new_state.tree_priority = priority;
2233 tile_manager_->SetGlobalState(new_state); 2239 tile_manager_->SetGlobalState(new_state);
2240 manage_tiles_needed_ = true;
2234 } 2241 }
2235 2242
2236 void LayerTreeHostImpl::ResetCurrentFrameTimeForNextFrame() { 2243 void LayerTreeHostImpl::ResetCurrentFrameTimeForNextFrame() {
2237 current_frame_timeticks_ = base::TimeTicks(); 2244 current_frame_timeticks_ = base::TimeTicks();
2238 current_frame_time_ = base::Time(); 2245 current_frame_time_ = base::Time();
2239 } 2246 }
2240 2247
2241 static void UpdateCurrentFrameTime(base::TimeTicks* ticks, base::Time* now) { 2248 static void UpdateCurrentFrameTime(base::TimeTicks* ticks, base::Time* now) {
2242 if (ticks->is_null()) { 2249 if (ticks->is_null()) {
2243 DCHECK(now->is_null()); 2250 DCHECK(now->is_null());
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
2305 } 2312 }
2306 2313
2307 void LayerTreeHostImpl::SetDebugState(const LayerTreeDebugState& debug_state) { 2314 void LayerTreeHostImpl::SetDebugState(const LayerTreeDebugState& debug_state) {
2308 if (debug_state_.continuous_painting != debug_state.continuous_painting) 2315 if (debug_state_.continuous_painting != debug_state.continuous_painting)
2309 paint_time_counter_->ClearHistory(); 2316 paint_time_counter_->ClearHistory();
2310 2317
2311 debug_state_ = debug_state; 2318 debug_state_ = debug_state;
2312 } 2319 }
2313 2320
2314 } // namespace cc 2321 } // namespace cc
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_impl.h ('k') | cc/trees/layer_tree_host_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698