Chromium Code Reviews| Index: cc/tiles/tile_manager.cc |
| diff --git a/cc/tiles/tile_manager.cc b/cc/tiles/tile_manager.cc |
| index e92a3df33b30d368d9a0058b51b60785663f0eba..d64936baa8dbecf46d047a2d516d50c4ca50c061 100644 |
| --- a/cc/tiles/tile_manager.cc |
| +++ b/cc/tiles/tile_manager.cc |
| @@ -228,24 +228,19 @@ RasterTaskCompletionStatsAsValue(const RasterTaskCompletionStats& stats) { |
| scoped_ptr<TileManager> TileManager::Create( |
| TileManagerClient* client, |
| base::SequencedTaskRunner* task_runner, |
| - ResourcePool* resource_pool, |
| - TileTaskRunner* tile_task_runner, |
| size_t scheduled_raster_task_limit) { |
| - return make_scoped_ptr(new TileManager(client, task_runner, resource_pool, |
| - tile_task_runner, |
| - scheduled_raster_task_limit)); |
| + return make_scoped_ptr( |
| + new TileManager(client, task_runner, scheduled_raster_task_limit)); |
| } |
| TileManager::TileManager( |
| TileManagerClient* client, |
| const scoped_refptr<base::SequencedTaskRunner>& task_runner, |
| - ResourcePool* resource_pool, |
| - TileTaskRunner* tile_task_runner, |
| size_t scheduled_raster_task_limit) |
| : client_(client), |
| task_runner_(task_runner), |
| - resource_pool_(resource_pool), |
| - tile_task_runner_(tile_task_runner), |
| + resource_pool_(nullptr), |
| + tile_task_runner_(nullptr), |
| scheduled_raster_task_limit_(scheduled_raster_task_limit), |
| all_tiles_that_need_to_be_rasterized_are_scheduled_(true), |
| did_check_for_completed_tasks_since_last_schedule_tasks_(true), |
| @@ -259,12 +254,15 @@ TileManager::TileManager( |
| base::Unretained(this))), |
| has_scheduled_tile_tasks_(false), |
| prepare_tiles_count_(0u) { |
| - tile_task_runner_->SetClient(this); |
| } |
| TileManager::~TileManager() { |
| - // Reset global state and manage. This should cause |
| - // our memory usage to drop to zero. |
| +} |
|
enne (OOO)
2015/07/06 18:07:25
Should this call FinishTasksAndCleanUp? Or at leas
vmpstr
2015/07/06 18:41:35
Done.
|
| + |
| +void TileManager::FinishTasksAndCleanUp() { |
| + if (!tile_task_runner_) |
| + return; |
| + |
| global_state_ = GlobalStateThatImpactsTilePriority(); |
| TileTaskQueue empty; |
| @@ -278,6 +276,21 @@ TileManager::~TileManager() { |
| FreeResourcesForReleasedTiles(); |
| CleanUpReleasedTiles(); |
| + |
| + tile_task_runner_ = nullptr; |
| + resource_pool_ = nullptr; |
| + more_tiles_need_prepare_check_notifier_.Cancel(); |
| + signals_check_notifier_.Cancel(); |
| +} |
| + |
| +void TileManager::SetResources(ResourcePool* resource_pool, |
| + TileTaskRunner* tile_task_runner) { |
| + DCHECK(!tile_task_runner_); |
| + DCHECK(tile_task_runner); |
| + |
| + resource_pool_ = resource_pool; |
| + tile_task_runner_ = tile_task_runner; |
| + tile_task_runner_->SetClient(this); |
| } |
| void TileManager::Release(Tile* tile) { |
| @@ -324,6 +337,8 @@ void TileManager::CleanUpReleasedTiles() { |
| void TileManager::DidFinishRunningTileTasks(TaskSet task_set) { |
| TRACE_EVENT1("cc", "TileManager::DidFinishRunningTileTasks", "task_set", |
| TaskSetName(task_set)); |
| + DCHECK(resource_pool_); |
| + DCHECK(tile_task_runner_); |
| switch (task_set) { |
| case ALL: { |
| @@ -360,13 +375,19 @@ void TileManager::DidFinishRunningTileTasks(TaskSet task_set) { |
| NOTREACHED(); |
| } |
| -void TileManager::PrepareTiles( |
| +bool TileManager::PrepareTiles( |
| const GlobalStateThatImpactsTilePriority& state) { |
| ++prepare_tiles_count_; |
| TRACE_EVENT1("cc", "TileManager::PrepareTiles", "prepare_tiles_id", |
| prepare_tiles_count_); |
| + if (!tile_task_runner_) { |
| + TRACE_EVENT_INSTANT0("cc", "PrepareTiles aborted", |
| + TRACE_EVENT_SCOPE_THREAD); |
| + return false; |
| + } |
| + |
| signals_.reset(); |
| global_state_ = state; |
| @@ -403,11 +424,17 @@ void TileManager::PrepareTiles( |
| TRACE_COUNTER_ID1("cc", "unused_memory_bytes", this, |
| resource_pool_->total_memory_usage_bytes() - |
| resource_pool_->acquired_memory_usage_bytes()); |
| + return true; |
| } |
| void TileManager::Flush() { |
| TRACE_EVENT0("cc", "TileManager::Flush"); |
| + if (!tile_task_runner_) { |
| + TRACE_EVENT_INSTANT0("cc", "Flush aborted", TRACE_EVENT_SCOPE_THREAD); |
| + return; |
| + } |
| + |
| tile_task_runner_->CheckForCompletedTasks(); |
| did_check_for_completed_tasks_since_last_schedule_tasks_ = true; |
| @@ -504,6 +531,9 @@ void TileManager::AssignGpuMemoryToTiles( |
| PrioritizedTileVector* tiles_that_need_to_be_rasterized) { |
| TRACE_EVENT_BEGIN0("cc", "TileManager::AssignGpuMemoryToTiles"); |
| + DCHECK(resource_pool_); |
| + DCHECK(tile_task_runner_); |
| + |
| // Maintain the list of released resources that can potentially be re-used |
| // or deleted. If this operation becomes expensive too, only do this after |
| // some resource(s) was returned. Note that in that case, one also need to |
| @@ -821,6 +851,9 @@ ScopedTilePtr TileManager::CreateTile(const gfx::Size& desired_texture_size, |
| int layer_id, |
| int source_frame_number, |
| int flags) { |
| + // We need to have a tile task worker pool to do anything meaningful with |
| + // tiles. |
| + DCHECK(tile_task_runner_); |
| ScopedTilePtr tile(new Tile(this, desired_texture_size, content_rect, |
| contents_scale, layer_id, source_frame_number, |
| flags)); |