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