| 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 1036 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1047 } | 1047 } |
| 1048 } | 1048 } |
| 1049 | 1049 |
| 1050 bool LayerTreeHostImpl::PrepareToDraw(FrameData* frame, | 1050 bool LayerTreeHostImpl::PrepareToDraw(FrameData* frame, |
| 1051 gfx::Rect device_viewport_damage_rect) { | 1051 gfx::Rect device_viewport_damage_rect) { |
| 1052 TRACE_EVENT1("cc", | 1052 TRACE_EVENT1("cc", |
| 1053 "LayerTreeHostImpl::PrepareToDraw", | 1053 "LayerTreeHostImpl::PrepareToDraw", |
| 1054 "SourceFrameNumber", | 1054 "SourceFrameNumber", |
| 1055 active_tree_->source_frame_number()); | 1055 active_tree_->source_frame_number()); |
| 1056 | 1056 |
| 1057 if (need_to_update_visible_tiles_before_draw_) { | 1057 if (need_to_update_visible_tiles_before_draw_ && |
| 1058 DCHECK(tile_manager_); | 1058 tile_manager_ && tile_manager_->UpdateVisibleTiles()) { |
| 1059 if (tile_manager_->UpdateVisibleTiles()) | 1059 DidInitializeVisibleTile(); |
| 1060 DidInitializeVisibleTile(); | |
| 1061 } | 1060 } |
| 1061 need_to_update_visible_tiles_before_draw_ = true; |
| 1062 | 1062 |
| 1063 active_tree_->UpdateDrawProperties(); | 1063 active_tree_->UpdateDrawProperties(); |
| 1064 | 1064 |
| 1065 frame->render_surface_layer_list = &active_tree_->RenderSurfaceLayerList(); | 1065 frame->render_surface_layer_list = &active_tree_->RenderSurfaceLayerList(); |
| 1066 frame->render_passes.clear(); | 1066 frame->render_passes.clear(); |
| 1067 frame->render_passes_by_id.clear(); | 1067 frame->render_passes_by_id.clear(); |
| 1068 frame->will_draw_layers.clear(); | 1068 frame->will_draw_layers.clear(); |
| 1069 frame->contains_incomplete_tile = false; | 1069 frame->contains_incomplete_tile = false; |
| 1070 frame->has_no_damage = false; | 1070 frame->has_no_damage = false; |
| 1071 | 1071 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 1089 } | 1089 } |
| 1090 | 1090 |
| 1091 void LayerTreeHostImpl::EvictTexturesForTesting() { | 1091 void LayerTreeHostImpl::EvictTexturesForTesting() { |
| 1092 EnforceManagedMemoryPolicy(ManagedMemoryPolicy(0)); | 1092 EnforceManagedMemoryPolicy(ManagedMemoryPolicy(0)); |
| 1093 } | 1093 } |
| 1094 | 1094 |
| 1095 void LayerTreeHostImpl::BlockNotifyReadyToActivateForTesting(bool block) { | 1095 void LayerTreeHostImpl::BlockNotifyReadyToActivateForTesting(bool block) { |
| 1096 NOTREACHED(); | 1096 NOTREACHED(); |
| 1097 } | 1097 } |
| 1098 | 1098 |
| 1099 void LayerTreeHostImpl::DidInitializeVisibleTileForTesting() { |
| 1100 DidInitializeVisibleTile(); |
| 1101 } |
| 1102 |
| 1099 void LayerTreeHostImpl::EnforceManagedMemoryPolicy( | 1103 void LayerTreeHostImpl::EnforceManagedMemoryPolicy( |
| 1100 const ManagedMemoryPolicy& policy) { | 1104 const ManagedMemoryPolicy& policy) { |
| 1101 | 1105 |
| 1102 bool evicted_resources = client_->ReduceContentsTextureMemoryOnImplThread( | 1106 bool evicted_resources = client_->ReduceContentsTextureMemoryOnImplThread( |
| 1103 visible_ ? policy.bytes_limit_when_visible | 1107 visible_ ? policy.bytes_limit_when_visible |
| 1104 : policy.bytes_limit_when_not_visible, | 1108 : policy.bytes_limit_when_not_visible, |
| 1105 ManagedMemoryPolicy::PriorityCutoffToValue( | 1109 ManagedMemoryPolicy::PriorityCutoffToValue( |
| 1106 visible_ ? policy.priority_cutoff_when_visible | 1110 visible_ ? policy.priority_cutoff_when_visible |
| 1107 : policy.priority_cutoff_when_not_visible)); | 1111 : policy.priority_cutoff_when_not_visible)); |
| 1108 if (evicted_resources) { | 1112 if (evicted_resources) { |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1147 DCHECK(settings_.impl_side_painting); | 1151 DCHECK(settings_.impl_side_painting); |
| 1148 // Mark priorities as dirty and schedule a ManageTiles(). | 1152 // Mark priorities as dirty and schedule a ManageTiles(). |
| 1149 tile_priorities_dirty_ = true; | 1153 tile_priorities_dirty_ = true; |
| 1150 client_->SetNeedsManageTilesOnImplThread(); | 1154 client_->SetNeedsManageTilesOnImplThread(); |
| 1151 } | 1155 } |
| 1152 | 1156 |
| 1153 void LayerTreeHostImpl::DidInitializeVisibleTile() { | 1157 void LayerTreeHostImpl::DidInitializeVisibleTile() { |
| 1154 // TODO(reveman): Determine tiles that changed and only damage | 1158 // TODO(reveman): Determine tiles that changed and only damage |
| 1155 // what's necessary. | 1159 // what's necessary. |
| 1156 SetFullRootLayerDamage(); | 1160 SetFullRootLayerDamage(); |
| 1157 if (client_) | 1161 if (client_ && !client_->IsInsideDraw()) |
| 1158 client_->DidInitializeVisibleTileOnImplThread(); | 1162 client_->DidInitializeVisibleTileOnImplThread(); |
| 1159 } | 1163 } |
| 1160 | 1164 |
| 1161 void LayerTreeHostImpl::NotifyReadyToActivate() { | 1165 void LayerTreeHostImpl::NotifyReadyToActivate() { |
| 1162 client_->NotifyReadyToActivate(); | 1166 client_->NotifyReadyToActivate(); |
| 1163 } | 1167 } |
| 1164 | 1168 |
| 1165 void LayerTreeHostImpl::SetMemoryPolicy(const ManagedMemoryPolicy& policy) { | 1169 void LayerTreeHostImpl::SetMemoryPolicy(const ManagedMemoryPolicy& policy) { |
| 1166 SetManagedMemoryPolicy(policy, zero_budget_); | 1170 SetManagedMemoryPolicy(policy, zero_budget_); |
| 1167 } | 1171 } |
| (...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1495 recycle_tree_.swap(pending_tree_); | 1499 recycle_tree_.swap(pending_tree_); |
| 1496 else | 1500 else |
| 1497 pending_tree_ = LayerTreeImpl::create(this); | 1501 pending_tree_ = LayerTreeImpl::create(this); |
| 1498 client_->OnCanDrawStateChanged(CanDraw()); | 1502 client_->OnCanDrawStateChanged(CanDraw()); |
| 1499 TRACE_EVENT_ASYNC_BEGIN0("cc", "PendingTree", pending_tree_.get()); | 1503 TRACE_EVENT_ASYNC_BEGIN0("cc", "PendingTree", pending_tree_.get()); |
| 1500 TRACE_EVENT_ASYNC_STEP0("cc", | 1504 TRACE_EVENT_ASYNC_STEP0("cc", |
| 1501 "PendingTree", pending_tree_.get(), "waiting"); | 1505 "PendingTree", pending_tree_.get(), "waiting"); |
| 1502 } | 1506 } |
| 1503 | 1507 |
| 1504 void LayerTreeHostImpl::UpdateVisibleTiles() { | 1508 void LayerTreeHostImpl::UpdateVisibleTiles() { |
| 1505 DCHECK(!client_->IsInsideDraw()) << | |
| 1506 "Updating visible tiles within a draw may trigger " | |
| 1507 "spurious redraws."; | |
| 1508 if (tile_manager_ && tile_manager_->UpdateVisibleTiles()) | 1509 if (tile_manager_ && tile_manager_->UpdateVisibleTiles()) |
| 1509 DidInitializeVisibleTile(); | 1510 DidInitializeVisibleTile(); |
| 1510 | |
| 1511 need_to_update_visible_tiles_before_draw_ = false; | 1511 need_to_update_visible_tiles_before_draw_ = false; |
| 1512 } | 1512 } |
| 1513 | 1513 |
| 1514 void LayerTreeHostImpl::ActivatePendingTree() { | 1514 void LayerTreeHostImpl::ActivatePendingTree() { |
| 1515 CHECK(pending_tree_); | 1515 CHECK(pending_tree_); |
| 1516 TRACE_EVENT_ASYNC_END0("cc", "PendingTree", pending_tree_.get()); | 1516 TRACE_EVENT_ASYNC_END0("cc", "PendingTree", pending_tree_.get()); |
| 1517 | 1517 |
| 1518 need_to_update_visible_tiles_before_draw_ = true; | 1518 need_to_update_visible_tiles_before_draw_ = true; |
| 1519 | 1519 |
| 1520 active_tree_->SetRootLayerScrollOffsetDelegate(NULL); | 1520 active_tree_->SetRootLayerScrollOffsetDelegate(NULL); |
| (...skipping 1186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2707 std::set<UIResourceId>::iterator found_in_evicted = | 2707 std::set<UIResourceId>::iterator found_in_evicted = |
| 2708 evicted_ui_resources_.find(uid); | 2708 evicted_ui_resources_.find(uid); |
| 2709 if (found_in_evicted == evicted_ui_resources_.end()) | 2709 if (found_in_evicted == evicted_ui_resources_.end()) |
| 2710 return; | 2710 return; |
| 2711 evicted_ui_resources_.erase(found_in_evicted); | 2711 evicted_ui_resources_.erase(found_in_evicted); |
| 2712 if (evicted_ui_resources_.empty()) | 2712 if (evicted_ui_resources_.empty()) |
| 2713 client_->OnCanDrawStateChanged(CanDraw()); | 2713 client_->OnCanDrawStateChanged(CanDraw()); |
| 2714 } | 2714 } |
| 2715 | 2715 |
| 2716 } // namespace cc | 2716 } // namespace cc |
| OLD | NEW |