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

Side by Side Diff: cc/resources/tile_manager.cc

Issue 20017005: gpu: Refactor GpuMemoryBuffer framework for multi-process support. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years, 4 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
« no previous file with comments | « cc/resources/tile_manager.h ('k') | cc/test/fake_tile_manager.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 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 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/resources/tile_manager.h" 5 #include "cc/resources/tile_manager.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 #include <string> 9 #include <string>
10 10
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 bool use_map_image) { 123 bool use_map_image) {
124 return make_scoped_ptr( 124 return make_scoped_ptr(
125 new TileManager(client, 125 new TileManager(client,
126 resource_provider, 126 resource_provider,
127 use_map_image ? 127 use_map_image ?
128 ImageRasterWorkerPool::Create( 128 ImageRasterWorkerPool::Create(
129 resource_provider, num_raster_threads) : 129 resource_provider, num_raster_threads) :
130 PixelBufferRasterWorkerPool::Create( 130 PixelBufferRasterWorkerPool::Create(
131 resource_provider, num_raster_threads), 131 resource_provider, num_raster_threads),
132 num_raster_threads, 132 num_raster_threads,
133 rendering_stats_instrumentation, 133 rendering_stats_instrumentation));
134 resource_provider->best_texture_format()));
135 } 134 }
136 135
137 TileManager::TileManager( 136 TileManager::TileManager(
138 TileManagerClient* client, 137 TileManagerClient* client,
139 ResourceProvider* resource_provider, 138 ResourceProvider* resource_provider,
140 scoped_ptr<RasterWorkerPool> raster_worker_pool, 139 scoped_ptr<RasterWorkerPool> raster_worker_pool,
141 size_t num_raster_threads, 140 size_t num_raster_threads,
142 RenderingStatsInstrumentation* rendering_stats_instrumentation, 141 RenderingStatsInstrumentation* rendering_stats_instrumentation)
143 GLenum texture_format)
144 : client_(client), 142 : client_(client),
145 resource_pool_(ResourcePool::Create(resource_provider)), 143 resource_pool_(ResourcePool::Create(resource_provider)),
146 raster_worker_pool_(raster_worker_pool.Pass()), 144 raster_worker_pool_(raster_worker_pool.Pass()),
147 all_tiles_that_need_to_be_rasterized_have_memory_(true), 145 all_tiles_that_need_to_be_rasterized_have_memory_(true),
148 all_tiles_required_for_activation_have_memory_(true), 146 all_tiles_required_for_activation_have_memory_(true),
149 all_tiles_required_for_activation_have_been_initialized_(true), 147 all_tiles_required_for_activation_have_been_initialized_(true),
150 bytes_releasable_(0), 148 bytes_releasable_(0),
151 resources_releasable_(0), 149 resources_releasable_(0),
152 ever_exceeded_memory_budget_(false), 150 ever_exceeded_memory_budget_(false),
153 rendering_stats_instrumentation_(rendering_stats_instrumentation), 151 rendering_stats_instrumentation_(rendering_stats_instrumentation),
154 did_initialize_visible_tile_(false), 152 did_initialize_visible_tile_(false) {
155 texture_format_(texture_format) {
156 raster_worker_pool_->SetClient(this); 153 raster_worker_pool_->SetClient(this);
157 } 154 }
158 155
159 TileManager::~TileManager() { 156 TileManager::~TileManager() {
160 // Reset global state and manage. This should cause 157 // Reset global state and manage. This should cause
161 // our memory usage to drop to zero. 158 // our memory usage to drop to zero.
162 global_state_ = GlobalStateThatImpactsTilePriority(); 159 global_state_ = GlobalStateThatImpactsTilePriority();
163 160
164 // Clear |prioritized_tiles_| so that tiles kept alive by it can be freed. 161 // Clear |prioritized_tiles_| so that tiles kept alive by it can be freed.
165 prioritized_tiles_.Clear(); 162 prioritized_tiles_.Clear();
(...skipping 559 matching lines...) Expand 10 before | Expand all | Expand 10 after
725 base::Bind(&TileManager::OnImageDecodeTaskCompleted, 722 base::Bind(&TileManager::OnImageDecodeTaskCompleted,
726 base::Unretained(this), 723 base::Unretained(this),
727 tile->layer_id(), 724 tile->layer_id(),
728 base::Unretained(pixel_ref))); 725 base::Unretained(pixel_ref)));
729 } 726 }
730 727
731 RasterWorkerPool::RasterTask TileManager::CreateRasterTask(Tile* tile) { 728 RasterWorkerPool::RasterTask TileManager::CreateRasterTask(Tile* tile) {
732 ManagedTileState& mts = tile->managed_state(); 729 ManagedTileState& mts = tile->managed_state();
733 730
734 scoped_ptr<ResourcePool::Resource> resource = 731 scoped_ptr<ResourcePool::Resource> resource =
735 resource_pool_->AcquireResource(tile->tile_size_.size(), 732 resource_pool_->AcquireResource(
736 texture_format_); 733 tile->tile_size_.size(),
734 raster_worker_pool_->GetResourceFormat());
737 const Resource* const_resource = resource.get(); 735 const Resource* const_resource = resource.get();
738 736
739 // Create and queue all image decode tasks that this tile depends on. 737 // Create and queue all image decode tasks that this tile depends on.
740 RasterWorkerPool::Task::Set decode_tasks; 738 RasterWorkerPool::Task::Set decode_tasks;
741 PixelRefTaskMap& existing_pixel_refs = image_decode_tasks_[tile->layer_id()]; 739 PixelRefTaskMap& existing_pixel_refs = image_decode_tasks_[tile->layer_id()];
742 for (PicturePileImpl::PixelRefIterator iter(tile->content_rect(), 740 for (PicturePileImpl::PixelRefIterator iter(tile->content_rect(),
743 tile->contents_scale(), 741 tile->contents_scale(),
744 tile->picture_pile()); 742 tile->picture_pile());
745 iter; ++iter) { 743 iter; ++iter) {
746 skia::LazyPixelRef* pixel_ref = *iter; 744 skia::LazyPixelRef* pixel_ref = *iter;
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
842 bytes_releasable_ += tile->bytes_consumed_if_allocated(); 840 bytes_releasable_ += tile->bytes_consumed_if_allocated();
843 ++resources_releasable_; 841 ++resources_releasable_;
844 } 842 }
845 843
846 FreeUnusedResourcesForTile(tile); 844 FreeUnusedResourcesForTile(tile);
847 if (tile->priority(ACTIVE_TREE).distance_to_visible_in_pixels == 0) 845 if (tile->priority(ACTIVE_TREE).distance_to_visible_in_pixels == 0)
848 did_initialize_visible_tile_ = true; 846 did_initialize_visible_tile_ = true;
849 } 847 }
850 848
851 } // namespace cc 849 } // namespace cc
OLDNEW
« no previous file with comments | « cc/resources/tile_manager.h ('k') | cc/test/fake_tile_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698