| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |