Index: cc/tile_manager.cc |
diff --git a/cc/tile_manager.cc b/cc/tile_manager.cc |
index 054b5e55fbd19b16633e9ccac9cdc3a5fae16ea4..7638dc8cbe5b0dbca09702663c797635da0d97e7 100644 |
--- a/cc/tile_manager.cc |
+++ b/cc/tile_manager.cc |
@@ -137,9 +137,6 @@ scoped_ptr<base::Value> TileRasterStateAsValue( |
ManagedTileState::ManagedTileState() |
: can_use_gpu_memory(false), |
- can_be_freed(true), |
- resource_is_being_initialized(false), |
- contents_swizzled(false), |
need_to_gather_pixel_refs(true), |
gpu_memmgr_stats_bin(NEVER_BIN), |
raster_state(IDLE_STATE), |
@@ -153,16 +150,11 @@ ManagedTileState::ManagedTileState() |
} |
ManagedTileState::~ManagedTileState() { |
- DCHECK(!resource); |
- DCHECK(!resource_is_being_initialized); |
} |
scoped_ptr<base::Value> ManagedTileState::AsValue() const { |
scoped_ptr<base::DictionaryValue> state(new base::DictionaryValue()); |
state->SetBoolean("can_use_gpu_memory", can_use_gpu_memory); |
- state->SetBoolean("can_be_freed", can_be_freed); |
- state->SetBoolean("has_resource", resource.get() != 0); |
- state->SetBoolean("resource_is_being_initialized", resource_is_being_initialized); |
state->Set("raster_state", TileRasterStateAsValue(raster_state).release()); |
state->Set("bin.0", TileManagerBinAsValue(bin[ACTIVE_TREE]).release()); |
state->Set("bin.1", TileManagerBinAsValue(bin[PENDING_TREE]).release()); |
@@ -373,8 +365,8 @@ void TileManager::ManageTiles() { |
if (tile->priority(ACTIVE_TREE).is_live || |
tile->priority(PENDING_TREE).is_live || |
- tile->managed_state().resource || |
- tile->managed_state().resource_is_being_initialized) { |
+ tile->drawing_info().resource_ || |
+ tile->drawing_info().initializing_resource_) { |
live_or_allocated_tiles_.push_back(tile); |
} |
} |
@@ -396,11 +388,12 @@ void TileManager::ManageTiles() { |
void TileManager::CheckForCompletedTileUploads() { |
while (!tiles_with_pending_upload_.empty()) { |
Tile* tile = tiles_with_pending_upload_.front(); |
- DCHECK(tile->managed_state().resource); |
+ TileDrawingInfo& drawing_info = tile->drawing_info(); |
+ DCHECK(drawing_info.resource_); |
// Set pixel tasks complete in the order they are posted. |
if (!resource_pool_->resource_provider()->didSetPixelsComplete( |
- tile->managed_state().resource->id())) { |
+ drawing_info.resource_->id())) { |
break; |
} |
@@ -410,11 +403,11 @@ void TileManager::CheckForCompletedTileUploads() { |
// It's now safe to release the pixel buffer. |
resource_pool_->resource_provider()->releasePixelBuffer( |
- tile->managed_state().resource->id()); |
+ drawing_info.resource_->id()); |
DidFinishTileInitialization(tile); |
- bytes_pending_upload_ -= tile->bytes_consumed_if_allocated(); |
+ bytes_pending_upload_ -= tile->bytes_consumed_if_texture_allocated(); |
DidTileRasterStateChange(tile, IDLE_STATE); |
tiles_with_pending_upload_.pop(); |
} |
@@ -426,19 +419,20 @@ void TileManager::AbortPendingTileUploads() { |
while (!tiles_with_pending_upload_.empty()) { |
Tile* tile = tiles_with_pending_upload_.front(); |
ManagedTileState& managed_tile_state = tile->managed_state(); |
- DCHECK(managed_tile_state.resource); |
+ TileDrawingInfo& drawing_info = tile->drawing_info(); |
+ DCHECK(drawing_info.resource_); |
resource_pool_->resource_provider()->abortSetPixels( |
- managed_tile_state.resource->id()); |
+ drawing_info.resource_->id()); |
resource_pool_->resource_provider()->releasePixelBuffer( |
- managed_tile_state.resource->id()); |
+ drawing_info.resource_->id()); |
- managed_tile_state.resource_is_being_initialized = false; |
- managed_tile_state.can_be_freed = true; |
+ drawing_info.initializing_resource_ = false; |
+ drawing_info.can_be_freed_ = true; |
managed_tile_state.can_use_gpu_memory = false; |
FreeResourcesForTile(tile); |
- bytes_pending_upload_ -= tile->bytes_consumed_if_allocated(); |
+ bytes_pending_upload_ -= tile->bytes_consumed_if_texture_allocated(); |
DidTileRasterStateChange(tile, IDLE_STATE); |
tiles_with_pending_upload_.pop(); |
} |
@@ -459,7 +453,7 @@ void TileManager::GetMemoryStats( |
for (size_t i = 0; i < live_or_allocated_tiles_.size(); i++) { |
const Tile* tile = live_or_allocated_tiles_[i]; |
const ManagedTileState& mts = tile->managed_state(); |
- size_t tile_bytes = tile->bytes_consumed_if_allocated(); |
+ size_t tile_bytes = tile->bytes_consumed_if_texture_allocated(); |
if (mts.gpu_memmgr_stats_bin == NOW_BIN) |
*memoryRequiredBytes += tile_bytes; |
if (mts.gpu_memmgr_stats_bin != NEVER_BIN) |
@@ -579,8 +573,8 @@ void TileManager::AssignGpuMemoryToTiles() { |
for (TileVector::iterator it = live_or_allocated_tiles_.begin(); |
it != live_or_allocated_tiles_.end(); ++it) { |
Tile* tile = *it; |
- if (!tile->managed_state().can_be_freed) |
- unreleasable_bytes += tile->bytes_consumed_if_allocated(); |
+ if (!tile->drawing_info().can_be_freed_) |
+ unreleasable_bytes += tile->bytes_consumed_if_texture_allocated(); |
if (tile->managed_state().raster_state == WAITING_FOR_RASTER_STATE) |
DidTileRasterStateChange(tile, IDLE_STATE); |
} |
@@ -590,9 +584,10 @@ void TileManager::AssignGpuMemoryToTiles() { |
size_t bytes_left = bytes_allocatable; |
for (TileVector::iterator it = live_or_allocated_tiles_.begin(); it != live_or_allocated_tiles_.end(); ++it) { |
Tile* tile = *it; |
- size_t tile_bytes = tile->bytes_consumed_if_allocated(); |
+ size_t tile_bytes = tile->bytes_consumed_if_texture_allocated(); |
ManagedTileState& managed_tile_state = tile->managed_state(); |
- if (!managed_tile_state.can_be_freed) |
+ TileDrawingInfo& drawing_info = tile->drawing_info(); |
+ if (!tile->drawing_info().can_be_freed_) |
continue; |
if (managed_tile_state.bin[HIGH_PRIORITY_BIN] == NEVER_BIN && |
managed_tile_state.bin[LOW_PRIORITY_BIN] == NEVER_BIN) { |
@@ -610,8 +605,8 @@ void TileManager::AssignGpuMemoryToTiles() { |
} |
bytes_left -= tile_bytes; |
managed_tile_state.can_use_gpu_memory = true; |
- if (!managed_tile_state.resource && |
- !managed_tile_state.resource_is_being_initialized) { |
+ if (!drawing_info.resource_ && |
+ !drawing_info.initializing_resource_) { |
tiles_that_need_to_be_rasterized_.push_back(tile); |
DidTileRasterStateChange(tile, WAITING_FOR_RASTER_STATE); |
} |
@@ -640,17 +635,17 @@ void TileManager::AssignGpuMemoryToTiles() { |
} |
void TileManager::FreeResourcesForTile(Tile* tile) { |
- ManagedTileState& managed_tile_state = tile->managed_state(); |
- DCHECK(managed_tile_state.can_be_freed); |
- if (managed_tile_state.resource) |
- resource_pool_->ReleaseResource(managed_tile_state.resource.Pass()); |
+ TileDrawingInfo& drawing_info = tile->drawing_info(); |
+ DCHECK(drawing_info.can_be_freed_); |
+ if (drawing_info.resource_) |
+ resource_pool_->ReleaseResource(drawing_info.resource_.Pass()); |
} |
bool TileManager::CanDispatchRasterTask(Tile* tile) const { |
if (raster_worker_pool_->IsBusy()) |
return false; |
size_t new_bytes_pending = bytes_pending_upload_; |
- new_bytes_pending += tile->bytes_consumed_if_allocated(); |
+ new_bytes_pending += tile->bytes_consumed_if_texture_allocated(); |
return new_bytes_pending <= kMaxPendingUploadBytes && |
tiles_with_pending_upload_.size() < kMaxPendingUploads; |
} |
@@ -775,13 +770,14 @@ void TileManager::OnImageDecodeTaskCompleted( |
scoped_ptr<ResourcePool::Resource> TileManager::PrepareTileForRaster( |
Tile* tile) { |
ManagedTileState& managed_tile_state = tile->managed_state(); |
+ TileDrawingInfo& drawing_info = tile->drawing_info(); |
DCHECK(managed_tile_state.can_use_gpu_memory); |
scoped_ptr<ResourcePool::Resource> resource = |
resource_pool_->AcquireResource(tile->tile_size_.size(), tile->format_); |
resource_pool_->resource_provider()->acquirePixelBuffer(resource->id()); |
- managed_tile_state.resource_is_being_initialized = true; |
- managed_tile_state.can_be_freed = false; |
+ drawing_info.initializing_resource_ = true; |
+ drawing_info.can_be_freed_ = false; |
DidTileRasterStateChange(tile, RASTER_STATE); |
return resource.Pass(); |
@@ -835,7 +831,8 @@ void TileManager::OnRasterTaskCompleted( |
resource_pool_->resource_provider()->unmapPixelBuffer(resource->id()); |
ManagedTileState& managed_tile_state = tile->managed_state(); |
- managed_tile_state.can_be_freed = true; |
+ TileDrawingInfo& drawing_info = tile->drawing_info(); |
+ tile->drawing_info().can_be_freed_ = true; |
// Tile can be freed after the completion of the raster task. Call |
// AssignGpuMemoryToTiles() to re-assign gpu memory to highest priority |
@@ -851,33 +848,33 @@ void TileManager::OnRasterTaskCompleted( |
// The component order may be bgra if we're uploading bgra pixels to rgba |
// texture. Mark contents as swizzled if image component order is |
// different than texture format. |
- managed_tile_state.contents_swizzled = |
+ drawing_info.contents_swizzled_ = |
!PlatformColor::sameComponentOrder(tile->format_); |
// Tile resources can't be freed until upload has completed. |
- managed_tile_state.can_be_freed = false; |
+ tile->drawing_info().can_be_freed_ = false; |
resource_pool_->resource_provider()->beginSetPixels(resource->id()); |
has_performed_uploads_since_last_flush_ = true; |
- managed_tile_state.resource = resource.Pass(); |
+ drawing_info.resource_ = resource.Pass(); |
- bytes_pending_upload_ += tile->bytes_consumed_if_allocated(); |
+ bytes_pending_upload_ += tile->bytes_consumed_if_texture_allocated(); |
DidTileRasterStateChange(tile, UPLOAD_STATE); |
tiles_with_pending_upload_.push(tile); |
} else { |
resource_pool_->resource_provider()->releasePixelBuffer(resource->id()); |
resource_pool_->ReleaseResource(resource.Pass()); |
- managed_tile_state.resource_is_being_initialized = false; |
+ drawing_info.initializing_resource_ = false; |
DidTileRasterStateChange(tile, IDLE_STATE); |
} |
} |
void TileManager::DidFinishTileInitialization(Tile* tile) { |
- ManagedTileState& managed_tile_state = tile->managed_state(); |
- DCHECK(managed_tile_state.resource); |
- managed_tile_state.resource_is_being_initialized = false; |
- managed_tile_state.can_be_freed = true; |
+ TileDrawingInfo& drawing_info = tile->drawing_info(); |
+ DCHECK(drawing_info.resource_); |
+ drawing_info.initializing_resource_ = false; |
+ drawing_info.can_be_freed_ = true; |
} |
void TileManager::DidTileRasterStateChange(Tile* tile, TileRasterState state) { |