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

Unified Diff: cc/resources/tile_manager.cc

Issue 793693003: Tile Compression (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years 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
« no previous file with comments | « cc/resources/tile_manager.h ('k') | cc/resources/tile_manager_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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.
« no previous file with comments | « cc/resources/tile_manager.h ('k') | cc/resources/tile_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698