Index: cc/tiles/tile_manager.cc |
diff --git a/cc/tiles/tile_manager.cc b/cc/tiles/tile_manager.cc |
index ba60908743fc18500741ad10d7bae99d633cfbae..b098cf4bad8d70ec6538984091f5931bdd2aec54 100644 |
--- a/cc/tiles/tile_manager.cc |
+++ b/cc/tiles/tile_manager.cc |
@@ -543,7 +543,7 @@ void TileManager::AssignGpuMemoryToTiles( |
MemoryUsage memory_required_by_tile_to_be_scheduled; |
if (!tile->raster_task_.get()) { |
memory_required_by_tile_to_be_scheduled = MemoryUsage::FromConfig( |
- tile->desired_texture_size(), tile_task_runner_->GetResourceFormat()); |
+ tile->desired_texture_size(), DetermineResourceFormat(tile)); |
} |
bool tile_is_needed_now = priority.priority_bin == TilePriority::NOW; |
@@ -687,12 +687,12 @@ scoped_refptr<RasterTask> TileManager::CreateRasterTask( |
} |
if (resource) { |
resource_content_id = tile->invalidated_id(); |
- DCHECK_EQ(tile_task_runner_->GetResourceFormat(), resource->format()); |
+ DCHECK_EQ(DetermineResourceFormat(tile), resource->format()); |
DCHECK_EQ(tile->desired_texture_size().ToString(), |
resource->size().ToString()); |
} else { |
- resource = resource_pool_->AcquireResource( |
- tile->desired_texture_size(), tile_task_runner_->GetResourceFormat()); |
+ resource = resource_pool_->AcquireResource(tile->desired_texture_size(), |
+ DetermineResourceFormat(tile)); |
} |
const ScopedResource* const_resource = resource.get(); |
@@ -791,8 +791,7 @@ void TileManager::UpdateTileDrawInfo( |
DCHECK(resource); |
draw_info.set_use_resource(); |
draw_info.resource_ = resource.Pass(); |
- draw_info.contents_swizzled_ = |
- tile_task_runner_->GetResourceRequiresSwizzle(); |
+ draw_info.contents_swizzled_ = DetermineResourceRequiresSwizzle(tile); |
} |
client_->NotifyTileStateChanged(tile); |
} |
@@ -968,6 +967,20 @@ void TileManager::CheckIfMoreTilesNeedToBePrepared() { |
ready_to_activate_check_notifier_.Schedule(); |
} |
+ResourceFormat TileManager::DetermineResourceFormat(const Tile* tile) const { |
+ bool dont_compress = tile->desired_texture_size().width() % 4 != 0 || |
+ tile->desired_texture_size().height() % 4 != 0; |
reveman
2015/07/21 04:26:33
Can we instead clamp tile size to multiple of 4 if
|
+ return tile_task_runner_->GetResourceFormat(dont_compress, |
+ !tile->is_opaque()); |
+} |
+ |
+bool TileManager::DetermineResourceRequiresSwizzle(const Tile* tile) const { |
+ bool dont_compress = tile->desired_texture_size().width() % 4 != 0 || |
+ tile->desired_texture_size().height() % 4 != 0; |
+ return tile_task_runner_->GetResourceRequiresSwizzle(dont_compress, |
+ !tile->is_opaque()); |
+} |
+ |
TileManager::MemoryUsage::MemoryUsage() : memory_bytes_(0), resource_count_(0) { |
} |