| Index: cc/resources/tile_manager.cc
|
| diff --git a/cc/resources/tile_manager.cc b/cc/resources/tile_manager.cc
|
| index 84842fee29bcad56305bde3af6928c0bc7550074..155f8542f22af129f854e4b18888de48301cdcb7 100644
|
| --- a/cc/resources/tile_manager.cc
|
| +++ b/cc/resources/tile_manager.cc
|
| @@ -168,9 +168,11 @@ 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,
|
| + bool use_ganesh,
|
| size_t max_transfer_buffer_usage_bytes,
|
| size_t max_raster_usage_bytes) {
|
| return make_scoped_ptr(
|
| @@ -183,6 +185,10 @@ scoped_ptr<TileManager> TileManager::Create(
|
| resource_provider,
|
| num_raster_threads,
|
| max_transfer_buffer_usage_bytes),
|
| + use_ganesh ?
|
| + GaneshRasterizer::Create(
|
| + context_provider, resource_provider)
|
| + : scoped_ptr<GaneshRasterizer>(),
|
| num_raster_threads,
|
| max_raster_usage_bytes,
|
| rendering_stats_instrumentation));
|
| @@ -192,12 +198,14 @@ TileManager::TileManager(
|
| TileManagerClient* client,
|
| ResourceProvider* resource_provider,
|
| scoped_ptr<RasterWorkerPool> raster_worker_pool,
|
| + scoped_ptr<GaneshRasterizer> ganesh_rasterizer,
|
| size_t num_raster_threads,
|
| size_t max_raster_usage_bytes,
|
| RenderingStatsInstrumentation* rendering_stats_instrumentation)
|
| : client_(client),
|
| resource_pool_(ResourcePool::Create(resource_provider)),
|
| raster_worker_pool_(raster_worker_pool.Pass()),
|
| + ganesh_rasterizer_(ganesh_rasterizer.Pass()),
|
| prioritized_tiles_dirty_(false),
|
| all_tiles_that_need_to_be_rasterized_have_memory_(true),
|
| all_tiles_required_for_activation_have_memory_(true),
|
| @@ -211,6 +219,8 @@ TileManager::TileManager(
|
| did_initialize_visible_tile_(false),
|
| did_check_for_completed_tasks_since_last_schedule_tasks_(true) {
|
| raster_worker_pool_->SetClient(this);
|
| + if (ganesh_rasterizer_)
|
| + ganesh_rasterizer_->SetClient(this);
|
| }
|
|
|
| TileManager::~TileManager() {
|
| @@ -588,6 +598,8 @@ RasterMode TileManager::DetermineRasterMode(const Tile* tile) const {
|
| const ManagedTileState& mts = tile->managed_state();
|
| RasterMode current_mode = mts.raster_mode;
|
|
|
| + // TODO(skaslev)
|
| + return GANESH_RASTER_MODE;
|
| RasterMode raster_mode = HIGH_QUALITY_RASTER_MODE;
|
| if (tile->managed_state().resolution == LOW_RESOLUTION)
|
| raster_mode = LOW_QUALITY_RASTER_MODE;
|
| @@ -797,6 +809,8 @@ void TileManager::ScheduleTasks(
|
|
|
| DCHECK(did_check_for_completed_tasks_since_last_schedule_tasks_);
|
|
|
| + GaneshRasterizer::RasterTaskVector ganesh_tasks;
|
| +
|
| // Build a new task queue containing all task currently needed. Tasks
|
| // are added in order of priority, highest priority task first.
|
| for (TileVector::const_iterator it = tiles_that_need_to_be_rasterized.begin();
|
| @@ -810,10 +824,16 @@ 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);
|
| + // TODO(skaslev) Set proper raster_mode somewhere else,
|
| + // e.g. AssignGpuMemoryToTiles.
|
| + if (mts.raster_mode == GANESH_RASTER_MODE) {
|
| + ganesh_tasks.push_back(CreateGaneshRasterTask(tile));
|
| + } else {
|
| + if (tile_version.raster_task_.is_null())
|
| + tile_version.raster_task_ = CreateRasterTask(tile);
|
|
|
| - tasks.Append(tile_version.raster_task_, tile->required_for_activation());
|
| + tasks.Append(tile_version.raster_task_, tile->required_for_activation());
|
| + }
|
| }
|
|
|
| // We must reduce the amount of unused resoruces before calling
|
| @@ -826,6 +846,11 @@ void TileManager::ScheduleTasks(
|
| raster_worker_pool_->ScheduleTasks(&tasks);
|
|
|
| did_check_for_completed_tasks_since_last_schedule_tasks_ = false;
|
| +
|
| + if (!ganesh_tasks.empty()) {
|
| + ganesh_rasterizer_->Rasterize(
|
| + ganesh_tasks, rendering_stats_instrumentation_);
|
| + }
|
| }
|
|
|
| RasterWorkerPool::Task TileManager::CreateImageDecodeTask(
|
| @@ -892,6 +917,13 @@ RasterWorkerPool::RasterTask TileManager::CreateRasterTask(Tile* tile) {
|
| &decode_tasks);
|
| }
|
|
|
| +GaneshRasterizer::RasterTask* TileManager::CreateGaneshRasterTask(Tile* tile) {
|
| + scoped_ptr<ResourcePool::Resource> resource =
|
| + resource_pool_->AcquireResource(tile->tile_size_.size(),
|
| + ganesh_rasterizer_->GetResourceFormat());
|
| + return ganesh_rasterizer_->CreateRasterTask(tile, resource.Pass());
|
| +}
|
| +
|
| void TileManager::OnImageDecodeTaskCompleted(
|
| int layer_id,
|
| skia::LazyPixelRef* pixel_ref,
|
| @@ -960,6 +992,34 @@ void TileManager::OnRasterTaskCompleted(
|
| did_initialize_visible_tile_ = true;
|
| }
|
|
|
| +void TileManager::OnGaneshRasterTaskCompleted(
|
| + Tile* tile,
|
| + scoped_ptr<ResourcePool::Resource> resource,
|
| + bool was_canceled) {
|
| + ManagedTileState& mts = tile->managed_state();
|
| + ManagedTileState::TileVersion& tile_version =
|
| + mts.tile_versions[GANESH_RASTER_MODE];
|
| + DCHECK(tile_version.raster_task_.is_null());
|
| +
|
| + if (was_canceled) {
|
| + ++update_visible_tiles_stats_.canceled_count;
|
| + resource_pool_->ReleaseResource(resource.Pass());
|
| + return;
|
| + }
|
| +
|
| + ++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,
|
|
|