| Index: cc/resources/tile_manager.cc
|
| diff --git a/cc/resources/tile_manager.cc b/cc/resources/tile_manager.cc
|
| index 7ab1fbf98dc3cd340456c1908ab2a6e4dd66b94f..8d80633e859b5006f8dc69e6cf373f54d4e72295 100644
|
| --- a/cc/resources/tile_manager.cc
|
| +++ b/cc/resources/tile_manager.cc
|
| @@ -209,11 +209,13 @@ scoped_ptr<TileManager> TileManager::Create(
|
| base::SequencedTaskRunner* task_runner,
|
| ResourcePool* resource_pool,
|
| TileTaskRunner* tile_task_runner,
|
| + int compression_threshold,
|
| RenderingStatsInstrumentation* rendering_stats_instrumentation,
|
| size_t scheduled_raster_task_limit) {
|
| - return make_scoped_ptr(new TileManager(
|
| - client, task_runner, resource_pool, tile_task_runner,
|
| - rendering_stats_instrumentation, scheduled_raster_task_limit));
|
| + return make_scoped_ptr(
|
| + new TileManager(client, task_runner, resource_pool, tile_task_runner,
|
| + compression_threshold, rendering_stats_instrumentation,
|
| + scheduled_raster_task_limit));
|
| }
|
|
|
| TileManager::TileManager(
|
| @@ -221,6 +223,7 @@ TileManager::TileManager(
|
| const scoped_refptr<base::SequencedTaskRunner>& task_runner,
|
| ResourcePool* resource_pool,
|
| TileTaskRunner* tile_task_runner,
|
| + int compression_threshold,
|
| RenderingStatsInstrumentation* rendering_stats_instrumentation,
|
| size_t scheduled_raster_task_limit)
|
| : client_(client),
|
| @@ -232,6 +235,7 @@ TileManager::TileManager(
|
| rendering_stats_instrumentation_(rendering_stats_instrumentation),
|
| did_check_for_completed_tasks_since_last_schedule_tasks_(true),
|
| did_oom_on_last_assign_(false),
|
| + compression_threshold_(compression_threshold),
|
| ready_to_activate_check_notifier_(
|
| task_runner_.get(),
|
| base::Bind(&TileManager::CheckIfReadyToActivate,
|
| @@ -591,7 +595,8 @@ void TileManager::AssignGpuMemoryToTiles(
|
| MemoryUsage memory_required_by_tile_to_be_scheduled;
|
| if (!mts.raster_task.get()) {
|
| memory_required_by_tile_to_be_scheduled = MemoryUsage::FromConfig(
|
| - tile->size(), resource_pool_->resource_format());
|
| + tile->size(),
|
| + resource_pool_->resource_format(DetermineResourceFormatUsage(tile)));
|
| }
|
|
|
| bool tile_is_needed_now = priority.priority_bin == TilePriority::NOW;
|
| @@ -647,6 +652,26 @@ void TileManager::AssignGpuMemoryToTiles(
|
| had_enough_memory_to_schedule_tiles_needed_now);
|
| }
|
|
|
| +ResourceFormatUsage TileManager::DetermineResourceFormatUsage(
|
| + const Tile* tile) const {
|
| + ResourceFormatUsage usage;
|
| + if (tile->size().width() % 4 != 0 || tile->size().height() % 4 != 0 ||
|
| + tile->frequently_invalidated()) {
|
| + usage = FORMAT_USAGE_NATIVE;
|
| + } else {
|
| + usage = tile->IsOpaque() ? FORMAT_USAGE_OPAQUE : FORMAT_USAGE_TRANSLUCENT;
|
| + // Urgent tiles can be generated faster if we avoid memory optimized
|
| + // formats.
|
| + if (compression_threshold_ >= 0) {
|
| + TilePriority::PriorityBin bin = tile->combined_priority().priority_bin;
|
| + if (static_cast<int>(bin) < compression_threshold_) {
|
| + usage = FORMAT_USAGE_NATIVE;
|
| + }
|
| + }
|
| + }
|
| + return usage;
|
| +}
|
| +
|
| void TileManager::FreeResourcesForTile(Tile* tile) {
|
| ManagedTileState& mts = tile->managed_state();
|
| if (mts.draw_info.resource_)
|
| @@ -729,8 +754,8 @@ scoped_refptr<ImageDecodeTask> TileManager::CreateImageDecodeTask(
|
| scoped_refptr<RasterTask> TileManager::CreateRasterTask(Tile* tile) {
|
| ManagedTileState& mts = tile->managed_state();
|
|
|
| - scoped_ptr<ScopedResource> resource =
|
| - resource_pool_->AcquireResource(tile->size());
|
| + scoped_ptr<ScopedResource> resource = resource_pool_->AcquireResource(
|
| + tile->size(), DetermineResourceFormatUsage(tile));
|
| const ScopedResource* const_resource = resource.get();
|
|
|
| // Create and queue all image decode tasks that this tile depends on.
|
|
|