| 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 e49dcfec0392399e8d24aaba917436b782615605..75939658fbec641fd8e1f30f6e3b8d50ee53dd18 100644
|
| --- a/cc/trees/layer_tree_host_impl.cc
|
| +++ b/cc/trees/layer_tree_host_impl.cc
|
| @@ -151,22 +151,6 @@ size_t GetMaxTransferBufferUsageBytes(
|
| max_transfer_buffer_usage_bytes);
|
| }
|
|
|
| -unsigned GetMapImageTextureTarget(
|
| - const ContextProvider::Capabilities& context_capabilities) {
|
| -// TODO(reveman): This should be a setting passed to the compositor instead
|
| -// of hard-coded here. The target that need to be used depends on our choice
|
| -// of GpuMemoryBuffer type. Note: SURFACE_TEXTURE needs EXTERNAL_OES,
|
| -// IO_SURFACE needs RECTANGLE_ARB. crbug.com/431059
|
| -#if defined(OS_ANDROID)
|
| - if (context_capabilities.gpu.egl_image_external)
|
| - return GL_TEXTURE_EXTERNAL_OES;
|
| -#endif
|
| - if (context_capabilities.gpu.texture_rectangle)
|
| - return GL_TEXTURE_RECTANGLE_ARB;
|
| -
|
| - return GL_TEXTURE_2D;
|
| -}
|
| -
|
| size_t GetMaxStagingResourceCount() {
|
| // Upper bound for number of staging resource to allow.
|
| return 32;
|
| @@ -2005,9 +1989,6 @@ void LayerTreeHostImpl::CreateResourceAndRasterWorkerPool(
|
| DCHECK(task_runner);
|
|
|
| ContextProvider* context_provider = output_surface_->context_provider();
|
| - bool should_use_zero_copy_rasterizer =
|
| - settings_.use_zero_copy || IsSynchronousSingleThreaded();
|
| -
|
| if (!context_provider) {
|
| *resource_pool =
|
| ResourcePool::Create(resource_provider_.get(),
|
| @@ -2018,7 +1999,10 @@ void LayerTreeHostImpl::CreateResourceAndRasterWorkerPool(
|
| BitmapRasterWorkerPool::Create(task_runner,
|
| RasterWorkerPool::GetTaskGraphRunner(),
|
| resource_provider_.get());
|
| - } else if (use_gpu_rasterization_) {
|
| + return;
|
| + }
|
| +
|
| + if (use_gpu_rasterization_) {
|
| *resource_pool =
|
| ResourcePool::Create(resource_provider_.get(),
|
| GL_TEXTURE_2D,
|
| @@ -2029,53 +2013,65 @@ void LayerTreeHostImpl::CreateResourceAndRasterWorkerPool(
|
| context_provider,
|
| resource_provider_.get(),
|
| settings_.use_distance_field_text);
|
| - } else if (should_use_zero_copy_rasterizer && CanUseZeroCopyRasterizer()) {
|
| - *resource_pool = ResourcePool::Create(
|
| - resource_provider_.get(),
|
| - GetMapImageTextureTarget(context_provider->ContextCapabilities()),
|
| - resource_provider_->best_texture_format());
|
| -
|
| - TaskGraphRunner* task_graph_runner;
|
| - if (IsSynchronousSingleThreaded()) {
|
| - 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();
|
| - } else {
|
| - task_graph_runner = RasterWorkerPool::GetTaskGraphRunner();
|
| + return;
|
| + }
|
| +
|
| + if (GetRendererCapabilities().using_image) {
|
| + unsigned image_target = GL_TEXTURE_2D;
|
| +#if defined(OS_MACOSX)
|
| + // GL_TEXTURE_RECTANGLE_ARB target is required by IOSurface backed images.
|
| + DCHECK(context_provider->ContextCapabilities().gpu.texture_rectangle);
|
| + image_target = GL_TEXTURE_RECTANGLE_ARB;
|
| +#endif
|
| + if (settings_.use_image_external) {
|
| + DCHECK(context_provider->ContextCapabilities().gpu.egl_image_external);
|
| + image_target = GL_TEXTURE_EXTERNAL_OES;
|
| }
|
|
|
| - *raster_worker_pool = ZeroCopyRasterWorkerPool::Create(
|
| - task_runner, task_graph_runner, resource_provider_.get());
|
| - } else if (settings_.use_one_copy && CanUseOneCopyRasterizer()) {
|
| - // We need to create a staging resource pool when using copy rasterizer.
|
| - *staging_resource_pool = ResourcePool::Create(
|
| - resource_provider_.get(),
|
| - GetMapImageTextureTarget(context_provider->ContextCapabilities()),
|
| - resource_provider_->best_texture_format());
|
| - *resource_pool =
|
| - ResourcePool::Create(resource_provider_.get(),
|
| - GL_TEXTURE_2D,
|
| - resource_provider_->best_texture_format());
|
| + if (settings_.use_zero_copy || IsSynchronousSingleThreaded()) {
|
| + *resource_pool =
|
| + ResourcePool::Create(resource_provider_.get(), image_target,
|
| + resource_provider_->best_texture_format());
|
| +
|
| + TaskGraphRunner* task_graph_runner;
|
| + if (IsSynchronousSingleThreaded()) {
|
| + 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();
|
| + } else {
|
| + task_graph_runner = RasterWorkerPool::GetTaskGraphRunner();
|
| + }
|
|
|
| - *raster_worker_pool =
|
| - OneCopyRasterWorkerPool::Create(task_runner,
|
| - RasterWorkerPool::GetTaskGraphRunner(),
|
| - context_provider,
|
| - resource_provider_.get(),
|
| - staging_resource_pool_.get());
|
| - } else {
|
| - *resource_pool = ResourcePool::Create(
|
| - resource_provider_.get(),
|
| - GL_TEXTURE_2D,
|
| - resource_provider_->memory_efficient_texture_format());
|
| + *raster_worker_pool = ZeroCopyRasterWorkerPool::Create(
|
| + task_runner, task_graph_runner, resource_provider_.get());
|
| + return;
|
| + }
|
|
|
| - *raster_worker_pool = PixelBufferRasterWorkerPool::Create(
|
| - task_runner, RasterWorkerPool::GetTaskGraphRunner(), context_provider,
|
| - resource_provider_.get(),
|
| - GetMaxTransferBufferUsageBytes(
|
| - context_provider->ContextCapabilities(),
|
| - settings_.renderer_settings.refresh_rate));
|
| + if (settings_.use_one_copy) {
|
| + // We need to create a staging resource pool when using copy rasterizer.
|
| + *staging_resource_pool =
|
| + ResourcePool::Create(resource_provider_.get(), image_target,
|
| + resource_provider_->best_texture_format());
|
| + *resource_pool =
|
| + ResourcePool::Create(resource_provider_.get(), GL_TEXTURE_2D,
|
| + resource_provider_->best_texture_format());
|
| +
|
| + *raster_worker_pool = OneCopyRasterWorkerPool::Create(
|
| + task_runner, RasterWorkerPool::GetTaskGraphRunner(), context_provider,
|
| + resource_provider_.get(), staging_resource_pool_.get());
|
| + return;
|
| + }
|
| }
|
| +
|
| + *resource_pool = ResourcePool::Create(
|
| + resource_provider_.get(), GL_TEXTURE_2D,
|
| + resource_provider_->memory_efficient_texture_format());
|
| +
|
| + *raster_worker_pool = PixelBufferRasterWorkerPool::Create(
|
| + task_runner, RasterWorkerPool::GetTaskGraphRunner(), context_provider,
|
| + resource_provider_.get(),
|
| + GetMaxTransferBufferUsageBytes(context_provider->ContextCapabilities(),
|
| + settings_.renderer_settings.refresh_rate));
|
| }
|
|
|
| void LayerTreeHostImpl::DestroyTileManager() {
|
| @@ -2096,14 +2092,6 @@ bool LayerTreeHostImpl::IsSynchronousSingleThreaded() const {
|
| return !proxy_->HasImplThread() && !settings_.single_thread_proxy_scheduler;
|
| }
|
|
|
| -bool LayerTreeHostImpl::CanUseZeroCopyRasterizer() const {
|
| - return GetRendererCapabilities().using_image;
|
| -}
|
| -
|
| -bool LayerTreeHostImpl::CanUseOneCopyRasterizer() const {
|
| - return GetRendererCapabilities().using_image;
|
| -}
|
| -
|
| void LayerTreeHostImpl::EnforceZeroBudget(bool zero_budget) {
|
| SetManagedMemoryPolicy(cached_managed_memory_policy_, zero_budget);
|
| }
|
|
|