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

Side by Side Diff: cc/trees/layer_tree_host_impl.cc

Issue 699073004: content: Add command line flag for native GPU memory buffers. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@gpu-memory-buffer-impl-unittests
Patch Set: rebase and use correct texture target Created 6 years, 1 month 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 unified diff | Download patch
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/trees/layer_tree_host_impl.h" 5 #include "cc/trees/layer_tree_host_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
144 // that time interval, and then uploads should have a chance to be processed. 144 // that time interval, and then uploads should have a chance to be processed.
145 size_t ms_per_frame = std::floor(1000.0 / refresh_rate); 145 size_t ms_per_frame = std::floor(1000.0 / refresh_rate);
146 size_t max_transfer_buffer_usage_bytes = 146 size_t max_transfer_buffer_usage_bytes =
147 ms_per_frame * kMaxBytesUploadedPerMs; 147 ms_per_frame * kMaxBytesUploadedPerMs;
148 148
149 // The context may request a lower limit based on the device capabilities. 149 // The context may request a lower limit based on the device capabilities.
150 return std::min(context_capabilities.max_transfer_buffer_usage_bytes, 150 return std::min(context_capabilities.max_transfer_buffer_usage_bytes,
151 max_transfer_buffer_usage_bytes); 151 max_transfer_buffer_usage_bytes);
152 } 152 }
153 153
154 unsigned GetMapImageTextureTarget(
155 const ContextProvider::Capabilities& context_capabilities) {
156 // TODO(reveman): This should be a setting passed to the compositor instead
157 // of hard-coded here. The target that need to be used depends on our choice
158 // of GpuMemoryBuffer type. Note: SURFACE_TEXTURE needs EXTERNAL_OES,
159 // IO_SURFACE needs RECTANGLE_ARB. crbug.com/431059
160 #if defined(OS_ANDROID)
161 if (context_capabilities.gpu.egl_image_external)
162 return GL_TEXTURE_EXTERNAL_OES;
163 #endif
164 if (context_capabilities.gpu.texture_rectangle)
165 return GL_TEXTURE_RECTANGLE_ARB;
166
167 return GL_TEXTURE_2D;
168 }
169
170 size_t GetMaxStagingResourceCount() { 154 size_t GetMaxStagingResourceCount() {
171 // Upper bound for number of staging resource to allow. 155 // Upper bound for number of staging resource to allow.
172 return 32; 156 return 32;
173 } 157 }
174 158
175 } // namespace 159 } // namespace
176 160
177 LayerTreeHostImpl::FrameData::FrameData() : has_no_damage(false) { 161 LayerTreeHostImpl::FrameData::FrameData() : has_no_damage(false) {
178 } 162 }
179 163
(...skipping 1777 matching lines...) Expand 10 before | Expand all | Expand 10 after
1957 scoped_ptr<ResourcePool>* staging_resource_pool) { 1941 scoped_ptr<ResourcePool>* staging_resource_pool) {
1958 base::SingleThreadTaskRunner* task_runner = 1942 base::SingleThreadTaskRunner* task_runner =
1959 proxy_->HasImplThread() ? proxy_->ImplThreadTaskRunner() 1943 proxy_->HasImplThread() ? proxy_->ImplThreadTaskRunner()
1960 : proxy_->MainThreadTaskRunner(); 1944 : proxy_->MainThreadTaskRunner();
1961 DCHECK(task_runner); 1945 DCHECK(task_runner);
1962 1946
1963 ContextProvider* context_provider = output_surface_->context_provider(); 1947 ContextProvider* context_provider = output_surface_->context_provider();
1964 bool should_use_zero_copy_rasterizer = 1948 bool should_use_zero_copy_rasterizer =
1965 settings_.use_zero_copy || IsSynchronousSingleThreaded(); 1949 settings_.use_zero_copy || IsSynchronousSingleThreaded();
1966 1950
1951 unsigned image_target = GL_TEXTURE_2D;
1952 #if defined(OS_MACOSX)
1953 // GL_TEXTURE_RECTANGLE_ARB target is required by IOSurface backed images.
1954 DCHECK(context_provider->ContextCapabilities().gpu.texture_rectangle);
1955 image_target = GL_TEXTURE_RECTANGLE_ARB;
1956 #endif
1957 if (settings_.use_image_external) {
1958 DCHECK(context_provider->ContextCapabilities().gpu.egl_image_external);
1959 image_target = GL_TEXTURE_EXTERNAL_OES;
1960 }
1961
1967 if (!context_provider) { 1962 if (!context_provider) {
1968 *resource_pool = 1963 *resource_pool =
1969 ResourcePool::Create(resource_provider_.get(), 1964 ResourcePool::Create(resource_provider_.get(),
1970 GL_TEXTURE_2D, 1965 GL_TEXTURE_2D,
1971 resource_provider_->best_texture_format()); 1966 resource_provider_->best_texture_format());
1972 1967
1973 *raster_worker_pool = 1968 *raster_worker_pool =
1974 BitmapRasterWorkerPool::Create(task_runner, 1969 BitmapRasterWorkerPool::Create(task_runner,
1975 RasterWorkerPool::GetTaskGraphRunner(), 1970 RasterWorkerPool::GetTaskGraphRunner(),
1976 resource_provider_.get()); 1971 resource_provider_.get());
1977 } else if (use_gpu_rasterization_) { 1972 } else if (use_gpu_rasterization_) {
1978 *resource_pool = 1973 *resource_pool =
1979 ResourcePool::Create(resource_provider_.get(), 1974 ResourcePool::Create(resource_provider_.get(),
1980 GL_TEXTURE_2D, 1975 GL_TEXTURE_2D,
1981 resource_provider_->best_texture_format()); 1976 resource_provider_->best_texture_format());
1982 1977
1983 *raster_worker_pool = 1978 *raster_worker_pool =
1984 GpuRasterWorkerPool::Create(task_runner, 1979 GpuRasterWorkerPool::Create(task_runner,
1985 context_provider, 1980 context_provider,
1986 resource_provider_.get(), 1981 resource_provider_.get(),
1987 settings_.use_distance_field_text); 1982 settings_.use_distance_field_text);
1988 } else if (should_use_zero_copy_rasterizer && CanUseZeroCopyRasterizer()) { 1983 } else if (should_use_zero_copy_rasterizer && CanUseZeroCopyRasterizer()) {
1989 *resource_pool = ResourcePool::Create( 1984 *resource_pool =
1990 resource_provider_.get(), 1985 ResourcePool::Create(resource_provider_.get(), image_target,
1991 GetMapImageTextureTarget(context_provider->ContextCapabilities()), 1986 resource_provider_->best_texture_format());
1992 resource_provider_->best_texture_format());
1993 1987
1994 TaskGraphRunner* task_graph_runner; 1988 TaskGraphRunner* task_graph_runner;
1995 if (IsSynchronousSingleThreaded()) { 1989 if (IsSynchronousSingleThreaded()) {
1996 DCHECK(!single_thread_synchronous_task_graph_runner_); 1990 DCHECK(!single_thread_synchronous_task_graph_runner_);
1997 single_thread_synchronous_task_graph_runner_.reset(new TaskGraphRunner); 1991 single_thread_synchronous_task_graph_runner_.reset(new TaskGraphRunner);
1998 task_graph_runner = single_thread_synchronous_task_graph_runner_.get(); 1992 task_graph_runner = single_thread_synchronous_task_graph_runner_.get();
1999 } else { 1993 } else {
2000 task_graph_runner = RasterWorkerPool::GetTaskGraphRunner(); 1994 task_graph_runner = RasterWorkerPool::GetTaskGraphRunner();
2001 } 1995 }
2002 1996
2003 *raster_worker_pool = ZeroCopyRasterWorkerPool::Create( 1997 *raster_worker_pool = ZeroCopyRasterWorkerPool::Create(
2004 task_runner, task_graph_runner, resource_provider_.get()); 1998 task_runner, task_graph_runner, resource_provider_.get());
2005 } else if (settings_.use_one_copy && CanUseOneCopyRasterizer()) { 1999 } else if (settings_.use_one_copy && CanUseOneCopyRasterizer()) {
2006 // We need to create a staging resource pool when using copy rasterizer. 2000 // We need to create a staging resource pool when using copy rasterizer.
2007 *staging_resource_pool = ResourcePool::Create( 2001 *staging_resource_pool =
2008 resource_provider_.get(), 2002 ResourcePool::Create(resource_provider_.get(), image_target,
2009 GetMapImageTextureTarget(context_provider->ContextCapabilities()), 2003 resource_provider_->best_texture_format());
2010 resource_provider_->best_texture_format());
2011 *resource_pool = 2004 *resource_pool =
2012 ResourcePool::Create(resource_provider_.get(), 2005 ResourcePool::Create(resource_provider_.get(),
2013 GL_TEXTURE_2D, 2006 GL_TEXTURE_2D,
2014 resource_provider_->best_texture_format()); 2007 resource_provider_->best_texture_format());
2015 2008
2016 *raster_worker_pool = 2009 *raster_worker_pool =
2017 OneCopyRasterWorkerPool::Create(task_runner, 2010 OneCopyRasterWorkerPool::Create(task_runner,
2018 RasterWorkerPool::GetTaskGraphRunner(), 2011 RasterWorkerPool::GetTaskGraphRunner(),
2019 context_provider, 2012 context_provider,
2020 resource_provider_.get(), 2013 resource_provider_.get(),
(...skipping 1410 matching lines...) Expand 10 before | Expand all | Expand 10 after
3431 } 3424 }
3432 3425
3433 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { 3426 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) {
3434 std::vector<PictureLayerImpl*>::iterator it = 3427 std::vector<PictureLayerImpl*>::iterator it =
3435 std::find(picture_layers_.begin(), picture_layers_.end(), layer); 3428 std::find(picture_layers_.begin(), picture_layers_.end(), layer);
3436 DCHECK(it != picture_layers_.end()); 3429 DCHECK(it != picture_layers_.end());
3437 picture_layers_.erase(it); 3430 picture_layers_.erase(it);
3438 } 3431 }
3439 3432
3440 } // namespace cc 3433 } // namespace cc
OLDNEW
« no previous file with comments | « no previous file | cc/trees/layer_tree_settings.h » ('j') | content/common/gpu/client/gpu_memory_buffer_impl.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698