Index: cc/resources/tile_manager.cc |
diff --git a/cc/resources/tile_manager.cc b/cc/resources/tile_manager.cc |
index 17f45250c51e9afc455f9714752a554889228778..46f9df3dccdafa4626d446589ea58fccbd59f310 100644 |
--- a/cc/resources/tile_manager.cc |
+++ b/cc/resources/tile_manager.cc |
@@ -167,6 +167,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, |
@@ -176,6 +177,8 @@ scoped_ptr<TileManager> TileManager::Create( |
return make_scoped_ptr( |
new TileManager(client, |
resource_provider, |
+ GpuRasterizer::Create( |
+ context_provider, resource_provider), |
use_map_image ? |
ImageRasterWorkerPool::Create( |
resource_provider, |
@@ -193,6 +196,7 @@ scoped_ptr<TileManager> TileManager::Create( |
TileManager::TileManager( |
TileManagerClient* client, |
ResourceProvider* resource_provider, |
+ scoped_ptr<GpuRasterizer> gpu_rasterizer, |
scoped_ptr<RasterWorkerPool> raster_worker_pool, |
size_t num_raster_threads, |
size_t max_raster_usage_bytes, |
@@ -202,6 +206,7 @@ TileManager::TileManager( |
resource_provider, |
raster_worker_pool->GetResourceTarget(), |
raster_worker_pool->GetResourceFormat())), |
+ gpu_rasterizer_(gpu_rasterizer.Pass()), |
raster_worker_pool_(raster_worker_pool.Pass()), |
prioritized_tiles_dirty_(false), |
all_tiles_that_need_to_be_rasterized_have_memory_(true), |
@@ -215,6 +220,7 @@ TileManager::TileManager( |
rendering_stats_instrumentation_(rendering_stats_instrumentation), |
did_initialize_visible_tile_(false), |
did_check_for_completed_tasks_since_last_schedule_tasks_(true) { |
+ gpu_rasterizer_->SetClient(this); |
raster_worker_pool_->SetClient(this); |
} |
@@ -823,6 +829,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_); |
@@ -839,10 +846,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_rasterization()) { |
+ scoped_ptr<ScopedResource> 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 |
@@ -855,6 +869,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( |
@@ -987,6 +1004,27 @@ void TileManager::OnRasterTaskCompleted( |
did_initialize_visible_tile_ = true; |
} |
+void TileManager::OnGpuRasterTaskCompleted( |
+ Tile* tile, |
+ scoped_ptr<ScopedResource> 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->is_visible()) |
+ did_initialize_visible_tile_ = true; |
+} |
+ |
scoped_refptr<Tile> TileManager::CreateTile(PicturePileImpl* picture_pile, |
gfx::Size tile_size, |
gfx::Rect content_rect, |