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

Unified Diff: cc/resources/tile_manager.cc

Issue 69343005: Added preliminary support for tile rasterization with Ganesh (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix for tests that pass NULL resource_provider/context_provider. Created 7 years, 1 month 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 b443516887c8e65c6c0ba464dec3820ef926042b..70337a978184a51a080903977d7368e5863b462f 100644
--- a/cc/resources/tile_manager.cc
+++ b/cc/resources/tile_manager.cc
@@ -168,6 +168,7 @@ scoped_ptr<base::Value> RasterTaskCompletionStatsAsValue(
scoped_ptr<TileManager> TileManager::Create(
TileManagerClient* client,
ResourceProvider* resource_provider,
+ ContextProvider* context_provider,
size_t num_raster_threads,
RenderingStatsInstrumentation* rendering_stats_instrumentation,
bool use_map_image,
@@ -177,6 +178,7 @@ scoped_ptr<TileManager> TileManager::Create(
return make_scoped_ptr(
new TileManager(client,
resource_provider,
+ context_provider,
use_map_image ?
ImageRasterWorkerPool::Create(
resource_provider,
@@ -194,6 +196,7 @@ scoped_ptr<TileManager> TileManager::Create(
TileManager::TileManager(
TileManagerClient* client,
ResourceProvider* resource_provider,
+ ContextProvider* context_provider,
scoped_ptr<RasterWorkerPool> raster_worker_pool,
size_t num_raster_threads,
size_t max_raster_usage_bytes,
@@ -204,6 +207,8 @@ TileManager::TileManager(
raster_worker_pool->GetResourceTarget(),
raster_worker_pool->GetResourceFormat())),
raster_worker_pool_(raster_worker_pool.Pass()),
+ gpu_rasterizer_(GpuRasterizer::Create(
nduca 2013/12/02 19:50:17 you should have unit tests that ensure that tiles
slavi 2013/12/04 02:06:50 Done.
+ this, context_provider, resource_provider)),
prioritized_tiles_dirty_(false),
all_tiles_that_need_to_be_rasterized_have_memory_(true),
all_tiles_required_for_activation_have_memory_(true),
@@ -800,6 +805,7 @@ void TileManager::ScheduleTasks(
TRACE_EVENT1("cc", "TileManager::ScheduleTasks",
"count", tiles_that_need_to_be_rasterized.size());
RasterWorkerPool::RasterTask::Queue tasks;
+ GpuRasterizer::Queue gpu_raster_tasks;
DCHECK(did_check_for_completed_tasks_since_last_schedule_tasks_);
@@ -816,10 +822,17 @@ void TileManager::ScheduleTasks(
DCHECK(tile_version.requires_resource());
DCHECK(!tile_version.resource_);
- if (tile_version.raster_task_.is_null())
- tile_version.raster_task_ = CreateRasterTask(tile);
+ if (tile->use_gpu_rasterizer()) {
+ scoped_ptr<ResourcePool::Resource> resource =
+ resource_pool_->AcquireResource(tile->tile_size_.size());
- tasks.Append(tile_version.raster_task_, tile->required_for_activation());
+ gpu_raster_tasks.Append(tile, resource.Pass());
+ } else {
+ if (tile_version.raster_task_.is_null())
+ tile_version.raster_task_ = CreateRasterTask(tile);
+
+ tasks.Append(tile_version.raster_task_, tile->required_for_activation());
+ }
}
// We must reduce the amount of unused resoruces before calling
@@ -832,6 +845,9 @@ void TileManager::ScheduleTasks(
raster_worker_pool_->ScheduleTasks(&tasks);
did_check_for_completed_tasks_since_last_schedule_tasks_ = false;
+
+ gpu_rasterizer_->Rasterize(gpu_raster_tasks,
+ rendering_stats_instrumentation_);
}
RasterWorkerPool::Task TileManager::CreateImageDecodeTask(
@@ -964,6 +980,27 @@ void TileManager::OnRasterTaskCompleted(
did_initialize_visible_tile_ = true;
}
+void TileManager::OnGpuRasterTaskCompleted(
+ Tile* tile,
+ scoped_ptr<ResourcePool::Resource> resource) {
+ ManagedTileState& mts = tile->managed_state();
+ ManagedTileState::TileVersion& tile_version =
+ mts.tile_versions[mts.raster_mode];
+ DCHECK(tile_version.raster_task_.is_null());
+
+ ++update_visible_tiles_stats_.completed_count;
+
+ tile_version.set_use_resource();
+ tile_version.resource_ = resource.Pass();
+
+ bytes_releasable_ += BytesConsumedIfAllocated(tile);
+ ++resources_releasable_;
+
+ FreeUnusedResourcesForTile(tile);
+ if (tile->priority(ACTIVE_TREE).distance_to_visible_in_pixels == 0)
+ did_initialize_visible_tile_ = true;
+}
+
scoped_refptr<Tile> TileManager::CreateTile(PicturePileImpl* picture_pile,
gfx::Size tile_size,
gfx::Rect content_rect,
@@ -971,7 +1008,8 @@ scoped_refptr<Tile> TileManager::CreateTile(PicturePileImpl* picture_pile,
float contents_scale,
int layer_id,
int source_frame_number,
- bool can_use_lcd_text) {
+ bool can_use_lcd_text,
+ bool use_gpu_rasterizer) {
scoped_refptr<Tile> tile = make_scoped_refptr(new Tile(this,
picture_pile,
tile_size,
@@ -980,7 +1018,8 @@ scoped_refptr<Tile> TileManager::CreateTile(PicturePileImpl* picture_pile,
contents_scale,
layer_id,
source_frame_number,
- can_use_lcd_text));
+ can_use_lcd_text,
+ use_gpu_rasterizer));
DCHECK(tiles_.find(tile->id()) == tiles_.end());
tiles_[tile->id()] = tile;

Powered by Google App Engine
This is Rietveld 408576698