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 1724 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1735 | 1735 |
1736 void LayerTreeHostImpl::SetTopControlsLayoutHeight(float height) { | 1736 void LayerTreeHostImpl::SetTopControlsLayoutHeight(float height) { |
1737 if (active_tree_->top_controls_layout_height() == height) | 1737 if (active_tree_->top_controls_layout_height() == height) |
1738 return; | 1738 return; |
1739 | 1739 |
1740 active_tree_->set_top_controls_layout_height(height); | 1740 active_tree_->set_top_controls_layout_height(height); |
1741 UpdateViewportContainerSizes(); | 1741 UpdateViewportContainerSizes(); |
1742 SetFullRootLayerDamage(); | 1742 SetFullRootLayerDamage(); |
1743 } | 1743 } |
1744 | 1744 |
1745 void LayerTreeHostImpl::SynchronouslyInitializeAllTiles() { | |
1746 // Only valid for the single-threaded non-scheduled/synchronous case | |
1747 // using the zero copy raster worker pool. | |
1748 single_thread_synchronous_task_graph_runner_->RunUntilIdle(); | |
1749 } | |
1750 | |
1745 void LayerTreeHostImpl::DidLoseOutputSurface() { | 1751 void LayerTreeHostImpl::DidLoseOutputSurface() { |
1746 if (resource_provider_) | 1752 if (resource_provider_) |
1747 resource_provider_->DidLoseOutputSurface(); | 1753 resource_provider_->DidLoseOutputSurface(); |
1748 client_->DidLoseOutputSurfaceOnImplThread(); | 1754 client_->DidLoseOutputSurfaceOnImplThread(); |
1749 } | 1755 } |
1750 | 1756 |
1751 bool LayerTreeHostImpl::HaveRootScrollLayer() const { | 1757 bool LayerTreeHostImpl::HaveRootScrollLayer() const { |
1752 return !!InnerViewportScrollLayer(); | 1758 return !!InnerViewportScrollLayer(); |
1753 } | 1759 } |
1754 | 1760 |
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2005 DCHECK(!tile_manager_); | 2011 DCHECK(!tile_manager_); |
2006 DCHECK(settings_.impl_side_painting); | 2012 DCHECK(settings_.impl_side_painting); |
2007 DCHECK(output_surface_); | 2013 DCHECK(output_surface_); |
2008 DCHECK(resource_provider_); | 2014 DCHECK(resource_provider_); |
2009 base::SingleThreadTaskRunner* task_runner = | 2015 base::SingleThreadTaskRunner* task_runner = |
2010 proxy_->HasImplThread() ? proxy_->ImplThreadTaskRunner() | 2016 proxy_->HasImplThread() ? proxy_->ImplThreadTaskRunner() |
2011 : proxy_->MainThreadTaskRunner(); | 2017 : proxy_->MainThreadTaskRunner(); |
2012 DCHECK(task_runner); | 2018 DCHECK(task_runner); |
2013 | 2019 |
2014 ContextProvider* context_provider = output_surface_->context_provider(); | 2020 ContextProvider* context_provider = output_surface_->context_provider(); |
2021 bool is_synchronous_single_threaded = | |
2022 !proxy_->HasImplThread() && !settings_.single_thread_proxy_scheduler; | |
2023 bool should_use_zero_copy_rasterizer = | |
2024 settings_.use_zero_copy || is_synchronous_single_threaded; | |
2025 size_t scheduled_raster_task_limit = settings_.scheduled_raster_task_limit; | |
reveman
2014/10/28 18:53:09
do we still need the setting?
| |
2026 | |
2015 if (!context_provider) { | 2027 if (!context_provider) { |
2016 resource_pool_ = | 2028 resource_pool_ = |
2017 ResourcePool::Create(resource_provider_.get(), | 2029 ResourcePool::Create(resource_provider_.get(), |
2018 GL_TEXTURE_2D, | 2030 GL_TEXTURE_2D, |
2019 resource_provider_->best_texture_format()); | 2031 resource_provider_->best_texture_format()); |
2020 | 2032 |
2021 raster_worker_pool_ = | 2033 raster_worker_pool_ = |
2022 BitmapRasterWorkerPool::Create(proxy_->ImplThreadTaskRunner(), | 2034 BitmapRasterWorkerPool::Create(task_runner, |
2023 RasterWorkerPool::GetTaskGraphRunner(), | 2035 RasterWorkerPool::GetTaskGraphRunner(), |
2024 resource_provider_.get()); | 2036 resource_provider_.get()); |
2025 } else if (use_gpu_rasterization_) { | 2037 } else if (use_gpu_rasterization_) { |
2026 resource_pool_ = | 2038 resource_pool_ = |
2027 ResourcePool::Create(resource_provider_.get(), | 2039 ResourcePool::Create(resource_provider_.get(), |
2028 GL_TEXTURE_2D, | 2040 GL_TEXTURE_2D, |
2029 resource_provider_->best_texture_format()); | 2041 resource_provider_->best_texture_format()); |
2030 | 2042 |
2031 raster_worker_pool_ = | 2043 raster_worker_pool_ = |
2032 GpuRasterWorkerPool::Create(task_runner, | 2044 GpuRasterWorkerPool::Create(task_runner, |
2033 context_provider, | 2045 context_provider, |
2034 resource_provider_.get(), | 2046 resource_provider_.get(), |
2035 settings_.use_distance_field_text); | 2047 settings_.use_distance_field_text); |
2036 } else if (UseZeroCopyRasterizer()) { | 2048 } else if (should_use_zero_copy_rasterizer && CanUseZeroCopyRasterizer()) { |
2037 resource_pool_ = ResourcePool::Create( | 2049 resource_pool_ = ResourcePool::Create( |
2038 resource_provider_.get(), | 2050 resource_provider_.get(), |
2039 GetMapImageTextureTarget(context_provider->ContextCapabilities()), | 2051 GetMapImageTextureTarget(context_provider->ContextCapabilities()), |
2040 resource_provider_->best_texture_format()); | 2052 resource_provider_->best_texture_format()); |
2041 | 2053 |
2042 raster_worker_pool_ = | 2054 TaskGraphRunner* task_graph_runner; |
2043 ZeroCopyRasterWorkerPool::Create(proxy_->ImplThreadTaskRunner(), | 2055 if (is_synchronous_single_threaded) { |
2044 RasterWorkerPool::GetTaskGraphRunner(), | 2056 DCHECK(!single_thread_synchronous_task_graph_runner_); |
2045 resource_provider_.get()); | 2057 single_thread_synchronous_task_graph_runner_.reset(new TaskGraphRunner); |
2058 task_graph_runner = single_thread_synchronous_task_graph_runner_.get(); | |
2059 scheduled_raster_task_limit = std::numeric_limits<size_t>::max(); | |
2060 } else { | |
2061 task_graph_runner = RasterWorkerPool::GetTaskGraphRunner(); | |
2062 } | |
2063 | |
2064 raster_worker_pool_ = ZeroCopyRasterWorkerPool::Create( | |
2065 task_runner, task_graph_runner, resource_provider_.get()); | |
2046 } else if (UseOneCopyRasterizer()) { | 2066 } else if (UseOneCopyRasterizer()) { |
2047 // We need to create a staging resource pool when using copy rasterizer. | 2067 // We need to create a staging resource pool when using copy rasterizer. |
2048 staging_resource_pool_ = ResourcePool::Create( | 2068 staging_resource_pool_ = ResourcePool::Create( |
2049 resource_provider_.get(), | 2069 resource_provider_.get(), |
2050 GetMapImageTextureTarget(context_provider->ContextCapabilities()), | 2070 GetMapImageTextureTarget(context_provider->ContextCapabilities()), |
2051 resource_provider_->best_texture_format()); | 2071 resource_provider_->best_texture_format()); |
2052 resource_pool_ = | 2072 resource_pool_ = |
2053 ResourcePool::Create(resource_provider_.get(), | 2073 ResourcePool::Create(resource_provider_.get(), |
2054 GL_TEXTURE_2D, | 2074 GL_TEXTURE_2D, |
2055 resource_provider_->best_texture_format()); | 2075 resource_provider_->best_texture_format()); |
(...skipping 17 matching lines...) Expand all Loading... | |
2073 resource_provider_.get(), | 2093 resource_provider_.get(), |
2074 GetMaxTransferBufferUsageBytes(context_provider->ContextCapabilities(), | 2094 GetMaxTransferBufferUsageBytes(context_provider->ContextCapabilities(), |
2075 settings_.refresh_rate)); | 2095 settings_.refresh_rate)); |
2076 } | 2096 } |
2077 | 2097 |
2078 tile_manager_ = TileManager::Create(this, | 2098 tile_manager_ = TileManager::Create(this, |
2079 task_runner, | 2099 task_runner, |
2080 resource_pool_.get(), | 2100 resource_pool_.get(), |
2081 raster_worker_pool_->AsRasterizer(), | 2101 raster_worker_pool_->AsRasterizer(), |
2082 rendering_stats_instrumentation_, | 2102 rendering_stats_instrumentation_, |
2083 settings().scheduled_raster_task_limit); | 2103 scheduled_raster_task_limit); |
2084 | 2104 |
2085 UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy()); | 2105 UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy()); |
2086 need_to_update_visible_tiles_before_draw_ = false; | 2106 need_to_update_visible_tiles_before_draw_ = false; |
2087 } | 2107 } |
2088 | 2108 |
2089 void LayerTreeHostImpl::DestroyTileManager() { | 2109 void LayerTreeHostImpl::DestroyTileManager() { |
2090 tile_manager_ = nullptr; | 2110 tile_manager_ = nullptr; |
2091 resource_pool_ = nullptr; | 2111 resource_pool_ = nullptr; |
2092 staging_resource_pool_ = nullptr; | 2112 staging_resource_pool_ = nullptr; |
2093 raster_worker_pool_ = nullptr; | 2113 raster_worker_pool_ = nullptr; |
2114 single_thread_synchronous_task_graph_runner_ = nullptr; | |
2094 } | 2115 } |
2095 | 2116 |
2096 bool LayerTreeHostImpl::UsePendingTreeForSync() const { | 2117 bool LayerTreeHostImpl::UsePendingTreeForSync() const { |
2097 // In impl-side painting, synchronize to the pending tree so that it has | 2118 // In impl-side painting, synchronize to the pending tree so that it has |
2098 // time to raster before being displayed. | 2119 // time to raster before being displayed. |
2099 return settings_.impl_side_painting; | 2120 return settings_.impl_side_painting; |
2100 } | 2121 } |
2101 | 2122 |
2102 bool LayerTreeHostImpl::UseZeroCopyRasterizer() const { | 2123 bool LayerTreeHostImpl::CanUseZeroCopyRasterizer() const { |
2103 return settings_.use_zero_copy && GetRendererCapabilities().using_image; | 2124 return GetRendererCapabilities().using_image; |
2104 } | 2125 } |
2105 | 2126 |
2106 bool LayerTreeHostImpl::UseOneCopyRasterizer() const { | 2127 bool LayerTreeHostImpl::UseOneCopyRasterizer() const { |
2107 // Sync query support is required by one-copy rasterizer. | 2128 // Sync query support is required by one-copy rasterizer. |
2108 return settings_.use_one_copy && GetRendererCapabilities().using_image && | 2129 return settings_.use_one_copy && GetRendererCapabilities().using_image && |
2109 resource_provider_->use_sync_query(); | 2130 resource_provider_->use_sync_query(); |
2110 } | 2131 } |
2111 | 2132 |
2112 void LayerTreeHostImpl::EnforceZeroBudget(bool zero_budget) { | 2133 void LayerTreeHostImpl::EnforceZeroBudget(bool zero_budget) { |
2113 SetManagedMemoryPolicy(cached_managed_memory_policy_, zero_budget); | 2134 SetManagedMemoryPolicy(cached_managed_memory_policy_, zero_budget); |
(...skipping 1364 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3478 } | 3499 } |
3479 | 3500 |
3480 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { | 3501 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { |
3481 std::vector<PictureLayerImpl*>::iterator it = | 3502 std::vector<PictureLayerImpl*>::iterator it = |
3482 std::find(picture_layers_.begin(), picture_layers_.end(), layer); | 3503 std::find(picture_layers_.begin(), picture_layers_.end(), layer); |
3483 DCHECK(it != picture_layers_.end()); | 3504 DCHECK(it != picture_layers_.end()); |
3484 picture_layers_.erase(it); | 3505 picture_layers_.erase(it); |
3485 } | 3506 } |
3486 | 3507 |
3487 } // namespace cc | 3508 } // namespace cc |
OLD | NEW |