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

Unified Diff: cc/resources/tile_manager.cc

Issue 817133006: Support different formats in the same resource pool. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 11 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
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.

Powered by Google App Engine
This is Rietveld 408576698