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

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

Issue 367833003: cc: Start using raster/eviction iterators. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: perf test fix Created 6 years, 5 months 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
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 1226 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698