Index: cc/trees/layer_tree_host_impl.cc |
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc |
index ea30d8517395eed55d388bf2db0c7048ea3c3353..b3e1a6f8ae44364142695225cd868f2e2df321ed 100644 |
--- a/cc/trees/layer_tree_host_impl.cc |
+++ b/cc/trees/layer_tree_host_impl.cc |
@@ -312,7 +312,7 @@ void LayerTreeHostImpl::CommitComplete() { |
// more lazily when needed prior to drawing. |
sync_tree()->UpdateDrawProperties(); |
// Start working on newly created tiles immediately if needed. |
- if (tile_manager_ && tile_priorities_dirty_) |
+ if (tile_manager_ && tile_priorities_dirty_ && !use_gpu_rasterization_) |
ManageTiles(); |
else |
NotifyReadyToActivate(); |
@@ -386,11 +386,23 @@ void LayerTreeHostImpl::Animate(base::TimeTicks monotonic_time) { |
AnimateTopControls(monotonic_time); |
} |
+void LayerTreeHostImpl::RasterizeTiles() { |
+ if (!tile_manager_) |
+ return; |
+ if (!tile_priorities_dirty_) |
+ return; |
+ |
+ tile_priorities_dirty_ = false; |
+ tile_manager_->RasterizeTiles(global_tile_state_); |
+} |
+ |
void LayerTreeHostImpl::ManageTiles() { |
if (!tile_manager_) |
return; |
if (!tile_priorities_dirty_) |
return; |
+ if (use_gpu_rasterization_) |
+ return; |
tile_priorities_dirty_ = false; |
tile_manager_->ManageTiles(global_tile_state_); |
@@ -1070,6 +1082,9 @@ DrawResult LayerTreeHostImpl::PrepareToDraw(FrameData* frame) { |
bool ok = active_tree_->UpdateDrawProperties(); |
DCHECK(ok) << "UpdateDrawProperties failed during draw"; |
+ if (use_gpu_rasterization_) |
+ RasterizeTiles(); |
+ |
frame->render_surface_layer_list = &active_tree_->RenderSurfaceLayerList(); |
frame->render_passes.clear(); |
frame->render_passes_by_id.clear(); |
@@ -1863,7 +1878,7 @@ void LayerTreeHostImpl::SetVisible(bool visible) { |
// Evict tiles immediately if invisible since this tab may never get another |
// draw or timer tick. |
- if (!visible_) |
+ if (!visible_ && !use_gpu_rasterization_) |
ManageTiles(); |
if (!renderer_) |
@@ -1957,8 +1972,8 @@ void LayerTreeHostImpl::CreateAndSetTileManager() { |
DCHECK(output_surface_); |
DCHECK(resource_provider_); |
- CreateResourceAndRasterWorkerPool( |
- &raster_worker_pool_, &resource_pool_, &staging_resource_pool_); |
+ CreateResourceAndRasterWorkerPool(&raster_worker_pool_, &gpu_rasterizer_, |
+ &resource_pool_, &staging_resource_pool_); |
DCHECK(raster_worker_pool_); |
DCHECK(resource_pool_); |
@@ -1969,18 +1984,17 @@ void LayerTreeHostImpl::CreateAndSetTileManager() { |
size_t scheduled_raster_task_limit = |
IsSynchronousSingleThreaded() ? std::numeric_limits<size_t>::max() |
: settings_.scheduled_raster_task_limit; |
- tile_manager_ = TileManager::Create(this, |
- task_runner, |
- resource_pool_.get(), |
- raster_worker_pool_->AsRasterizer(), |
- rendering_stats_instrumentation_, |
- scheduled_raster_task_limit); |
+ tile_manager_ = TileManager::Create( |
+ this, task_runner, resource_pool_.get(), |
+ raster_worker_pool_->AsRasterizer(), gpu_rasterizer_.get(), |
+ rendering_stats_instrumentation_, scheduled_raster_task_limit); |
UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy()); |
} |
void LayerTreeHostImpl::CreateResourceAndRasterWorkerPool( |
scoped_ptr<RasterWorkerPool>* raster_worker_pool, |
+ scoped_ptr<GpuRasterizer>* gpu_rasterizer, |
scoped_ptr<ResourcePool>* resource_pool, |
scoped_ptr<ResourcePool>* staging_resource_pool) { |
base::SingleThreadTaskRunner* task_runner = |
@@ -2013,6 +2027,11 @@ void LayerTreeHostImpl::CreateResourceAndRasterWorkerPool( |
context_provider, |
resource_provider_.get(), |
settings_.use_distance_field_text); |
+ |
+ *gpu_rasterizer = |
+ GpuRasterizer::Create(context_provider, resource_provider_.get(), |
+ settings_.use_distance_field_text); |
+ |
return; |
} |
@@ -2079,6 +2098,7 @@ void LayerTreeHostImpl::DestroyTileManager() { |
resource_pool_ = nullptr; |
staging_resource_pool_ = nullptr; |
raster_worker_pool_ = nullptr; |
+ gpu_rasterizer_ = nullptr; |
single_thread_synchronous_task_graph_runner_ = nullptr; |
} |