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

Unified Diff: cc/tile_manager.cc

Issue 12223050: cc: Fix tile manager shutdown by aborting all pending uploads. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/tile_manager.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/tile_manager.cc
diff --git a/cc/tile_manager.cc b/cc/tile_manager.cc
index 16d82d46a8a885052d1549bf4749c73e9d1e50f9..561cb3f15953143bb00f5e8b5ce5d54b5a3fda51 100644
--- a/cc/tile_manager.cc
+++ b/cc/tile_manager.cc
@@ -142,7 +142,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);
}
@@ -373,6 +373,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,
« no previous file with comments | « cc/tile_manager.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698