Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4229)

Unified Diff: cc/trees/layer_tree_host_impl.cc

Issue 602493003: cc: Add BitmapRasterWorkerPool. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@reduce-transfer-buffer-limit-use
Patch Set: fix unit test Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/resources/resource_provider_unittest.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 {
« no previous file with comments | « cc/resources/resource_provider_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698