| 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 e6897f2766fa9f3bd2b4e89d43a48663eba45b33..a7abc5abccd37d9d595ed826adc650d7333ad653 100644
|
| --- a/cc/trees/layer_tree_host_impl.cc
|
| +++ b/cc/trees/layer_tree_host_impl.cc
|
| @@ -1736,6 +1736,12 @@ void LayerTreeHostImpl::SetTopControlsLayoutHeight(float height) {
|
| SetFullRootLayerDamage();
|
| }
|
|
|
| +void LayerTreeHostImpl::SynchronouslyInitializeAllTiles() {
|
| + // Only valid for the single-threaded non-scheduled/synchronous case
|
| + // using the zero copy raster worker pool.
|
| + single_thread_synchronous_task_graph_runner_->RunUntilIdle();
|
| +}
|
| +
|
| void LayerTreeHostImpl::DidLoseOutputSurface() {
|
| if (resource_provider_)
|
| resource_provider_->DidLoseOutputSurface();
|
| @@ -2006,6 +2012,12 @@ void LayerTreeHostImpl::CreateAndSetTileManager() {
|
| DCHECK(task_runner);
|
|
|
| ContextProvider* context_provider = output_surface_->context_provider();
|
| + bool is_synchronous_single_threaded =
|
| + !proxy_->HasImplThread() && !settings_.single_thread_proxy_scheduler;
|
| + bool should_use_zero_copy_rasterizer =
|
| + settings_.use_zero_copy || is_synchronous_single_threaded;
|
| + size_t scheduled_raster_task_limit = settings_.scheduled_raster_task_limit;
|
| +
|
| if (!context_provider) {
|
| resource_pool_ =
|
| ResourcePool::Create(resource_provider_.get(),
|
| @@ -2013,7 +2025,7 @@ void LayerTreeHostImpl::CreateAndSetTileManager() {
|
| resource_provider_->best_texture_format());
|
|
|
| raster_worker_pool_ =
|
| - BitmapRasterWorkerPool::Create(proxy_->ImplThreadTaskRunner(),
|
| + BitmapRasterWorkerPool::Create(task_runner,
|
| RasterWorkerPool::GetTaskGraphRunner(),
|
| resource_provider_.get());
|
| } else if (use_gpu_rasterization_) {
|
| @@ -2027,16 +2039,24 @@ void LayerTreeHostImpl::CreateAndSetTileManager() {
|
| context_provider,
|
| resource_provider_.get(),
|
| settings_.use_distance_field_text);
|
| - } else if (UseZeroCopyRasterizer()) {
|
| + } else if (should_use_zero_copy_rasterizer && CanUseZeroCopyRasterizer()) {
|
| resource_pool_ = ResourcePool::Create(
|
| resource_provider_.get(),
|
| GetMapImageTextureTarget(context_provider->ContextCapabilities()),
|
| resource_provider_->best_texture_format());
|
|
|
| - raster_worker_pool_ =
|
| - ZeroCopyRasterWorkerPool::Create(task_runner,
|
| - RasterWorkerPool::GetTaskGraphRunner(),
|
| - resource_provider_.get());
|
| + TaskGraphRunner* task_graph_runner;
|
| + if (is_synchronous_single_threaded) {
|
| + DCHECK(!single_thread_synchronous_task_graph_runner_);
|
| + single_thread_synchronous_task_graph_runner_.reset(new TaskGraphRunner);
|
| + task_graph_runner = single_thread_synchronous_task_graph_runner_.get();
|
| + scheduled_raster_task_limit = std::numeric_limits<size_t>::max();
|
| + } else {
|
| + task_graph_runner = RasterWorkerPool::GetTaskGraphRunner();
|
| + }
|
| +
|
| + raster_worker_pool_ = ZeroCopyRasterWorkerPool::Create(
|
| + task_runner, task_graph_runner, resource_provider_.get());
|
| } else if (UseOneCopyRasterizer()) {
|
| // We need to create a staging resource pool when using copy rasterizer.
|
| staging_resource_pool_ = ResourcePool::Create(
|
| @@ -2074,7 +2094,7 @@ void LayerTreeHostImpl::CreateAndSetTileManager() {
|
| resource_pool_.get(),
|
| raster_worker_pool_->AsRasterizer(),
|
| rendering_stats_instrumentation_,
|
| - settings().scheduled_raster_task_limit);
|
| + scheduled_raster_task_limit);
|
|
|
| UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy());
|
| need_to_update_visible_tiles_before_draw_ = false;
|
| @@ -2085,6 +2105,7 @@ void LayerTreeHostImpl::DestroyTileManager() {
|
| resource_pool_ = nullptr;
|
| staging_resource_pool_ = nullptr;
|
| raster_worker_pool_ = nullptr;
|
| + single_thread_synchronous_task_graph_runner_ = nullptr;
|
| }
|
|
|
| bool LayerTreeHostImpl::UsePendingTreeForSync() const {
|
| @@ -2093,8 +2114,8 @@ bool LayerTreeHostImpl::UsePendingTreeForSync() const {
|
| return settings_.impl_side_painting;
|
| }
|
|
|
| -bool LayerTreeHostImpl::UseZeroCopyRasterizer() const {
|
| - return settings_.use_zero_copy && GetRendererCapabilities().using_image;
|
| +bool LayerTreeHostImpl::CanUseZeroCopyRasterizer() const {
|
| + return GetRendererCapabilities().using_image;
|
| }
|
|
|
| bool LayerTreeHostImpl::UseOneCopyRasterizer() const {
|
|
|