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

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: update 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 27 matching lines...) Expand all
38 #include "cc/layers/scrollbar_layer_impl_base.h" 38 #include "cc/layers/scrollbar_layer_impl_base.h"
39 #include "cc/output/compositor_frame_metadata.h" 39 #include "cc/output/compositor_frame_metadata.h"
40 #include "cc/output/copy_output_request.h" 40 #include "cc/output/copy_output_request.h"
41 #include "cc/output/delegating_renderer.h" 41 #include "cc/output/delegating_renderer.h"
42 #include "cc/output/gl_renderer.h" 42 #include "cc/output/gl_renderer.h"
43 #include "cc/output/software_renderer.h" 43 #include "cc/output/software_renderer.h"
44 #include "cc/quads/render_pass_draw_quad.h" 44 #include "cc/quads/render_pass_draw_quad.h"
45 #include "cc/quads/shared_quad_state.h" 45 #include "cc/quads/shared_quad_state.h"
46 #include "cc/quads/solid_color_draw_quad.h" 46 #include "cc/quads/solid_color_draw_quad.h"
47 #include "cc/quads/texture_draw_quad.h" 47 #include "cc/quads/texture_draw_quad.h"
48 #include "cc/resources/eviction_tile_priority_queue.h"
48 #include "cc/resources/gpu_raster_worker_pool.h" 49 #include "cc/resources/gpu_raster_worker_pool.h"
49 #include "cc/resources/image_copy_raster_worker_pool.h" 50 #include "cc/resources/image_copy_raster_worker_pool.h"
50 #include "cc/resources/image_raster_worker_pool.h" 51 #include "cc/resources/image_raster_worker_pool.h"
51 #include "cc/resources/memory_history.h" 52 #include "cc/resources/memory_history.h"
52 #include "cc/resources/picture_layer_tiling.h" 53 #include "cc/resources/picture_layer_tiling.h"
53 #include "cc/resources/pixel_buffer_raster_worker_pool.h" 54 #include "cc/resources/pixel_buffer_raster_worker_pool.h"
54 #include "cc/resources/prioritized_resource_manager.h" 55 #include "cc/resources/prioritized_resource_manager.h"
56 #include "cc/resources/raster_tile_priority_queue.h"
55 #include "cc/resources/raster_worker_pool.h" 57 #include "cc/resources/raster_worker_pool.h"
56 #include "cc/resources/resource_pool.h" 58 #include "cc/resources/resource_pool.h"
57 #include "cc/resources/texture_mailbox_deleter.h" 59 #include "cc/resources/texture_mailbox_deleter.h"
58 #include "cc/resources/ui_resource_bitmap.h" 60 #include "cc/resources/ui_resource_bitmap.h"
59 #include "cc/scheduler/delay_based_time_source.h" 61 #include "cc/scheduler/delay_based_time_source.h"
60 #include "cc/trees/damage_tracker.h" 62 #include "cc/trees/damage_tracker.h"
61 #include "cc/trees/layer_tree_host.h" 63 #include "cc/trees/layer_tree_host.h"
62 #include "cc/trees/layer_tree_host_common.h" 64 #include "cc/trees/layer_tree_host_common.h"
63 #include "cc/trees/layer_tree_impl.h" 65 #include "cc/trees/layer_tree_impl.h"
64 #include "cc/trees/occlusion_tracker.h" 66 #include "cc/trees/occlusion_tracker.h"
(...skipping 1175 matching lines...) Expand 10 before | Expand all | Expand 10 after
1240 // Mark priorities as dirty and schedule a ManageTiles(). 1242 // Mark priorities as dirty and schedule a ManageTiles().
1241 tile_priorities_dirty_ = true; 1243 tile_priorities_dirty_ = true;
1242 client_->SetNeedsManageTilesOnImplThread(); 1244 client_->SetNeedsManageTilesOnImplThread();
1243 } 1245 }
1244 1246
1245 void LayerTreeHostImpl::DidInitializeVisibleTile() { 1247 void LayerTreeHostImpl::DidInitializeVisibleTile() {
1246 if (client_ && !client_->IsInsideDraw()) 1248 if (client_ && !client_->IsInsideDraw())
1247 client_->DidInitializeVisibleTileOnImplThread(); 1249 client_->DidInitializeVisibleTileOnImplThread();
1248 } 1250 }
1249 1251
1250 const std::vector<PictureLayerImpl*>& LayerTreeHostImpl::GetPictureLayers() { 1252 const std::vector<PictureLayerImpl*>& LayerTreeHostImpl::GetPictureLayers()
1253 const {
1251 return picture_layers_; 1254 return picture_layers_;
1252 } 1255 }
1253 1256
1254 void LayerTreeHostImpl::NotifyReadyToActivate() { 1257 void LayerTreeHostImpl::NotifyReadyToActivate() {
1255 client_->NotifyReadyToActivate(); 1258 client_->NotifyReadyToActivate();
1256 } 1259 }
1257 1260
1258 void LayerTreeHostImpl::NotifyTileStateChanged(const Tile* tile) { 1261 void LayerTreeHostImpl::NotifyTileStateChanged(const Tile* tile) {
1259 TRACE_EVENT0("cc", "LayerTreeHostImpl::NotifyTileStateChanged"); 1262 TRACE_EVENT0("cc", "LayerTreeHostImpl::NotifyTileStateChanged");
1260 1263
1261 if (active_tree_) { 1264 if (active_tree_) {
1262 LayerImpl* layer_impl = 1265 LayerImpl* layer_impl =
1263 active_tree_->FindActiveTreeLayerById(tile->layer_id()); 1266 active_tree_->FindActiveTreeLayerById(tile->layer_id());
1264 if (layer_impl) 1267 if (layer_impl)
1265 layer_impl->NotifyTileStateChanged(tile); 1268 layer_impl->NotifyTileStateChanged(tile);
1266 } 1269 }
1267 1270
1268 if (pending_tree_) { 1271 if (pending_tree_) {
1269 LayerImpl* layer_impl = 1272 LayerImpl* layer_impl =
1270 pending_tree_->FindPendingTreeLayerById(tile->layer_id()); 1273 pending_tree_->FindPendingTreeLayerById(tile->layer_id());
1271 if (layer_impl) 1274 if (layer_impl)
1272 layer_impl->NotifyTileStateChanged(tile); 1275 layer_impl->NotifyTileStateChanged(tile);
1273 } 1276 }
1274 } 1277 }
1275 1278
1279 void LayerTreeHostImpl::BuildRasterQueue(RasterTilePriorityQueue* queue,
1280 TreePriority tree_priority) {
1281 std::vector<PairedPictureLayer> paired_layers;
1282 GetPairedPictureLayers(&paired_layers);
1283 queue->BuildQueue(paired_layers, tree_priority);
1284 }
1285
1286 void LayerTreeHostImpl::BuildEvictionQueue(EvictionTilePriorityQueue* queue,
1287 TreePriority tree_priority) {
1288 std::vector<PairedPictureLayer> paired_layers;
1289 GetPairedPictureLayers(&paired_layers);
1290 queue->BuildQueue(paired_layers, tree_priority);
1291 }
1292
1276 void LayerTreeHostImpl::SetMemoryPolicy(const ManagedMemoryPolicy& policy) { 1293 void LayerTreeHostImpl::SetMemoryPolicy(const ManagedMemoryPolicy& policy) {
1277 SetManagedMemoryPolicy(policy, zero_budget_); 1294 SetManagedMemoryPolicy(policy, zero_budget_);
1278 } 1295 }
1279 1296
1280 void LayerTreeHostImpl::SetTreeActivationCallback( 1297 void LayerTreeHostImpl::SetTreeActivationCallback(
1281 const base::Closure& callback) { 1298 const base::Closure& callback) {
1282 DCHECK(proxy_->IsImplThread()); 1299 DCHECK(proxy_->IsImplThread());
1283 DCHECK(settings_.impl_side_painting || callback.is_null()); 1300 DCHECK(settings_.impl_side_painting || callback.is_null());
1284 tree_activation_callback_ = callback; 1301 tree_activation_callback_ = callback;
1285 } 1302 }
(...skipping 707 matching lines...) Expand 10 before | Expand all | Expand 10 after
1993 bool LayerTreeHostImpl::UseOneCopyTextureUpload() const { 2010 bool LayerTreeHostImpl::UseOneCopyTextureUpload() const {
1994 // Sync query support is required by one-copy rasterizer. 2011 // Sync query support is required by one-copy rasterizer.
1995 return settings_.use_one_copy && GetRendererCapabilities().using_map_image && 2012 return settings_.use_one_copy && GetRendererCapabilities().using_map_image &&
1996 resource_provider_->use_sync_query(); 2013 resource_provider_->use_sync_query();
1997 } 2014 }
1998 2015
1999 void LayerTreeHostImpl::EnforceZeroBudget(bool zero_budget) { 2016 void LayerTreeHostImpl::EnforceZeroBudget(bool zero_budget) {
2000 SetManagedMemoryPolicy(cached_managed_memory_policy_, zero_budget); 2017 SetManagedMemoryPolicy(cached_managed_memory_policy_, zero_budget);
2001 } 2018 }
2002 2019
2020 void LayerTreeHostImpl::GetPairedPictureLayers(
2021 std::vector<PairedPictureLayer>* paired_layers) const {
2022 const std::vector<PictureLayerImpl*>& layers = GetPictureLayers();
2023
2024 paired_layers->clear();
2025 // Reserve a maximum possible paired layers.
2026 paired_layers->reserve(layers.size());
2027
2028 for (std::vector<PictureLayerImpl*>::const_iterator it = layers.begin();
2029 it != layers.end();
2030 ++it) {
2031 PictureLayerImpl* layer = *it;
2032
2033 // TODO(vmpstr): Iterators and should handle this instead. crbug.com/381704
2034 if (!layer->HasValidTilePriorities())
2035 continue;
2036
2037 PictureLayerImpl* twin_layer = layer->GetTwinLayer();
2038
2039 // Ignore the twin layer when tile priorities are invalid.
2040 // TODO(vmpstr): Iterators should handle this instead. crbug.com/381704
2041 if (twin_layer && !twin_layer->HasValidTilePriorities())
2042 twin_layer = NULL;
2043
2044 PairedPictureLayer paired_layer;
2045 WhichTree tree = layer->GetTree();
2046
2047 // If the current tree is ACTIVE_TREE, then always generate a paired_layer.
2048 // If current tree is PENDING_TREE, then only generate a paired_layer if
2049 // there is no twin layer.
2050 if (tree == ACTIVE_TREE) {
2051 DCHECK(!twin_layer || twin_layer->GetTree() == PENDING_TREE);
2052 paired_layer.active_layer = layer;
2053 paired_layer.pending_layer = twin_layer;
2054 paired_layers->push_back(paired_layer);
2055 } else if (!twin_layer) {
2056 paired_layer.active_layer = NULL;
2057 paired_layer.pending_layer = layer;
2058 paired_layers->push_back(paired_layer);
2059 }
2060 }
2061 }
2062
2003 bool LayerTreeHostImpl::InitializeRenderer( 2063 bool LayerTreeHostImpl::InitializeRenderer(
2004 scoped_ptr<OutputSurface> output_surface) { 2064 scoped_ptr<OutputSurface> output_surface) {
2005 TRACE_EVENT0("cc", "LayerTreeHostImpl::InitializeRenderer"); 2065 TRACE_EVENT0("cc", "LayerTreeHostImpl::InitializeRenderer");
2006 #if DCHECK_IS_ON 2066 #if DCHECK_IS_ON
2007 DCHECK(!renderer_ || did_lose_called_); 2067 DCHECK(!renderer_ || did_lose_called_);
2008 #endif 2068 #endif
2009 2069
2010 // Since we will create a new resource provider, we cannot continue to use 2070 // Since we will create a new resource provider, we cannot continue to use
2011 // the old resources (i.e. render_surfaces and texture IDs). Clear them 2071 // the old resources (i.e. render_surfaces and texture IDs). Clear them
2012 // before we destroy the old resource provider. 2072 // before we destroy the old resource provider.
(...skipping 1236 matching lines...) Expand 10 before | Expand all | Expand 10 after
3249 } 3309 }
3250 3310
3251 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { 3311 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) {
3252 std::vector<PictureLayerImpl*>::iterator it = 3312 std::vector<PictureLayerImpl*>::iterator it =
3253 std::find(picture_layers_.begin(), picture_layers_.end(), layer); 3313 std::find(picture_layers_.begin(), picture_layers_.end(), layer);
3254 DCHECK(it != picture_layers_.end()); 3314 DCHECK(it != picture_layers_.end());
3255 picture_layers_.erase(it); 3315 picture_layers_.erase(it);
3256 } 3316 }
3257 3317
3258 } // namespace cc 3318 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698