| Index: cc/resources/tile_manager.cc
|
| diff --git a/cc/resources/tile_manager.cc b/cc/resources/tile_manager.cc
|
| index dff3a52f871ac6a80cd05b77e92fc25ab6b14fed..28c3513f3615519743ed73b197ee0be4b9eb5604 100644
|
| --- a/cc/resources/tile_manager.cc
|
| +++ b/cc/resources/tile_manager.cc
|
| @@ -622,7 +622,8 @@ 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(), resource_pool_->resource_format());
|
| + tile->desired_texture_size(),
|
| + resource_pool_->resource_format(DetermineResourceFormatUsage(tile)));
|
| }
|
|
|
| bool tile_is_needed_now = priority.priority_bin == TilePriority::NOW;
|
| @@ -676,6 +677,18 @@ void TileManager::AssignGpuMemoryToTiles(
|
| had_enough_memory_to_schedule_tiles_needed_now);
|
| }
|
|
|
| +ResourceFormatUsage TileManager::DetermineResourceFormatUsage(
|
| + const Tile* tile) const {
|
| + ResourceFormatUsage usage;
|
| + gfx::Size size = tile->desired_texture_size();
|
| + if ((size.width() % 4 != 0) || (size.height() % 4 != 0)) {
|
| + usage = FORMAT_USAGE_NATIVE;
|
| + } else {
|
| + usage = tile->IsOpaque() ? FORMAT_USAGE_OPAQUE : FORMAT_USAGE_TRANSLUSCENT;
|
| + }
|
| + return usage;
|
| +}
|
| +
|
| void TileManager::FreeResourcesForTile(Tile* tile) {
|
| TileDrawInfo& draw_info = tile->draw_info();
|
| if (draw_info.resource_)
|
| @@ -756,7 +769,8 @@ scoped_refptr<ImageDecodeTask> TileManager::CreateImageDecodeTask(
|
|
|
| scoped_refptr<RasterTask> TileManager::CreateRasterTask(Tile* tile) {
|
| scoped_ptr<ScopedResource> resource =
|
| - resource_pool_->AcquireResource(tile->desired_texture_size());
|
| + resource_pool_->AcquireResource(tile->desired_texture_size(),
|
| + DetermineResourceFormatUsage(tile));
|
| const ScopedResource* const_resource = resource.get();
|
|
|
| // Create and queue all image decode tasks that this tile depends on.
|
|
|