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 326 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1494 recycle_tree_.swap(pending_tree_); | 1498 recycle_tree_.swap(pending_tree_); |
1495 else | 1499 else |
1496 pending_tree_ = LayerTreeImpl::create(this); | 1500 pending_tree_ = LayerTreeImpl::create(this); |
1497 client_->OnCanDrawStateChanged(CanDraw()); | 1501 client_->OnCanDrawStateChanged(CanDraw()); |
1498 TRACE_EVENT_ASYNC_BEGIN0("cc", "PendingTree", pending_tree_.get()); | 1502 TRACE_EVENT_ASYNC_BEGIN0("cc", "PendingTree", pending_tree_.get()); |
1499 TRACE_EVENT_ASYNC_STEP0("cc", | 1503 TRACE_EVENT_ASYNC_STEP0("cc", |
1500 "PendingTree", pending_tree_.get(), "waiting"); | 1504 "PendingTree", pending_tree_.get(), "waiting"); |
1501 } | 1505 } |
1502 | 1506 |
1503 void LayerTreeHostImpl::UpdateVisibleTiles() { | 1507 void LayerTreeHostImpl::UpdateVisibleTiles() { |
1504 DCHECK(!client_->IsInsideDraw()) << | |
1505 "Updating visible tiles within a draw may trigger " | |
1506 "spurious redraws."; | |
1507 if (tile_manager_ && tile_manager_->UpdateVisibleTiles()) | 1508 if (tile_manager_ && tile_manager_->UpdateVisibleTiles()) |
1508 DidInitializeVisibleTile(); | 1509 DidInitializeVisibleTile(); |
1509 | |
1510 need_to_update_visible_tiles_before_draw_ = false; | 1510 need_to_update_visible_tiles_before_draw_ = false; |
1511 } | 1511 } |
1512 | 1512 |
1513 void LayerTreeHostImpl::ActivatePendingTree() { | 1513 void LayerTreeHostImpl::ActivatePendingTree() { |
1514 CHECK(pending_tree_); | 1514 CHECK(pending_tree_); |
1515 TRACE_EVENT_ASYNC_END0("cc", "PendingTree", pending_tree_.get()); | 1515 TRACE_EVENT_ASYNC_END0("cc", "PendingTree", pending_tree_.get()); |
1516 | 1516 |
1517 need_to_update_visible_tiles_before_draw_ = true; | 1517 need_to_update_visible_tiles_before_draw_ = true; |
1518 | 1518 |
1519 active_tree_->SetRootLayerScrollOffsetDelegate(NULL); | 1519 active_tree_->SetRootLayerScrollOffsetDelegate(NULL); |
(...skipping 1184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2704 std::set<UIResourceId>::iterator found_in_evicted = | 2704 std::set<UIResourceId>::iterator found_in_evicted = |
2705 evicted_ui_resources_.find(uid); | 2705 evicted_ui_resources_.find(uid); |
2706 if (found_in_evicted == evicted_ui_resources_.end()) | 2706 if (found_in_evicted == evicted_ui_resources_.end()) |
2707 return; | 2707 return; |
2708 evicted_ui_resources_.erase(found_in_evicted); | 2708 evicted_ui_resources_.erase(found_in_evicted); |
2709 if (evicted_ui_resources_.empty()) | 2709 if (evicted_ui_resources_.empty()) |
2710 client_->OnCanDrawStateChanged(CanDraw()); | 2710 client_->OnCanDrawStateChanged(CanDraw()); |
2711 } | 2711 } |
2712 | 2712 |
2713 } // namespace cc | 2713 } // namespace cc |
OLD | NEW |