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 1226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1237 // Mark priorities as dirty and schedule a ManageTiles(). | 1237 // Mark priorities as dirty and schedule a ManageTiles(). |
1238 tile_priorities_dirty_ = true; | 1238 tile_priorities_dirty_ = true; |
1239 client_->SetNeedsManageTilesOnImplThread(); | 1239 client_->SetNeedsManageTilesOnImplThread(); |
1240 } | 1240 } |
1241 | 1241 |
1242 void LayerTreeHostImpl::DidInitializeVisibleTile() { | 1242 void LayerTreeHostImpl::DidInitializeVisibleTile() { |
1243 if (client_ && !client_->IsInsideDraw()) | 1243 if (client_ && !client_->IsInsideDraw()) |
1244 client_->DidInitializeVisibleTileOnImplThread(); | 1244 client_->DidInitializeVisibleTileOnImplThread(); |
1245 } | 1245 } |
1246 | 1246 |
1247 const std::vector<PictureLayerImpl*>& LayerTreeHostImpl::GetPictureLayers() { | 1247 const std::vector<PictureLayerImpl*>& LayerTreeHostImpl::GetPictureLayers() |
| 1248 const { |
1248 return picture_layers_; | 1249 return picture_layers_; |
1249 } | 1250 } |
1250 | 1251 |
1251 void LayerTreeHostImpl::NotifyReadyToActivate() { | 1252 void LayerTreeHostImpl::NotifyReadyToActivate() { |
1252 client_->NotifyReadyToActivate(); | 1253 client_->NotifyReadyToActivate(); |
1253 } | 1254 } |
1254 | 1255 |
1255 void LayerTreeHostImpl::NotifyTileStateChanged(const Tile* tile) { | 1256 void LayerTreeHostImpl::NotifyTileStateChanged(const Tile* tile) { |
1256 TRACE_EVENT0("cc", "LayerTreeHostImpl::NotifyTileStateChanged"); | 1257 TRACE_EVENT0("cc", "LayerTreeHostImpl::NotifyTileStateChanged"); |
1257 | 1258 |
1258 if (active_tree_) { | 1259 if (active_tree_) { |
1259 LayerImpl* layer_impl = | 1260 LayerImpl* layer_impl = |
1260 active_tree_->FindActiveTreeLayerById(tile->layer_id()); | 1261 active_tree_->FindActiveTreeLayerById(tile->layer_id()); |
1261 if (layer_impl) | 1262 if (layer_impl) |
1262 layer_impl->NotifyTileStateChanged(tile); | 1263 layer_impl->NotifyTileStateChanged(tile); |
1263 } | 1264 } |
1264 | 1265 |
1265 if (pending_tree_) { | 1266 if (pending_tree_) { |
1266 LayerImpl* layer_impl = | 1267 LayerImpl* layer_impl = |
1267 pending_tree_->FindPendingTreeLayerById(tile->layer_id()); | 1268 pending_tree_->FindPendingTreeLayerById(tile->layer_id()); |
1268 if (layer_impl) | 1269 if (layer_impl) |
1269 layer_impl->NotifyTileStateChanged(tile); | 1270 layer_impl->NotifyTileStateChanged(tile); |
1270 } | 1271 } |
1271 } | 1272 } |
1272 | 1273 |
| 1274 TilePriorityQueue* LayerTreeHostImpl::RebuildRasterQueue( |
| 1275 TreePriority tree_priority) { |
| 1276 // TODO(vmpstr): Investigate if we can skip preparation if nothing changed |
| 1277 // (priorities, etc) |
| 1278 std::vector<PairedPictureLayer> paired_layers; |
| 1279 GetPairedPictureLayers(&paired_layers); |
| 1280 raster_queue_.Prepare(paired_layers, tree_priority); |
| 1281 return &raster_queue_; |
| 1282 } |
| 1283 |
| 1284 TilePriorityQueue* LayerTreeHostImpl::RebuildEvictionQueue( |
| 1285 TreePriority tree_priority) { |
| 1286 // TODO(vmpstr): Investigate if we can skip preparation if nothing changed |
| 1287 // (priorities, etc) |
| 1288 std::vector<PairedPictureLayer> paired_layers; |
| 1289 GetPairedPictureLayers(&paired_layers); |
| 1290 eviction_queue_.Prepare(paired_layers, tree_priority); |
| 1291 return &eviction_queue_; |
| 1292 } |
| 1293 |
1273 void LayerTreeHostImpl::SetMemoryPolicy(const ManagedMemoryPolicy& policy) { | 1294 void LayerTreeHostImpl::SetMemoryPolicy(const ManagedMemoryPolicy& policy) { |
1274 SetManagedMemoryPolicy(policy, zero_budget_); | 1295 SetManagedMemoryPolicy(policy, zero_budget_); |
1275 } | 1296 } |
1276 | 1297 |
1277 void LayerTreeHostImpl::SetTreeActivationCallback( | 1298 void LayerTreeHostImpl::SetTreeActivationCallback( |
1278 const base::Closure& callback) { | 1299 const base::Closure& callback) { |
1279 DCHECK(proxy_->IsImplThread()); | 1300 DCHECK(proxy_->IsImplThread()); |
1280 DCHECK(settings_.impl_side_painting || callback.is_null()); | 1301 DCHECK(settings_.impl_side_painting || callback.is_null()); |
1281 tree_activation_callback_ = callback; | 1302 tree_activation_callback_ = callback; |
1282 } | 1303 } |
(...skipping 707 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1990 bool LayerTreeHostImpl::UseOneCopyTextureUpload() const { | 2011 bool LayerTreeHostImpl::UseOneCopyTextureUpload() const { |
1991 // Sync query support is required by one-copy rasterizer. | 2012 // Sync query support is required by one-copy rasterizer. |
1992 return settings_.use_one_copy && GetRendererCapabilities().using_map_image && | 2013 return settings_.use_one_copy && GetRendererCapabilities().using_map_image && |
1993 resource_provider_->use_sync_query(); | 2014 resource_provider_->use_sync_query(); |
1994 } | 2015 } |
1995 | 2016 |
1996 void LayerTreeHostImpl::EnforceZeroBudget(bool zero_budget) { | 2017 void LayerTreeHostImpl::EnforceZeroBudget(bool zero_budget) { |
1997 SetManagedMemoryPolicy(cached_managed_memory_policy_, zero_budget); | 2018 SetManagedMemoryPolicy(cached_managed_memory_policy_, zero_budget); |
1998 } | 2019 } |
1999 | 2020 |
| 2021 void LayerTreeHostImpl::GetPairedPictureLayers( |
| 2022 std::vector<PairedPictureLayer>* paired_layers) const { |
| 2023 const std::vector<PictureLayerImpl*>& layers = GetPictureLayers(); |
| 2024 |
| 2025 paired_layers->clear(); |
| 2026 // Reserve a maximum possible paired layers. |
| 2027 paired_layers->reserve(layers.size()); |
| 2028 |
| 2029 for (std::vector<PictureLayerImpl*>::const_iterator it = layers.begin(); |
| 2030 it != layers.end(); |
| 2031 ++it) { |
| 2032 PictureLayerImpl* layer = *it; |
| 2033 |
| 2034 // TODO(vmpstr): Iterators and should handle this instead. crbug.com/381704 |
| 2035 if (!layer->HasValidTilePriorities()) |
| 2036 continue; |
| 2037 |
| 2038 PictureLayerImpl* twin_layer = layer->GetTwinLayer(); |
| 2039 |
| 2040 // Ignore the twin layer when tile priorities are invalid. |
| 2041 // TODO(vmpstr): Iterators should handle this instead. crbug.com/381704 |
| 2042 if (twin_layer && !twin_layer->HasValidTilePriorities()) |
| 2043 twin_layer = NULL; |
| 2044 |
| 2045 PairedPictureLayer paired_layer; |
| 2046 WhichTree tree = layer->GetTree(); |
| 2047 |
| 2048 // If the current tree is ACTIVE_TREE, then always generate a paired_layer. |
| 2049 // If current tree is PENDING_TREE, then only generate a paired_layer if |
| 2050 // there is no twin layer. |
| 2051 if (tree == ACTIVE_TREE) { |
| 2052 DCHECK(!twin_layer || twin_layer->GetTree() == PENDING_TREE); |
| 2053 paired_layer.active_layer = layer; |
| 2054 paired_layer.pending_layer = twin_layer; |
| 2055 paired_layers->push_back(paired_layer); |
| 2056 } else if (!twin_layer) { |
| 2057 paired_layer.active_layer = NULL; |
| 2058 paired_layer.pending_layer = layer; |
| 2059 paired_layers->push_back(paired_layer); |
| 2060 } |
| 2061 } |
| 2062 } |
| 2063 |
2000 bool LayerTreeHostImpl::InitializeRenderer( | 2064 bool LayerTreeHostImpl::InitializeRenderer( |
2001 scoped_ptr<OutputSurface> output_surface) { | 2065 scoped_ptr<OutputSurface> output_surface) { |
2002 TRACE_EVENT0("cc", "LayerTreeHostImpl::InitializeRenderer"); | 2066 TRACE_EVENT0("cc", "LayerTreeHostImpl::InitializeRenderer"); |
2003 #if DCHECK_IS_ON | 2067 #if DCHECK_IS_ON |
2004 DCHECK(!renderer_ || did_lose_called_); | 2068 DCHECK(!renderer_ || did_lose_called_); |
2005 #endif | 2069 #endif |
2006 | 2070 |
2007 // Since we will create a new resource provider, we cannot continue to use | 2071 // Since we will create a new resource provider, we cannot continue to use |
2008 // the old resources (i.e. render_surfaces and texture IDs). Clear them | 2072 // the old resources (i.e. render_surfaces and texture IDs). Clear them |
2009 // before we destroy the old resource provider. | 2073 // before we destroy the old resource provider. |
(...skipping 1235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3245 } | 3309 } |
3246 | 3310 |
3247 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { | 3311 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { |
3248 std::vector<PictureLayerImpl*>::iterator it = | 3312 std::vector<PictureLayerImpl*>::iterator it = |
3249 std::find(picture_layers_.begin(), picture_layers_.end(), layer); | 3313 std::find(picture_layers_.begin(), picture_layers_.end(), layer); |
3250 DCHECK(it != picture_layers_.end()); | 3314 DCHECK(it != picture_layers_.end()); |
3251 picture_layers_.erase(it); | 3315 picture_layers_.erase(it); |
3252 } | 3316 } |
3253 | 3317 |
3254 } // namespace cc | 3318 } // namespace cc |
OLD | NEW |