| 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 1993 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2004 void LayerTreeHostImpl::CreateAndSetTileManager() { | 2004 void LayerTreeHostImpl::CreateAndSetTileManager() { |
| 2005 DCHECK(!tile_manager_); | 2005 DCHECK(!tile_manager_); |
| 2006 DCHECK(settings_.impl_side_painting); | 2006 DCHECK(settings_.impl_side_painting); |
| 2007 DCHECK(output_surface_); | 2007 DCHECK(output_surface_); |
| 2008 DCHECK(resource_provider_); | 2008 DCHECK(resource_provider_); |
| 2009 base::SingleThreadTaskRunner* task_runner = | 2009 base::SingleThreadTaskRunner* task_runner = |
| 2010 proxy_->HasImplThread() ? proxy_->ImplThreadTaskRunner() | 2010 proxy_->HasImplThread() ? proxy_->ImplThreadTaskRunner() |
| 2011 : proxy_->MainThreadTaskRunner(); | 2011 : proxy_->MainThreadTaskRunner(); |
| 2012 DCHECK(task_runner); | 2012 DCHECK(task_runner); |
| 2013 | 2013 |
| 2014 CreateResourceAndRasterWorkerPool( |
| 2015 &raster_worker_pool_, &resource_pool_, &staging_resource_pool_); |
| 2016 DCHECK(raster_worker_pool_); |
| 2017 DCHECK(resource_pool_); |
| 2018 |
| 2019 tile_manager_ = TileManager::Create(this, |
| 2020 task_runner, |
| 2021 resource_pool_.get(), |
| 2022 raster_worker_pool_->AsRasterizer(), |
| 2023 rendering_stats_instrumentation_, |
| 2024 settings().scheduled_raster_task_limit); |
| 2025 |
| 2026 UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy()); |
| 2027 need_to_update_visible_tiles_before_draw_ = false; |
| 2028 } |
| 2029 |
| 2030 void LayerTreeHostImpl::CreateResourceAndRasterWorkerPool( |
| 2031 scoped_ptr<RasterWorkerPool>* raster_worker_pool, |
| 2032 scoped_ptr<ResourcePool>* resource_pool, |
| 2033 scoped_ptr<ResourcePool>* staging_resource_pool) { |
| 2034 base::SingleThreadTaskRunner* task_runner = |
| 2035 proxy_->HasImplThread() ? proxy_->ImplThreadTaskRunner() |
| 2036 : proxy_->MainThreadTaskRunner(); |
| 2037 DCHECK(task_runner); |
| 2038 |
| 2014 ContextProvider* context_provider = output_surface_->context_provider(); | 2039 ContextProvider* context_provider = output_surface_->context_provider(); |
| 2015 if (!context_provider) { | 2040 if (!context_provider) { |
| 2016 resource_pool_ = | 2041 *resource_pool = |
| 2017 ResourcePool::Create(resource_provider_.get(), | 2042 ResourcePool::Create(resource_provider_.get(), |
| 2018 GL_TEXTURE_2D, | 2043 GL_TEXTURE_2D, |
| 2019 resource_provider_->best_texture_format()); | 2044 resource_provider_->best_texture_format()); |
| 2020 | 2045 |
| 2021 raster_worker_pool_ = | 2046 *raster_worker_pool = |
| 2022 BitmapRasterWorkerPool::Create(proxy_->ImplThreadTaskRunner(), | 2047 BitmapRasterWorkerPool::Create(proxy_->ImplThreadTaskRunner(), |
| 2023 RasterWorkerPool::GetTaskGraphRunner(), | 2048 RasterWorkerPool::GetTaskGraphRunner(), |
| 2024 resource_provider_.get()); | 2049 resource_provider_.get()); |
| 2025 } else if (use_gpu_rasterization_) { | 2050 } else if (use_gpu_rasterization_) { |
| 2026 resource_pool_ = | 2051 *resource_pool = |
| 2027 ResourcePool::Create(resource_provider_.get(), | 2052 ResourcePool::Create(resource_provider_.get(), |
| 2028 GL_TEXTURE_2D, | 2053 GL_TEXTURE_2D, |
| 2029 resource_provider_->best_texture_format()); | 2054 resource_provider_->best_texture_format()); |
| 2030 | 2055 |
| 2031 raster_worker_pool_ = | 2056 *raster_worker_pool = |
| 2032 GpuRasterWorkerPool::Create(task_runner, | 2057 GpuRasterWorkerPool::Create(task_runner, |
| 2033 context_provider, | 2058 context_provider, |
| 2034 resource_provider_.get(), | 2059 resource_provider_.get(), |
| 2035 settings_.use_distance_field_text); | 2060 settings_.use_distance_field_text); |
| 2036 } else if (UseZeroCopyRasterizer()) { | 2061 } else if (settings_.use_zero_copy && CanUseZeroCopyRasterizer()) { |
| 2037 resource_pool_ = ResourcePool::Create( | 2062 *resource_pool = ResourcePool::Create( |
| 2038 resource_provider_.get(), | 2063 resource_provider_.get(), |
| 2039 GetMapImageTextureTarget(context_provider->ContextCapabilities()), | 2064 GetMapImageTextureTarget(context_provider->ContextCapabilities()), |
| 2040 resource_provider_->best_texture_format()); | 2065 resource_provider_->best_texture_format()); |
| 2041 | 2066 |
| 2042 raster_worker_pool_ = | 2067 *raster_worker_pool = |
| 2043 ZeroCopyRasterWorkerPool::Create(proxy_->ImplThreadTaskRunner(), | 2068 ZeroCopyRasterWorkerPool::Create(proxy_->ImplThreadTaskRunner(), |
| 2044 RasterWorkerPool::GetTaskGraphRunner(), | 2069 RasterWorkerPool::GetTaskGraphRunner(), |
| 2045 resource_provider_.get()); | 2070 resource_provider_.get()); |
| 2046 } else if (UseOneCopyRasterizer()) { | 2071 } else if (settings_.use_one_copy && CanUseOneCopyRasterizer()) { |
| 2047 // We need to create a staging resource pool when using copy rasterizer. | 2072 // We need to create a staging resource pool when using copy rasterizer. |
| 2048 staging_resource_pool_ = ResourcePool::Create( | 2073 *staging_resource_pool = ResourcePool::Create( |
| 2049 resource_provider_.get(), | 2074 resource_provider_.get(), |
| 2050 GetMapImageTextureTarget(context_provider->ContextCapabilities()), | 2075 GetMapImageTextureTarget(context_provider->ContextCapabilities()), |
| 2051 resource_provider_->best_texture_format()); | 2076 resource_provider_->best_texture_format()); |
| 2052 resource_pool_ = | 2077 *resource_pool = |
| 2053 ResourcePool::Create(resource_provider_.get(), | 2078 ResourcePool::Create(resource_provider_.get(), |
| 2054 GL_TEXTURE_2D, | 2079 GL_TEXTURE_2D, |
| 2055 resource_provider_->best_texture_format()); | 2080 resource_provider_->best_texture_format()); |
| 2056 | 2081 |
| 2057 raster_worker_pool_ = | 2082 *raster_worker_pool = |
| 2058 OneCopyRasterWorkerPool::Create(task_runner, | 2083 OneCopyRasterWorkerPool::Create(task_runner, |
| 2059 RasterWorkerPool::GetTaskGraphRunner(), | 2084 RasterWorkerPool::GetTaskGraphRunner(), |
| 2060 context_provider, | 2085 context_provider, |
| 2061 resource_provider_.get(), | 2086 resource_provider_.get(), |
| 2062 staging_resource_pool_.get()); | 2087 staging_resource_pool_.get()); |
| 2063 } else { | 2088 } else { |
| 2064 resource_pool_ = ResourcePool::Create( | 2089 *resource_pool = ResourcePool::Create( |
| 2065 resource_provider_.get(), | 2090 resource_provider_.get(), |
| 2066 GL_TEXTURE_2D, | 2091 GL_TEXTURE_2D, |
| 2067 resource_provider_->memory_efficient_texture_format()); | 2092 resource_provider_->memory_efficient_texture_format()); |
| 2068 | 2093 |
| 2069 raster_worker_pool_ = PixelBufferRasterWorkerPool::Create( | 2094 *raster_worker_pool = PixelBufferRasterWorkerPool::Create( |
| 2070 task_runner, | 2095 task_runner, |
| 2071 RasterWorkerPool::GetTaskGraphRunner(), | 2096 RasterWorkerPool::GetTaskGraphRunner(), |
| 2072 context_provider, | 2097 context_provider, |
| 2073 resource_provider_.get(), | 2098 resource_provider_.get(), |
| 2074 GetMaxTransferBufferUsageBytes(context_provider->ContextCapabilities(), | 2099 GetMaxTransferBufferUsageBytes(context_provider->ContextCapabilities(), |
| 2075 settings_.refresh_rate)); | 2100 settings_.refresh_rate)); |
| 2076 } | 2101 } |
| 2077 | |
| 2078 tile_manager_ = TileManager::Create(this, | |
| 2079 task_runner, | |
| 2080 resource_pool_.get(), | |
| 2081 raster_worker_pool_->AsRasterizer(), | |
| 2082 rendering_stats_instrumentation_, | |
| 2083 settings().scheduled_raster_task_limit); | |
| 2084 | |
| 2085 UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy()); | |
| 2086 need_to_update_visible_tiles_before_draw_ = false; | |
| 2087 } | 2102 } |
| 2088 | 2103 |
| 2089 void LayerTreeHostImpl::DestroyTileManager() { | 2104 void LayerTreeHostImpl::DestroyTileManager() { |
| 2090 tile_manager_ = nullptr; | 2105 tile_manager_ = nullptr; |
| 2091 resource_pool_ = nullptr; | 2106 resource_pool_ = nullptr; |
| 2092 staging_resource_pool_ = nullptr; | 2107 staging_resource_pool_ = nullptr; |
| 2093 raster_worker_pool_ = nullptr; | 2108 raster_worker_pool_ = nullptr; |
| 2094 } | 2109 } |
| 2095 | 2110 |
| 2096 bool LayerTreeHostImpl::UsePendingTreeForSync() const { | 2111 bool LayerTreeHostImpl::UsePendingTreeForSync() const { |
| 2097 // In impl-side painting, synchronize to the pending tree so that it has | 2112 // In impl-side painting, synchronize to the pending tree so that it has |
| 2098 // time to raster before being displayed. | 2113 // time to raster before being displayed. |
| 2099 return settings_.impl_side_painting; | 2114 return settings_.impl_side_painting; |
| 2100 } | 2115 } |
| 2101 | 2116 |
| 2102 bool LayerTreeHostImpl::UseZeroCopyRasterizer() const { | 2117 bool LayerTreeHostImpl::CanUseZeroCopyRasterizer() const { |
| 2103 return settings_.use_zero_copy && GetRendererCapabilities().using_image; | 2118 return GetRendererCapabilities().using_image; |
| 2104 } | 2119 } |
| 2105 | 2120 |
| 2106 bool LayerTreeHostImpl::UseOneCopyRasterizer() const { | 2121 bool LayerTreeHostImpl::CanUseOneCopyRasterizer() const { |
| 2107 // Sync query support is required by one-copy rasterizer. | 2122 // Sync query support is required by one-copy rasterizer. |
| 2108 return settings_.use_one_copy && GetRendererCapabilities().using_image && | 2123 return GetRendererCapabilities().using_image && |
| 2109 resource_provider_->use_sync_query(); | 2124 resource_provider_->use_sync_query(); |
| 2110 } | 2125 } |
| 2111 | 2126 |
| 2112 void LayerTreeHostImpl::EnforceZeroBudget(bool zero_budget) { | 2127 void LayerTreeHostImpl::EnforceZeroBudget(bool zero_budget) { |
| 2113 SetManagedMemoryPolicy(cached_managed_memory_policy_, zero_budget); | 2128 SetManagedMemoryPolicy(cached_managed_memory_policy_, zero_budget); |
| 2114 } | 2129 } |
| 2115 | 2130 |
| 2116 bool LayerTreeHostImpl::InitializeRenderer( | 2131 bool LayerTreeHostImpl::InitializeRenderer( |
| 2117 scoped_ptr<OutputSurface> output_surface) { | 2132 scoped_ptr<OutputSurface> output_surface) { |
| 2118 TRACE_EVENT0("cc", "LayerTreeHostImpl::InitializeRenderer"); | 2133 TRACE_EVENT0("cc", "LayerTreeHostImpl::InitializeRenderer"); |
| (...skipping 1359 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3478 } | 3493 } |
| 3479 | 3494 |
| 3480 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { | 3495 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { |
| 3481 std::vector<PictureLayerImpl*>::iterator it = | 3496 std::vector<PictureLayerImpl*>::iterator it = |
| 3482 std::find(picture_layers_.begin(), picture_layers_.end(), layer); | 3497 std::find(picture_layers_.begin(), picture_layers_.end(), layer); |
| 3483 DCHECK(it != picture_layers_.end()); | 3498 DCHECK(it != picture_layers_.end()); |
| 3484 picture_layers_.erase(it); | 3499 picture_layers_.erase(it); |
| 3485 } | 3500 } |
| 3486 | 3501 |
| 3487 } // namespace cc | 3502 } // namespace cc |
| OLD | NEW |