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

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

Issue 157743007: cc: Prevent usage of rasterize on-demand with delegating renderer. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: one more unit test Created 6 years, 10 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/resources/tile_manager_unittest.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 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 return state.PassAs<base::Value>(); 163 return state.PassAs<base::Value>();
164 } 164 }
165 165
166 // static 166 // static
167 scoped_ptr<TileManager> TileManager::Create( 167 scoped_ptr<TileManager> TileManager::Create(
168 TileManagerClient* client, 168 TileManagerClient* client,
169 ResourceProvider* resource_provider, 169 ResourceProvider* resource_provider,
170 ContextProvider* context_provider, 170 ContextProvider* context_provider,
171 RenderingStatsInstrumentation* rendering_stats_instrumentation, 171 RenderingStatsInstrumentation* rendering_stats_instrumentation,
172 bool use_map_image, 172 bool use_map_image,
173 bool use_rasterize_on_demand,
173 size_t max_transfer_buffer_usage_bytes, 174 size_t max_transfer_buffer_usage_bytes,
174 size_t max_raster_usage_bytes, 175 size_t max_raster_usage_bytes,
175 unsigned map_image_texture_target) { 176 unsigned map_image_texture_target) {
176 return make_scoped_ptr(new TileManager( 177 return make_scoped_ptr(new TileManager(
177 client, 178 client,
178 resource_provider, 179 resource_provider,
179 use_map_image 180 use_map_image
180 ? ImageRasterWorkerPool::Create( 181 ? ImageRasterWorkerPool::Create(
181 resource_provider, context_provider, map_image_texture_target) 182 resource_provider, context_provider, map_image_texture_target)
182 : PixelBufferRasterWorkerPool::Create( 183 : PixelBufferRasterWorkerPool::Create(
183 resource_provider, 184 resource_provider,
184 context_provider, 185 context_provider,
185 max_transfer_buffer_usage_bytes), 186 max_transfer_buffer_usage_bytes),
186 max_raster_usage_bytes, 187 max_raster_usage_bytes,
187 rendering_stats_instrumentation)); 188 rendering_stats_instrumentation,
189 use_rasterize_on_demand));
188 } 190 }
189 191
190 TileManager::TileManager( 192 TileManager::TileManager(
191 TileManagerClient* client, 193 TileManagerClient* client,
192 ResourceProvider* resource_provider, 194 ResourceProvider* resource_provider,
193 scoped_ptr<RasterWorkerPool> raster_worker_pool, 195 scoped_ptr<RasterWorkerPool> raster_worker_pool,
194 size_t max_raster_usage_bytes, 196 size_t max_raster_usage_bytes,
195 RenderingStatsInstrumentation* rendering_stats_instrumentation) 197 RenderingStatsInstrumentation* rendering_stats_instrumentation,
198 bool use_rasterize_on_demand)
196 : client_(client), 199 : client_(client),
197 resource_pool_( 200 resource_pool_(
198 ResourcePool::Create(resource_provider, 201 ResourcePool::Create(resource_provider,
199 raster_worker_pool->GetResourceTarget(), 202 raster_worker_pool->GetResourceTarget(),
200 raster_worker_pool->GetResourceFormat())), 203 raster_worker_pool->GetResourceFormat())),
201 raster_worker_pool_(raster_worker_pool.Pass()), 204 raster_worker_pool_(raster_worker_pool.Pass()),
202 prioritized_tiles_dirty_(false), 205 prioritized_tiles_dirty_(false),
203 all_tiles_that_need_to_be_rasterized_have_memory_(true), 206 all_tiles_that_need_to_be_rasterized_have_memory_(true),
204 all_tiles_required_for_activation_have_memory_(true), 207 all_tiles_required_for_activation_have_memory_(true),
205 memory_required_bytes_(0), 208 memory_required_bytes_(0),
206 memory_nice_to_have_bytes_(0), 209 memory_nice_to_have_bytes_(0),
207 bytes_releasable_(0), 210 bytes_releasable_(0),
208 resources_releasable_(0), 211 resources_releasable_(0),
209 max_raster_usage_bytes_(max_raster_usage_bytes), 212 max_raster_usage_bytes_(max_raster_usage_bytes),
210 ever_exceeded_memory_budget_(false), 213 ever_exceeded_memory_budget_(false),
211 rendering_stats_instrumentation_(rendering_stats_instrumentation), 214 rendering_stats_instrumentation_(rendering_stats_instrumentation),
212 did_initialize_visible_tile_(false), 215 did_initialize_visible_tile_(false),
213 did_check_for_completed_tasks_since_last_schedule_tasks_(true) { 216 did_check_for_completed_tasks_since_last_schedule_tasks_(true),
217 use_rasterize_on_demand_(use_rasterize_on_demand) {
214 raster_worker_pool_->SetClient(this); 218 raster_worker_pool_->SetClient(this);
215 } 219 }
216 220
217 TileManager::~TileManager() { 221 TileManager::~TileManager() {
218 // Reset global state and manage. This should cause 222 // Reset global state and manage. This should cause
219 // our memory usage to drop to zero. 223 // our memory usage to drop to zero.
220 global_state_ = GlobalStateThatImpactsTilePriority(); 224 global_state_ = GlobalStateThatImpactsTilePriority();
221 225
222 CleanUpReleasedTiles(); 226 CleanUpReleasedTiles();
223 DCHECK_EQ(0u, tiles_.size()); 227 DCHECK_EQ(0u, tiles_.size());
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
317 for (TileMap::iterator it = tiles_.begin(); it != tiles_.end(); ++it) { 321 for (TileMap::iterator it = tiles_.begin(); it != tiles_.end(); ++it) {
318 Tile* tile = it->second; 322 Tile* tile = it->second;
319 ManagedTileState& mts = tile->managed_state(); 323 ManagedTileState& mts = tile->managed_state();
320 ManagedTileState::TileVersion& tile_version = 324 ManagedTileState::TileVersion& tile_version =
321 mts.tile_versions[mts.raster_mode]; 325 mts.tile_versions[mts.raster_mode];
322 326
323 if (tile->required_for_activation() && !tile_version.IsReadyToDraw()) { 327 if (tile->required_for_activation() && !tile_version.IsReadyToDraw()) {
324 // If we can't raster on demand, give up early (and don't activate). 328 // If we can't raster on demand, give up early (and don't activate).
325 if (!allow_rasterize_on_demand) 329 if (!allow_rasterize_on_demand)
326 return; 330 return;
327 tile_version.set_rasterize_on_demand(); 331 if (use_rasterize_on_demand_)
332 tile_version.set_rasterize_on_demand();
328 } 333 }
329 } 334 }
330 335
331 client_->NotifyReadyToActivate(); 336 client_->NotifyReadyToActivate();
332 } 337 }
333 338
334 void TileManager::DidFinishRunningTasksRequiredForActivation() { 339 void TileManager::DidFinishRunningTasksRequiredForActivation() {
335 // This is only a true indication that all tiles required for 340 // This is only a true indication that all tiles required for
336 // activation are initialized when no tiles are OOM. We need to 341 // activation are initialized when no tiles are OOM. We need to
337 // wait for DidFinishRunningTasks() to be called, try to re-assign 342 // wait for DidFinishRunningTasks() to be called, try to re-assign
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after
690 } 695 }
691 } 696 }
692 697
693 // Tile is OOM. 698 // Tile is OOM.
694 if (tile_bytes > bytes_left || tile_resources > resources_left) { 699 if (tile_bytes > bytes_left || tile_resources > resources_left) {
695 FreeResourcesForTile(tile); 700 FreeResourcesForTile(tile);
696 701
697 // This tile was already on screen and now its resources have been 702 // This tile was already on screen and now its resources have been
698 // released. In order to prevent checkerboarding, set this tile as 703 // released. In order to prevent checkerboarding, set this tile as
699 // rasterize on demand immediately. 704 // rasterize on demand immediately.
700 if (mts.visible_and_ready_to_draw) 705 if (mts.visible_and_ready_to_draw && use_rasterize_on_demand_)
701 tile_version.set_rasterize_on_demand(); 706 tile_version.set_rasterize_on_demand();
702 707
703 oomed = true; 708 oomed = true;
704 bytes_that_exceeded_memory_budget += tile_bytes; 709 bytes_that_exceeded_memory_budget += tile_bytes;
705 } else { 710 } else {
706 bytes_left -= tile_bytes; 711 bytes_left -= tile_bytes;
707 resources_left -= tile_resources; 712 resources_left -= tile_resources;
708 713
709 if (tile_version.resource_) 714 if (tile_version.resource_)
710 continue; 715 continue;
(...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after
975 flags)); 980 flags));
976 DCHECK(tiles_.find(tile->id()) == tiles_.end()); 981 DCHECK(tiles_.find(tile->id()) == tiles_.end());
977 982
978 tiles_[tile->id()] = tile; 983 tiles_[tile->id()] = tile;
979 used_layer_counts_[tile->layer_id()]++; 984 used_layer_counts_[tile->layer_id()]++;
980 prioritized_tiles_dirty_ = true; 985 prioritized_tiles_dirty_ = true;
981 return tile; 986 return tile;
982 } 987 }
983 988
984 } // namespace cc 989 } // namespace cc
OLDNEW
« no previous file with comments | « cc/resources/tile_manager.h ('k') | cc/resources/tile_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698