Index: cc/tile_manager.cc |
diff --git a/cc/tile_manager.cc b/cc/tile_manager.cc |
index 5c804bb67c04d37aa688c2121a6e351e96c311ed..9e0f61750e79a75dbdab5a2b133d235d19171add 100644 |
--- a/cc/tile_manager.cc |
+++ b/cc/tile_manager.cc |
@@ -143,7 +143,7 @@ TileManager::~TileManager() { |
// This should finish all pending tasks and release any uninitialized |
// resources. |
raster_worker_pool_.reset(); |
- CheckForCompletedTileUploads(); |
+ AbortPendingTileUploads(); |
DCHECK(tiles_with_pending_set_pixels_.size() == 0); |
DCHECK(tiles_.size() == 0); |
} |
@@ -374,6 +374,28 @@ void TileManager::CheckForCompletedTileUploads() { |
DispatchMoreTasks(); |
} |
+void TileManager::AbortPendingTileUploads() { |
+ while (!tiles_with_pending_set_pixels_.empty()) { |
+ Tile* tile = tiles_with_pending_set_pixels_.front(); |
+ ManagedTileState& managed_tile_state = tile->managed_state(); |
+ DCHECK(managed_tile_state.resource); |
+ |
+ resource_pool_->resource_provider()->abortSetPixels( |
+ managed_tile_state.resource->id()); |
+ resource_pool_->resource_provider()->releasePixelBuffer( |
+ managed_tile_state.resource->id()); |
+ |
+ managed_tile_state.resource_is_being_initialized = false; |
+ managed_tile_state.can_be_freed = true; |
+ managed_tile_state.can_use_gpu_memory = false; |
+ FreeResourcesForTile(tile); |
+ |
+ bytes_pending_set_pixels_ -= tile->bytes_consumed_if_allocated(); |
+ DidTileRasterStateChange(tile, IDLE_STATE); |
+ tiles_with_pending_set_pixels_.pop(); |
+ } |
+} |
+ |
void TileManager::GetMemoryStats( |
size_t* memoryRequiredBytes, |
size_t* memoryNiceToHaveBytes, |