| OLD | NEW |
| 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 #include <limits> | 8 #include <limits> |
| 9 | 9 |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| (...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 190 const LayerTreeSettings& settings, | 190 const LayerTreeSettings& settings, |
| 191 LayerTreeHostImplClient* client, | 191 LayerTreeHostImplClient* client, |
| 192 Proxy* proxy, | 192 Proxy* proxy, |
| 193 RenderingStatsInstrumentation* rendering_stats_instrumentation) | 193 RenderingStatsInstrumentation* rendering_stats_instrumentation) |
| 194 : client_(client), | 194 : client_(client), |
| 195 proxy_(proxy), | 195 proxy_(proxy), |
| 196 input_handler_client_(NULL), | 196 input_handler_client_(NULL), |
| 197 did_lock_scrolling_layer_(false), | 197 did_lock_scrolling_layer_(false), |
| 198 should_bubble_scrolls_(false), | 198 should_bubble_scrolls_(false), |
| 199 wheel_scrolling_(false), | 199 wheel_scrolling_(false), |
| 200 manage_tiles_needed_(false), | 200 tile_priorities_dirty_(false), |
| 201 root_layer_scroll_offset_delegate_(NULL), | 201 root_layer_scroll_offset_delegate_(NULL), |
| 202 settings_(settings), | 202 settings_(settings), |
| 203 visible_(true), | 203 visible_(true), |
| 204 cached_managed_memory_policy_( | 204 cached_managed_memory_policy_( |
| 205 PrioritizedResourceManager::DefaultMemoryAllocationLimit(), | 205 PrioritizedResourceManager::DefaultMemoryAllocationLimit(), |
| 206 ManagedMemoryPolicy::CUTOFF_ALLOW_EVERYTHING, | 206 ManagedMemoryPolicy::CUTOFF_ALLOW_EVERYTHING, |
| 207 0, | 207 0, |
| 208 ManagedMemoryPolicy::CUTOFF_ALLOW_NOTHING, | 208 ManagedMemoryPolicy::CUTOFF_ALLOW_NOTHING, |
| 209 ManagedMemoryPolicy::kDefaultNumResourcesLimit), | 209 ManagedMemoryPolicy::kDefaultNumResourcesLimit), |
| 210 pinch_gesture_active_(false), | 210 pinch_gesture_active_(false), |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 272 TRACE_EVENT0("cc", "LayerTreeHostImpl::CommitComplete"); | 272 TRACE_EVENT0("cc", "LayerTreeHostImpl::CommitComplete"); |
| 273 | 273 |
| 274 if (settings_.impl_side_painting) { | 274 if (settings_.impl_side_painting) { |
| 275 // Impl-side painting needs an update immediately post-commit to have the | 275 // Impl-side painting needs an update immediately post-commit to have the |
| 276 // opportunity to create tilings. Other paths can call UpdateDrawProperties | 276 // opportunity to create tilings. Other paths can call UpdateDrawProperties |
| 277 // more lazily when needed prior to drawing. | 277 // more lazily when needed prior to drawing. |
| 278 pending_tree()->ApplyScrollDeltasSinceBeginFrame(); | 278 pending_tree()->ApplyScrollDeltasSinceBeginFrame(); |
| 279 pending_tree_->set_needs_update_draw_properties(); | 279 pending_tree_->set_needs_update_draw_properties(); |
| 280 pending_tree_->UpdateDrawProperties(); | 280 pending_tree_->UpdateDrawProperties(); |
| 281 // Start working on newly created tiles immediately if needed. | 281 // Start working on newly created tiles immediately if needed. |
| 282 if (!tile_manager_ || !manage_tiles_needed_) | 282 if (!tile_manager_ || !tile_priorities_dirty_) |
| 283 NotifyReadyToActivate(); | 283 NotifyReadyToActivate(); |
| 284 else | 284 else |
| 285 ManageTiles(); | 285 ManageTiles(); |
| 286 } else { | 286 } else { |
| 287 active_tree_->set_needs_update_draw_properties(); | 287 active_tree_->set_needs_update_draw_properties(); |
| 288 if (time_source_client_adapter_ && time_source_client_adapter_->Active()) | 288 if (time_source_client_adapter_ && time_source_client_adapter_->Active()) |
| 289 DCHECK(active_tree_->root_layer()); | 289 DCHECK(active_tree_->root_layer()); |
| 290 } | 290 } |
| 291 | 291 |
| 292 client_->SendManagedMemoryStats(); | 292 client_->SendManagedMemoryStats(); |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 350 input_handler_client_->Animate(monotonic_time); | 350 input_handler_client_->Animate(monotonic_time); |
| 351 AnimatePageScale(monotonic_time); | 351 AnimatePageScale(monotonic_time); |
| 352 AnimateLayers(monotonic_time, wall_clock_time); | 352 AnimateLayers(monotonic_time, wall_clock_time); |
| 353 AnimateScrollbars(monotonic_time); | 353 AnimateScrollbars(monotonic_time); |
| 354 AnimateTopControls(monotonic_time); | 354 AnimateTopControls(monotonic_time); |
| 355 } | 355 } |
| 356 | 356 |
| 357 void LayerTreeHostImpl::ManageTiles() { | 357 void LayerTreeHostImpl::ManageTiles() { |
| 358 if (!tile_manager_) | 358 if (!tile_manager_) |
| 359 return; | 359 return; |
| 360 if (!manage_tiles_needed_) | 360 if (!tile_priorities_dirty_) |
| 361 return; | 361 return; |
| 362 if (!device_viewport_valid_for_tile_management_) | 362 if (!device_viewport_valid_for_tile_management_) |
| 363 return; | 363 return; |
| 364 | 364 |
| 365 manage_tiles_needed_ = false; | 365 tile_priorities_dirty_ = false; |
| 366 tile_manager_->ManageTiles(); | 366 tile_manager_->ManageTiles(); |
| 367 | 367 |
| 368 size_t memory_required_bytes; | 368 size_t memory_required_bytes; |
| 369 size_t memory_nice_to_have_bytes; | 369 size_t memory_nice_to_have_bytes; |
| 370 size_t memory_allocated_bytes; | 370 size_t memory_allocated_bytes; |
| 371 size_t memory_used_bytes; | 371 size_t memory_used_bytes; |
| 372 tile_manager_->GetMemoryStats(&memory_required_bytes, | 372 tile_manager_->GetMemoryStats(&memory_required_bytes, |
| 373 &memory_nice_to_have_bytes, | 373 &memory_nice_to_have_bytes, |
| 374 &memory_allocated_bytes, | 374 &memory_allocated_bytes, |
| 375 &memory_used_bytes); | 375 &memory_used_bytes); |
| (...skipping 755 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1131 // possible. crbug.com/224475 | 1131 // possible. crbug.com/224475 |
| 1132 new_state.unused_memory_limit_in_bytes = static_cast<size_t>( | 1132 new_state.unused_memory_limit_in_bytes = static_cast<size_t>( |
| 1133 (static_cast<int64>(new_state.memory_limit_in_bytes) * | 1133 (static_cast<int64>(new_state.memory_limit_in_bytes) * |
| 1134 settings_.max_unused_resource_memory_percentage) / 100); | 1134 settings_.max_unused_resource_memory_percentage) / 100); |
| 1135 new_state.memory_limit_policy = | 1135 new_state.memory_limit_policy = |
| 1136 ManagedMemoryPolicy::PriorityCutoffToTileMemoryLimitPolicy( | 1136 ManagedMemoryPolicy::PriorityCutoffToTileMemoryLimitPolicy( |
| 1137 visible_ ? | 1137 visible_ ? |
| 1138 policy.priority_cutoff_when_visible : | 1138 policy.priority_cutoff_when_visible : |
| 1139 policy.priority_cutoff_when_not_visible); | 1139 policy.priority_cutoff_when_not_visible); |
| 1140 new_state.num_resources_limit = policy.num_resources_limit; | 1140 new_state.num_resources_limit = policy.num_resources_limit; |
| 1141 |
| 1141 tile_manager_->SetGlobalState(new_state); | 1142 tile_manager_->SetGlobalState(new_state); |
| 1142 manage_tiles_needed_ = true; | 1143 DidModifyTilePriorities(); |
| 1144 } |
| 1145 |
| 1146 void LayerTreeHostImpl::DidModifyTilePriorities() { |
| 1147 DCHECK(settings_.impl_side_painting); |
| 1148 // Mark priorities as dirty and schedule a ManageTiles(). |
| 1149 tile_priorities_dirty_ = true; |
| 1150 client_->SetNeedsManageTilesOnImplThread(); |
| 1143 } | 1151 } |
| 1144 | 1152 |
| 1145 void LayerTreeHostImpl::DidInitializeVisibleTile() { | 1153 void LayerTreeHostImpl::DidInitializeVisibleTile() { |
| 1146 // TODO(reveman): Determine tiles that changed and only damage | 1154 // TODO(reveman): Determine tiles that changed and only damage |
| 1147 // what's necessary. | 1155 // what's necessary. |
| 1148 SetFullRootLayerDamage(); | 1156 SetFullRootLayerDamage(); |
| 1149 if (client_) | 1157 if (client_) |
| 1150 client_->DidInitializeVisibleTileOnImplThread(); | 1158 client_->DidInitializeVisibleTileOnImplThread(); |
| 1151 } | 1159 } |
| 1152 | 1160 |
| (...skipping 1391 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2544 void LayerTreeHostImpl::SetTreePriority(TreePriority priority) { | 2552 void LayerTreeHostImpl::SetTreePriority(TreePriority priority) { |
| 2545 if (!tile_manager_) | 2553 if (!tile_manager_) |
| 2546 return; | 2554 return; |
| 2547 | 2555 |
| 2548 GlobalStateThatImpactsTilePriority new_state(tile_manager_->GlobalState()); | 2556 GlobalStateThatImpactsTilePriority new_state(tile_manager_->GlobalState()); |
| 2549 if (new_state.tree_priority == priority) | 2557 if (new_state.tree_priority == priority) |
| 2550 return; | 2558 return; |
| 2551 | 2559 |
| 2552 new_state.tree_priority = priority; | 2560 new_state.tree_priority = priority; |
| 2553 tile_manager_->SetGlobalState(new_state); | 2561 tile_manager_->SetGlobalState(new_state); |
| 2554 manage_tiles_needed_ = true; | 2562 DidModifyTilePriorities(); |
| 2555 } | 2563 } |
| 2556 | 2564 |
| 2557 void LayerTreeHostImpl::ResetCurrentFrameTimeForNextFrame() { | 2565 void LayerTreeHostImpl::ResetCurrentFrameTimeForNextFrame() { |
| 2558 current_frame_timeticks_ = base::TimeTicks(); | 2566 current_frame_timeticks_ = base::TimeTicks(); |
| 2559 current_frame_time_ = base::Time(); | 2567 current_frame_time_ = base::Time(); |
| 2560 } | 2568 } |
| 2561 | 2569 |
| 2562 void LayerTreeHostImpl::UpdateCurrentFrameTime(base::TimeTicks* ticks, | 2570 void LayerTreeHostImpl::UpdateCurrentFrameTime(base::TimeTicks* ticks, |
| 2563 base::Time* now) const { | 2571 base::Time* now) const { |
| 2564 if (ticks->is_null()) { | 2572 if (ticks->is_null()) { |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2696 std::set<UIResourceId>::iterator found_in_evicted = | 2704 std::set<UIResourceId>::iterator found_in_evicted = |
| 2697 evicted_ui_resources_.find(uid); | 2705 evicted_ui_resources_.find(uid); |
| 2698 if (found_in_evicted == evicted_ui_resources_.end()) | 2706 if (found_in_evicted == evicted_ui_resources_.end()) |
| 2699 return; | 2707 return; |
| 2700 evicted_ui_resources_.erase(found_in_evicted); | 2708 evicted_ui_resources_.erase(found_in_evicted); |
| 2701 if (evicted_ui_resources_.empty()) | 2709 if (evicted_ui_resources_.empty()) |
| 2702 client_->OnCanDrawStateChanged(CanDraw()); | 2710 client_->OnCanDrawStateChanged(CanDraw()); |
| 2703 } | 2711 } |
| 2704 | 2712 |
| 2705 } // namespace cc | 2713 } // namespace cc |
| OLD | NEW |