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 |