| 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 f7e5bf6a368b93a47f257483afe58d5b78e99933..e4aaf8aa7e1352a4fca378a604f0116830e3a5b7 100644
|
| --- a/cc/trees/layer_tree_host_impl.cc
|
| +++ b/cc/trees/layer_tree_host_impl.cc
|
| @@ -46,6 +46,7 @@
|
| #include "cc/quads/shared_quad_state.h"
|
| #include "cc/quads/solid_color_draw_quad.h"
|
| #include "cc/quads/texture_draw_quad.h"
|
| +#include "cc/resources/bitmap_raster_worker_pool.h"
|
| #include "cc/resources/eviction_tile_priority_queue.h"
|
| #include "cc/resources/gpu_raster_worker_pool.h"
|
| #include "cc/resources/memory_history.h"
|
| @@ -74,9 +75,10 @@
|
| #include "ui/gfx/size_conversions.h"
|
| #include "ui/gfx/vector2d_conversions.h"
|
|
|
| +namespace cc {
|
| namespace {
|
|
|
| -void DidVisibilityChange(cc::LayerTreeHostImpl* id, bool visible) {
|
| +void DidVisibilityChange(LayerTreeHostImpl* id, bool visible) {
|
| if (visible) {
|
| TRACE_EVENT_ASYNC_BEGIN1("webkit",
|
| "LayerTreeHostImpl::SetVisible",
|
| @@ -89,13 +91,9 @@ void DidVisibilityChange(cc::LayerTreeHostImpl* id, bool visible) {
|
| TRACE_EVENT_ASYNC_END0("webkit", "LayerTreeHostImpl::SetVisible", id);
|
| }
|
|
|
| -size_t GetMaxTransferBufferUsageBytes(cc::ContextProvider* context_provider,
|
| - double refresh_rate) {
|
| - // Software compositing should not use this value in production. Just use a
|
| - // default value when testing uploads with the software compositor.
|
| - if (!context_provider)
|
| - return std::numeric_limits<size_t>::max();
|
| -
|
| +size_t GetMaxTransferBufferUsageBytes(
|
| + const ContextProvider::Capabilities& context_capabilities,
|
| + double refresh_rate) {
|
| // We want to make sure the default transfer buffer size is equal to the
|
| // amount of data that can be uploaded by the compositor to avoid stalling
|
| // the pipeline.
|
| @@ -112,18 +110,15 @@ size_t GetMaxTransferBufferUsageBytes(cc::ContextProvider* context_provider,
|
| ms_per_frame * kMaxBytesUploadedPerMs;
|
|
|
| // The context may request a lower limit based on the device capabilities.
|
| - return std::min(
|
| - context_provider->ContextCapabilities().max_transfer_buffer_usage_bytes,
|
| - max_transfer_buffer_usage_bytes);
|
| + return std::min(context_capabilities.max_transfer_buffer_usage_bytes,
|
| + max_transfer_buffer_usage_bytes);
|
| }
|
|
|
| -unsigned GetMapImageTextureTarget(cc::ContextProvider* context_provider) {
|
| - if (!context_provider)
|
| - return GL_TEXTURE_2D;
|
| -
|
| - if (context_provider->ContextCapabilities().gpu.egl_image_external)
|
| +unsigned GetMapImageTextureTarget(
|
| + const ContextProvider::Capabilities& context_capabilities) {
|
| + if (context_capabilities.gpu.egl_image_external)
|
| return GL_TEXTURE_EXTERNAL_OES;
|
| - if (context_provider->ContextCapabilities().gpu.texture_rectangle)
|
| + if (context_capabilities.gpu.texture_rectangle)
|
| return GL_TEXTURE_RECTANGLE_ARB;
|
|
|
| return GL_TEXTURE_2D;
|
| @@ -136,8 +131,6 @@ size_t GetMaxStagingResourceCount() {
|
|
|
| } // namespace
|
|
|
| -namespace cc {
|
| -
|
| class LayerTreeHostImplTimeSourceAdapter : public TimeSourceClient {
|
| public:
|
| static scoped_ptr<LayerTreeHostImplTimeSourceAdapter> Create(
|
| @@ -1966,7 +1959,17 @@ void LayerTreeHostImpl::CreateAndSetTileManager() {
|
| DCHECK(proxy_->ImplThreadTaskRunner());
|
|
|
| ContextProvider* context_provider = output_surface_->context_provider();
|
| - if (use_gpu_rasterization_ && context_provider) {
|
| + if (!context_provider) {
|
| + resource_pool_ =
|
| + ResourcePool::Create(resource_provider_.get(),
|
| + GL_TEXTURE_2D,
|
| + resource_provider_->best_texture_format());
|
| +
|
| + raster_worker_pool_ =
|
| + BitmapRasterWorkerPool::Create(proxy_->ImplThreadTaskRunner(),
|
| + RasterWorkerPool::GetTaskGraphRunner(),
|
| + resource_provider_.get());
|
| + } else if (use_gpu_rasterization_) {
|
| resource_pool_ =
|
| ResourcePool::Create(resource_provider_.get(),
|
| GL_TEXTURE_2D,
|
| @@ -1976,12 +1979,22 @@ void LayerTreeHostImpl::CreateAndSetTileManager() {
|
| GpuRasterWorkerPool::Create(proxy_->ImplThreadTaskRunner(),
|
| context_provider,
|
| resource_provider_.get());
|
| - } else if (UseOneCopyRasterizer() && context_provider) {
|
| + } else if (UseZeroCopyRasterizer()) {
|
| + resource_pool_ = ResourcePool::Create(
|
| + resource_provider_.get(),
|
| + GetMapImageTextureTarget(context_provider->ContextCapabilities()),
|
| + resource_provider_->best_texture_format());
|
| +
|
| + raster_worker_pool_ =
|
| + ZeroCopyRasterWorkerPool::Create(proxy_->ImplThreadTaskRunner(),
|
| + RasterWorkerPool::GetTaskGraphRunner(),
|
| + resource_provider_.get());
|
| + } else if (UseOneCopyRasterizer()) {
|
| // We need to create a staging resource pool when using copy rasterizer.
|
| - staging_resource_pool_ =
|
| - ResourcePool::Create(resource_provider_.get(),
|
| - GetMapImageTextureTarget(context_provider),
|
| - resource_provider_->best_texture_format());
|
| + 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,
|
| @@ -1993,7 +2006,7 @@ void LayerTreeHostImpl::CreateAndSetTileManager() {
|
| context_provider,
|
| resource_provider_.get(),
|
| staging_resource_pool_.get());
|
| - } else if (!UseZeroCopyRasterizer() && context_provider) {
|
| + } else {
|
| resource_pool_ = ResourcePool::Create(
|
| resource_provider_.get(),
|
| GL_TEXTURE_2D,
|
| @@ -2004,18 +2017,8 @@ void LayerTreeHostImpl::CreateAndSetTileManager() {
|
| RasterWorkerPool::GetTaskGraphRunner(),
|
| context_provider,
|
| resource_provider_.get(),
|
| - GetMaxTransferBufferUsageBytes(context_provider,
|
| + GetMaxTransferBufferUsageBytes(context_provider->ContextCapabilities(),
|
| settings_.refresh_rate));
|
| - } else {
|
| - resource_pool_ =
|
| - ResourcePool::Create(resource_provider_.get(),
|
| - GetMapImageTextureTarget(context_provider),
|
| - resource_provider_->best_texture_format());
|
| -
|
| - raster_worker_pool_ =
|
| - ZeroCopyRasterWorkerPool::Create(proxy_->ImplThreadTaskRunner(),
|
| - RasterWorkerPool::GetTaskGraphRunner(),
|
| - resource_provider_.get());
|
| }
|
|
|
| tile_manager_ =
|
| @@ -2043,11 +2046,7 @@ bool LayerTreeHostImpl::UsePendingTreeForSync() const {
|
| }
|
|
|
| bool LayerTreeHostImpl::UseZeroCopyRasterizer() const {
|
| - // Note: we use zero-copy by default when the renderer is using
|
| - // shared memory resources.
|
| - return (settings_.use_zero_copy ||
|
| - GetRendererCapabilities().using_shared_memory_resources) &&
|
| - GetRendererCapabilities().using_map_image;
|
| + return settings_.use_zero_copy && GetRendererCapabilities().using_map_image;
|
| }
|
|
|
| bool LayerTreeHostImpl::UseOneCopyRasterizer() const {
|
|
|