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

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

Issue 53633003: Do not give GPU memory to backgrounded compositors. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remove test Created 7 years, 1 month 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 #include <limits> 8 #include <limits>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 last_scroll_did_bubble_(false), 201 last_scroll_did_bubble_(false),
202 wheel_scrolling_(false), 202 wheel_scrolling_(false),
203 scroll_layer_id_when_mouse_over_scrollbar_(0), 203 scroll_layer_id_when_mouse_over_scrollbar_(0),
204 tile_priorities_dirty_(false), 204 tile_priorities_dirty_(false),
205 root_layer_scroll_offset_delegate_(NULL), 205 root_layer_scroll_offset_delegate_(NULL),
206 settings_(settings), 206 settings_(settings),
207 visible_(true), 207 visible_(true),
208 cached_managed_memory_policy_( 208 cached_managed_memory_policy_(
209 PrioritizedResourceManager::DefaultMemoryAllocationLimit(), 209 PrioritizedResourceManager::DefaultMemoryAllocationLimit(),
210 gpu::MemoryAllocation::CUTOFF_ALLOW_EVERYTHING, 210 gpu::MemoryAllocation::CUTOFF_ALLOW_EVERYTHING,
211 0,
212 gpu::MemoryAllocation::CUTOFF_ALLOW_NOTHING,
213 ManagedMemoryPolicy::kDefaultNumResourcesLimit), 211 ManagedMemoryPolicy::kDefaultNumResourcesLimit),
214 pinch_gesture_active_(false), 212 pinch_gesture_active_(false),
215 pinch_gesture_end_should_clear_scrolling_layer_(false), 213 pinch_gesture_end_should_clear_scrolling_layer_(false),
216 fps_counter_(FrameRateCounter::Create(proxy_->HasImplThread())), 214 fps_counter_(FrameRateCounter::Create(proxy_->HasImplThread())),
217 paint_time_counter_(PaintTimeCounter::Create()), 215 paint_time_counter_(PaintTimeCounter::Create()),
218 memory_history_(MemoryHistory::Create()), 216 memory_history_(MemoryHistory::Create()),
219 debug_rect_history_(DebugRectHistory::Create()), 217 debug_rect_history_(DebugRectHistory::Create()),
220 texture_mailbox_deleter_(new TextureMailboxDeleter), 218 texture_mailbox_deleter_(new TextureMailboxDeleter),
221 max_memory_needed_bytes_(0), 219 max_memory_needed_bytes_(0),
222 last_sent_memory_visible_bytes_(0), 220 last_sent_memory_visible_bytes_(0),
(...skipping 836 matching lines...) Expand 10 before | Expand all | Expand 10 after
1059 } 1057 }
1060 1058
1061 void LayerTreeHostImpl::DidInitializeVisibleTileForTesting() { 1059 void LayerTreeHostImpl::DidInitializeVisibleTileForTesting() {
1062 DidInitializeVisibleTile(); 1060 DidInitializeVisibleTile();
1063 } 1061 }
1064 1062
1065 void LayerTreeHostImpl::EnforceManagedMemoryPolicy( 1063 void LayerTreeHostImpl::EnforceManagedMemoryPolicy(
1066 const ManagedMemoryPolicy& policy) { 1064 const ManagedMemoryPolicy& policy) {
1067 1065
1068 bool evicted_resources = client_->ReduceContentsTextureMemoryOnImplThread( 1066 bool evicted_resources = client_->ReduceContentsTextureMemoryOnImplThread(
1069 visible_ ? policy.bytes_limit_when_visible 1067 visible_ ? policy.bytes_limit_when_visible : 0,
1070 : policy.bytes_limit_when_not_visible,
1071 ManagedMemoryPolicy::PriorityCutoffToValue( 1068 ManagedMemoryPolicy::PriorityCutoffToValue(
1072 visible_ ? policy.priority_cutoff_when_visible 1069 visible_ ? policy.priority_cutoff_when_visible
1073 : policy.priority_cutoff_when_not_visible)); 1070 : gpu::MemoryAllocation::CUTOFF_ALLOW_NOTHING));
1074 if (evicted_resources) { 1071 if (evicted_resources) {
1075 active_tree_->SetContentsTexturesPurged(); 1072 active_tree_->SetContentsTexturesPurged();
1076 if (pending_tree_) 1073 if (pending_tree_)
1077 pending_tree_->SetContentsTexturesPurged(); 1074 pending_tree_->SetContentsTexturesPurged();
1078 client_->SetNeedsCommitOnImplThread(); 1075 client_->SetNeedsCommitOnImplThread();
1079 client_->OnCanDrawStateChanged(CanDraw()); 1076 client_->OnCanDrawStateChanged(CanDraw());
1080 client_->RenewTreePriority(); 1077 client_->RenewTreePriority();
1081 } 1078 }
1082 client_->SendManagedMemoryStats(); 1079 client_->SendManagedMemoryStats();
1083 1080
1084 UpdateTileManagerMemoryPolicy(policy); 1081 UpdateTileManagerMemoryPolicy(policy);
1085 } 1082 }
1086 1083
1087 void LayerTreeHostImpl::UpdateTileManagerMemoryPolicy( 1084 void LayerTreeHostImpl::UpdateTileManagerMemoryPolicy(
1088 const ManagedMemoryPolicy& policy) { 1085 const ManagedMemoryPolicy& policy) {
1089 if (!tile_manager_) 1086 if (!tile_manager_)
1090 return; 1087 return;
1091 1088
1092 // TODO(reveman): We should avoid keeping around unused resources if 1089 // TODO(reveman): We should avoid keeping around unused resources if
1093 // possible. crbug.com/224475 1090 // possible. crbug.com/224475
1094 global_tile_state_.memory_limit_in_bytes = 1091 global_tile_state_.memory_limit_in_bytes =
1095 visible_ ? 1092 visible_ ?
1096 policy.bytes_limit_when_visible : 1093 policy.bytes_limit_when_visible : 0;
1097 policy.bytes_limit_when_not_visible;
1098 global_tile_state_.unused_memory_limit_in_bytes = static_cast<size_t>( 1094 global_tile_state_.unused_memory_limit_in_bytes = static_cast<size_t>(
1099 (static_cast<int64>(global_tile_state_.memory_limit_in_bytes) * 1095 (static_cast<int64>(global_tile_state_.memory_limit_in_bytes) *
1100 settings_.max_unused_resource_memory_percentage) / 100); 1096 settings_.max_unused_resource_memory_percentage) / 100);
1101 global_tile_state_.memory_limit_policy = 1097 global_tile_state_.memory_limit_policy =
1102 ManagedMemoryPolicy::PriorityCutoffToTileMemoryLimitPolicy( 1098 ManagedMemoryPolicy::PriorityCutoffToTileMemoryLimitPolicy(
1103 visible_ ? 1099 visible_ ?
1104 policy.priority_cutoff_when_visible : 1100 policy.priority_cutoff_when_visible :
1105 policy.priority_cutoff_when_not_visible); 1101 gpu::MemoryAllocation::CUTOFF_ALLOW_NOTHING);
1106 global_tile_state_.num_resources_limit = policy.num_resources_limit; 1102 global_tile_state_.num_resources_limit = policy.num_resources_limit;
1107 1103
1108 DidModifyTilePriorities(); 1104 DidModifyTilePriorities();
1109 } 1105 }
1110 1106
1111 void LayerTreeHostImpl::DidModifyTilePriorities() { 1107 void LayerTreeHostImpl::DidModifyTilePriorities() {
1112 DCHECK(settings_.impl_side_painting); 1108 DCHECK(settings_.impl_side_painting);
1113 // Mark priorities as dirty and schedule a ManageTiles(). 1109 // Mark priorities as dirty and schedule a ManageTiles().
1114 tile_priorities_dirty_ = true; 1110 tile_priorities_dirty_ = true;
1115 client_->SetNeedsManageTilesOnImplThread(); 1111 client_->SetNeedsManageTilesOnImplThread();
1116 } 1112 }
1117 1113
1118 void LayerTreeHostImpl::DidInitializeVisibleTile() { 1114 void LayerTreeHostImpl::DidInitializeVisibleTile() {
1119 // TODO(reveman): Determine tiles that changed and only damage 1115 // TODO(reveman): Determine tiles that changed and only damage
1120 // what's necessary. 1116 // what's necessary.
1121 SetFullRootLayerDamage(); 1117 SetFullRootLayerDamage();
1122 if (client_ && !client_->IsInsideDraw()) 1118 if (client_ && !client_->IsInsideDraw())
1123 client_->DidInitializeVisibleTileOnImplThread(); 1119 client_->DidInitializeVisibleTileOnImplThread();
1124 } 1120 }
1125 1121
1126 void LayerTreeHostImpl::NotifyReadyToActivate() { 1122 void LayerTreeHostImpl::NotifyReadyToActivate() {
1127 client_->NotifyReadyToActivate(); 1123 client_->NotifyReadyToActivate();
1128 } 1124 }
1129 1125
1130 void LayerTreeHostImpl::SetMemoryPolicy(const ManagedMemoryPolicy& policy) { 1126 void LayerTreeHostImpl::SetMemoryPolicy(const ManagedMemoryPolicy& policy) {
1131 SetManagedMemoryPolicy(policy, zero_budget_); 1127 SetManagedMemoryPolicy(policy, zero_budget_);
1132 } 1128 }
1133 1129
1134 void LayerTreeHostImpl::SetDiscardBackBufferWhenNotVisible(bool discard) {
1135 DCHECK(renderer_);
1136 renderer_->SetDiscardBackBufferWhenNotVisible(discard);
1137 }
1138
1139 void LayerTreeHostImpl::SetTreeActivationCallback( 1130 void LayerTreeHostImpl::SetTreeActivationCallback(
1140 const base::Closure& callback) { 1131 const base::Closure& callback) {
1141 DCHECK(proxy_->IsImplThread()); 1132 DCHECK(proxy_->IsImplThread());
1142 DCHECK(settings_.impl_side_painting || callback.is_null()); 1133 DCHECK(settings_.impl_side_painting || callback.is_null());
1143 tree_activation_callback_ = callback; 1134 tree_activation_callback_ = callback;
1144 } 1135 }
1145 1136
1146 void LayerTreeHostImpl::SetManagedMemoryPolicy( 1137 void LayerTreeHostImpl::SetManagedMemoryPolicy(
1147 const ManagedMemoryPolicy& policy, bool zero_budget) { 1138 const ManagedMemoryPolicy& policy, bool zero_budget) {
1148 if (cached_managed_memory_policy_ == policy && zero_budget_ == zero_budget) 1139 if (cached_managed_memory_policy_ == policy && zero_budget_ == zero_budget)
(...skipping 404 matching lines...) Expand 10 before | Expand all | Expand 10 after
1553 1544
1554 if (!renderer_) 1545 if (!renderer_)
1555 return; 1546 return;
1556 1547
1557 renderer_->SetVisible(visible); 1548 renderer_->SetVisible(visible);
1558 } 1549 }
1559 1550
1560 ManagedMemoryPolicy LayerTreeHostImpl::ActualManagedMemoryPolicy() const { 1551 ManagedMemoryPolicy LayerTreeHostImpl::ActualManagedMemoryPolicy() const {
1561 ManagedMemoryPolicy actual = cached_managed_memory_policy_; 1552 ManagedMemoryPolicy actual = cached_managed_memory_policy_;
1562 if (debug_state_.rasterize_only_visible_content) { 1553 if (debug_state_.rasterize_only_visible_content) {
1563 actual.priority_cutoff_when_not_visible =
1564 gpu::MemoryAllocation::CUTOFF_ALLOW_NOTHING;
1565 actual.priority_cutoff_when_visible = 1554 actual.priority_cutoff_when_visible =
1566 gpu::MemoryAllocation::CUTOFF_ALLOW_REQUIRED_ONLY; 1555 gpu::MemoryAllocation::CUTOFF_ALLOW_REQUIRED_ONLY;
1567 } 1556 }
1568 1557
1569 if (zero_budget_) { 1558 if (zero_budget_) {
1570 actual.bytes_limit_when_visible = 0; 1559 actual.bytes_limit_when_visible = 0;
1571 actual.bytes_limit_when_not_visible = 0;
1572 } 1560 }
1573 1561
1574 return actual; 1562 return actual;
1575 } 1563 }
1576 1564
1577 size_t LayerTreeHostImpl::memory_allocation_limit_bytes() const { 1565 size_t LayerTreeHostImpl::memory_allocation_limit_bytes() const {
1578 return ActualManagedMemoryPolicy().bytes_limit_when_visible; 1566 return ActualManagedMemoryPolicy().bytes_limit_when_visible;
1579 } 1567 }
1580 1568
1581 int LayerTreeHostImpl::memory_allocation_priority_cutoff() const { 1569 int LayerTreeHostImpl::memory_allocation_priority_cutoff() const {
(...skipping 1231 matching lines...) Expand 10 before | Expand all | Expand 10 after
2813 std::set<UIResourceId>::iterator found_in_evicted = 2801 std::set<UIResourceId>::iterator found_in_evicted =
2814 evicted_ui_resources_.find(uid); 2802 evicted_ui_resources_.find(uid);
2815 if (found_in_evicted == evicted_ui_resources_.end()) 2803 if (found_in_evicted == evicted_ui_resources_.end())
2816 return; 2804 return;
2817 evicted_ui_resources_.erase(found_in_evicted); 2805 evicted_ui_resources_.erase(found_in_evicted);
2818 if (evicted_ui_resources_.empty()) 2806 if (evicted_ui_resources_.empty())
2819 client_->OnCanDrawStateChanged(CanDraw()); 2807 client_->OnCanDrawStateChanged(CanDraw());
2820 } 2808 }
2821 2809
2822 } // namespace cc 2810 } // 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