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 1148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1159 client_->SendManagedMemoryStats(); | 1159 client_->SendManagedMemoryStats(); |
1160 | 1160 |
1161 UpdateTileManagerMemoryPolicy(policy); | 1161 UpdateTileManagerMemoryPolicy(policy); |
1162 } | 1162 } |
1163 | 1163 |
1164 void LayerTreeHostImpl::UpdateTileManagerMemoryPolicy( | 1164 void LayerTreeHostImpl::UpdateTileManagerMemoryPolicy( |
1165 const ManagedMemoryPolicy& policy) { | 1165 const ManagedMemoryPolicy& policy) { |
1166 if (!tile_manager_) | 1166 if (!tile_manager_) |
1167 return; | 1167 return; |
1168 | 1168 |
1169 // TODO(reveman): We should avoid keeping around unused resources if | |
1170 // possible. crbug.com/224475 | |
1171 global_tile_state_.hard_memory_limit_in_bytes = 0; | 1169 global_tile_state_.hard_memory_limit_in_bytes = 0; |
1172 global_tile_state_.soft_memory_limit_in_bytes = 0; | 1170 global_tile_state_.soft_memory_limit_in_bytes = 0; |
1173 if (visible_ && policy.bytes_limit_when_visible > 0) { | 1171 if (visible_ && policy.bytes_limit_when_visible > 0) { |
1174 global_tile_state_.hard_memory_limit_in_bytes = | 1172 global_tile_state_.hard_memory_limit_in_bytes = |
1175 policy.bytes_limit_when_visible; | 1173 policy.bytes_limit_when_visible; |
1176 global_tile_state_.soft_memory_limit_in_bytes = | 1174 global_tile_state_.soft_memory_limit_in_bytes = |
1177 (static_cast<int64>(global_tile_state_.hard_memory_limit_in_bytes) * | 1175 (static_cast<int64>(global_tile_state_.hard_memory_limit_in_bytes) * |
1178 settings_.max_memory_for_prepaint_percentage) / | 1176 settings_.max_memory_for_prepaint_percentage) / |
1179 100; | 1177 100; |
1180 } | 1178 } |
1181 // Unused limit is calculated from soft-limit, as hard-limit may | |
1182 // be very high and shouldn't typically be exceeded. | |
1183 global_tile_state_.unused_memory_limit_in_bytes = static_cast<size_t>( | |
1184 (static_cast<int64>(global_tile_state_.soft_memory_limit_in_bytes) * | |
1185 settings_.max_unused_resource_memory_percentage) / | |
1186 100); | |
1187 global_tile_state_.memory_limit_policy = | 1179 global_tile_state_.memory_limit_policy = |
1188 ManagedMemoryPolicy::PriorityCutoffToTileMemoryLimitPolicy( | 1180 ManagedMemoryPolicy::PriorityCutoffToTileMemoryLimitPolicy( |
1189 visible_ ? | 1181 visible_ ? |
1190 policy.priority_cutoff_when_visible : | 1182 policy.priority_cutoff_when_visible : |
1191 gpu::MemoryAllocation::CUTOFF_ALLOW_NOTHING); | 1183 gpu::MemoryAllocation::CUTOFF_ALLOW_NOTHING); |
1192 global_tile_state_.num_resources_limit = policy.num_resources_limit; | 1184 global_tile_state_.num_resources_limit = policy.num_resources_limit; |
1193 | 1185 |
| 1186 // TODO(reveman): We should avoid keeping around unused resources if |
| 1187 // possible. crbug.com/224475 |
| 1188 // Unused limit is calculated from soft-limit, as hard-limit may |
| 1189 // be very high and shouldn't typically be exceeded. |
| 1190 size_t unused_memory_limit_in_bytes = static_cast<size_t>( |
| 1191 (static_cast<int64>(global_tile_state_.soft_memory_limit_in_bytes) * |
| 1192 settings_.max_unused_resource_memory_percentage) / |
| 1193 100); |
| 1194 |
1194 DCHECK(resource_pool_); | 1195 DCHECK(resource_pool_); |
1195 resource_pool_->CheckBusyResources(); | 1196 resource_pool_->CheckBusyResources(); |
1196 // Soft limit is used for resource pool such that memory returns to soft | 1197 // Soft limit is used for resource pool such that memory returns to soft |
1197 // limit after going over. | 1198 // limit after going over. |
1198 resource_pool_->SetResourceUsageLimits( | 1199 resource_pool_->SetResourceUsageLimits( |
1199 global_tile_state_.soft_memory_limit_in_bytes, | 1200 global_tile_state_.soft_memory_limit_in_bytes, |
1200 global_tile_state_.unused_memory_limit_in_bytes, | 1201 unused_memory_limit_in_bytes, |
1201 global_tile_state_.num_resources_limit); | 1202 global_tile_state_.num_resources_limit); |
1202 | 1203 |
1203 DidModifyTilePriorities(); | 1204 DidModifyTilePriorities(); |
1204 } | 1205 } |
1205 | 1206 |
1206 void LayerTreeHostImpl::DidModifyTilePriorities() { | 1207 void LayerTreeHostImpl::DidModifyTilePriorities() { |
1207 DCHECK(settings_.impl_side_painting); | 1208 DCHECK(settings_.impl_side_painting); |
1208 // Mark priorities as dirty and schedule a ManageTiles(). | 1209 // Mark priorities as dirty and schedule a ManageTiles(). |
1209 tile_priorities_dirty_ = true; | 1210 tile_priorities_dirty_ = true; |
1210 client_->SetNeedsManageTilesOnImplThread(); | 1211 client_->SetNeedsManageTilesOnImplThread(); |
(...skipping 1911 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3122 swap_promise_monitor_.erase(monitor); | 3123 swap_promise_monitor_.erase(monitor); |
3123 } | 3124 } |
3124 | 3125 |
3125 void LayerTreeHostImpl::NotifySwapPromiseMonitorsOfSetNeedsRedraw() { | 3126 void LayerTreeHostImpl::NotifySwapPromiseMonitorsOfSetNeedsRedraw() { |
3126 std::set<SwapPromiseMonitor*>::iterator it = swap_promise_monitor_.begin(); | 3127 std::set<SwapPromiseMonitor*>::iterator it = swap_promise_monitor_.begin(); |
3127 for (; it != swap_promise_monitor_.end(); it++) | 3128 for (; it != swap_promise_monitor_.end(); it++) |
3128 (*it)->OnSetNeedsRedrawOnImpl(); | 3129 (*it)->OnSetNeedsRedrawOnImpl(); |
3129 } | 3130 } |
3130 | 3131 |
3131 } // namespace cc | 3132 } // namespace cc |
OLD | NEW |