| 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 1718 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1729 | 1729 |
| 1730 void LayerTreeHostImpl::SetTopControlsLayoutHeight(float height) { | 1730 void LayerTreeHostImpl::SetTopControlsLayoutHeight(float height) { |
| 1731 if (active_tree_->top_controls_layout_height() == height) | 1731 if (active_tree_->top_controls_layout_height() == height) |
| 1732 return; | 1732 return; |
| 1733 | 1733 |
| 1734 active_tree_->set_top_controls_layout_height(height); | 1734 active_tree_->set_top_controls_layout_height(height); |
| 1735 UpdateViewportContainerSizes(); | 1735 UpdateViewportContainerSizes(); |
| 1736 SetFullRootLayerDamage(); | 1736 SetFullRootLayerDamage(); |
| 1737 } | 1737 } |
| 1738 | 1738 |
| 1739 void LayerTreeHostImpl::SynchronouslyInitializeAllTiles() { |
| 1740 // Only valid for the single-threaded non-scheduled/synchronous case |
| 1741 // using the zero copy raster worker pool. |
| 1742 single_thread_synchronous_task_graph_runner_->RunUntilIdle(); |
| 1743 } |
| 1744 |
| 1739 void LayerTreeHostImpl::DidLoseOutputSurface() { | 1745 void LayerTreeHostImpl::DidLoseOutputSurface() { |
| 1740 if (resource_provider_) | 1746 if (resource_provider_) |
| 1741 resource_provider_->DidLoseOutputSurface(); | 1747 resource_provider_->DidLoseOutputSurface(); |
| 1742 client_->DidLoseOutputSurfaceOnImplThread(); | 1748 client_->DidLoseOutputSurfaceOnImplThread(); |
| 1743 } | 1749 } |
| 1744 | 1750 |
| 1745 bool LayerTreeHostImpl::HaveRootScrollLayer() const { | 1751 bool LayerTreeHostImpl::HaveRootScrollLayer() const { |
| 1746 return !!InnerViewportScrollLayer(); | 1752 return !!InnerViewportScrollLayer(); |
| 1747 } | 1753 } |
| 1748 | 1754 |
| (...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1999 DCHECK(!tile_manager_); | 2005 DCHECK(!tile_manager_); |
| 2000 DCHECK(settings_.impl_side_painting); | 2006 DCHECK(settings_.impl_side_painting); |
| 2001 DCHECK(output_surface_); | 2007 DCHECK(output_surface_); |
| 2002 DCHECK(resource_provider_); | 2008 DCHECK(resource_provider_); |
| 2003 base::SingleThreadTaskRunner* task_runner = | 2009 base::SingleThreadTaskRunner* task_runner = |
| 2004 proxy_->HasImplThread() ? proxy_->ImplThreadTaskRunner() | 2010 proxy_->HasImplThread() ? proxy_->ImplThreadTaskRunner() |
| 2005 : proxy_->MainThreadTaskRunner(); | 2011 : proxy_->MainThreadTaskRunner(); |
| 2006 DCHECK(task_runner); | 2012 DCHECK(task_runner); |
| 2007 | 2013 |
| 2008 ContextProvider* context_provider = output_surface_->context_provider(); | 2014 ContextProvider* context_provider = output_surface_->context_provider(); |
| 2015 bool is_synchronous_single_threaded = |
| 2016 !proxy_->HasImplThread() && !settings_.single_thread_proxy_scheduler; |
| 2017 bool should_use_zero_copy_rasterizer = |
| 2018 settings_.use_zero_copy || is_synchronous_single_threaded; |
| 2019 size_t scheduled_raster_task_limit = settings_.scheduled_raster_task_limit; |
| 2020 |
| 2009 if (!context_provider) { | 2021 if (!context_provider) { |
| 2010 resource_pool_ = | 2022 resource_pool_ = |
| 2011 ResourcePool::Create(resource_provider_.get(), | 2023 ResourcePool::Create(resource_provider_.get(), |
| 2012 GL_TEXTURE_2D, | 2024 GL_TEXTURE_2D, |
| 2013 resource_provider_->best_texture_format()); | 2025 resource_provider_->best_texture_format()); |
| 2014 | 2026 |
| 2015 raster_worker_pool_ = | 2027 raster_worker_pool_ = |
| 2016 BitmapRasterWorkerPool::Create(proxy_->ImplThreadTaskRunner(), | 2028 BitmapRasterWorkerPool::Create(task_runner, |
| 2017 RasterWorkerPool::GetTaskGraphRunner(), | 2029 RasterWorkerPool::GetTaskGraphRunner(), |
| 2018 resource_provider_.get()); | 2030 resource_provider_.get()); |
| 2019 } else if (use_gpu_rasterization_) { | 2031 } else if (use_gpu_rasterization_) { |
| 2020 resource_pool_ = | 2032 resource_pool_ = |
| 2021 ResourcePool::Create(resource_provider_.get(), | 2033 ResourcePool::Create(resource_provider_.get(), |
| 2022 GL_TEXTURE_2D, | 2034 GL_TEXTURE_2D, |
| 2023 resource_provider_->best_texture_format()); | 2035 resource_provider_->best_texture_format()); |
| 2024 | 2036 |
| 2025 raster_worker_pool_ = | 2037 raster_worker_pool_ = |
| 2026 GpuRasterWorkerPool::Create(task_runner, | 2038 GpuRasterWorkerPool::Create(task_runner, |
| 2027 context_provider, | 2039 context_provider, |
| 2028 resource_provider_.get(), | 2040 resource_provider_.get(), |
| 2029 settings_.use_distance_field_text); | 2041 settings_.use_distance_field_text); |
| 2030 } else if (UseZeroCopyRasterizer()) { | 2042 } else if (should_use_zero_copy_rasterizer && CanUseZeroCopyRasterizer()) { |
| 2031 resource_pool_ = ResourcePool::Create( | 2043 resource_pool_ = ResourcePool::Create( |
| 2032 resource_provider_.get(), | 2044 resource_provider_.get(), |
| 2033 GetMapImageTextureTarget(context_provider->ContextCapabilities()), | 2045 GetMapImageTextureTarget(context_provider->ContextCapabilities()), |
| 2034 resource_provider_->best_texture_format()); | 2046 resource_provider_->best_texture_format()); |
| 2035 | 2047 |
| 2036 raster_worker_pool_ = | 2048 TaskGraphRunner* task_graph_runner; |
| 2037 ZeroCopyRasterWorkerPool::Create(task_runner, | 2049 if (is_synchronous_single_threaded) { |
| 2038 RasterWorkerPool::GetTaskGraphRunner(), | 2050 DCHECK(!single_thread_synchronous_task_graph_runner_); |
| 2039 resource_provider_.get()); | 2051 single_thread_synchronous_task_graph_runner_.reset(new TaskGraphRunner); |
| 2052 task_graph_runner = single_thread_synchronous_task_graph_runner_.get(); |
| 2053 scheduled_raster_task_limit = std::numeric_limits<size_t>::max(); |
| 2054 } else { |
| 2055 task_graph_runner = RasterWorkerPool::GetTaskGraphRunner(); |
| 2056 } |
| 2057 |
| 2058 raster_worker_pool_ = ZeroCopyRasterWorkerPool::Create( |
| 2059 task_runner, task_graph_runner, resource_provider_.get()); |
| 2040 } else if (UseOneCopyRasterizer()) { | 2060 } else if (UseOneCopyRasterizer()) { |
| 2041 // We need to create a staging resource pool when using copy rasterizer. | 2061 // We need to create a staging resource pool when using copy rasterizer. |
| 2042 staging_resource_pool_ = ResourcePool::Create( | 2062 staging_resource_pool_ = ResourcePool::Create( |
| 2043 resource_provider_.get(), | 2063 resource_provider_.get(), |
| 2044 GetMapImageTextureTarget(context_provider->ContextCapabilities()), | 2064 GetMapImageTextureTarget(context_provider->ContextCapabilities()), |
| 2045 resource_provider_->best_texture_format()); | 2065 resource_provider_->best_texture_format()); |
| 2046 resource_pool_ = | 2066 resource_pool_ = |
| 2047 ResourcePool::Create(resource_provider_.get(), | 2067 ResourcePool::Create(resource_provider_.get(), |
| 2048 GL_TEXTURE_2D, | 2068 GL_TEXTURE_2D, |
| 2049 resource_provider_->best_texture_format()); | 2069 resource_provider_->best_texture_format()); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 2067 resource_provider_.get(), | 2087 resource_provider_.get(), |
| 2068 GetMaxTransferBufferUsageBytes(context_provider->ContextCapabilities(), | 2088 GetMaxTransferBufferUsageBytes(context_provider->ContextCapabilities(), |
| 2069 settings_.refresh_rate)); | 2089 settings_.refresh_rate)); |
| 2070 } | 2090 } |
| 2071 | 2091 |
| 2072 tile_manager_ = TileManager::Create(this, | 2092 tile_manager_ = TileManager::Create(this, |
| 2073 task_runner, | 2093 task_runner, |
| 2074 resource_pool_.get(), | 2094 resource_pool_.get(), |
| 2075 raster_worker_pool_->AsRasterizer(), | 2095 raster_worker_pool_->AsRasterizer(), |
| 2076 rendering_stats_instrumentation_, | 2096 rendering_stats_instrumentation_, |
| 2077 settings().scheduled_raster_task_limit); | 2097 scheduled_raster_task_limit); |
| 2078 | 2098 |
| 2079 UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy()); | 2099 UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy()); |
| 2080 need_to_update_visible_tiles_before_draw_ = false; | 2100 need_to_update_visible_tiles_before_draw_ = false; |
| 2081 } | 2101 } |
| 2082 | 2102 |
| 2083 void LayerTreeHostImpl::DestroyTileManager() { | 2103 void LayerTreeHostImpl::DestroyTileManager() { |
| 2084 tile_manager_ = nullptr; | 2104 tile_manager_ = nullptr; |
| 2085 resource_pool_ = nullptr; | 2105 resource_pool_ = nullptr; |
| 2086 staging_resource_pool_ = nullptr; | 2106 staging_resource_pool_ = nullptr; |
| 2087 raster_worker_pool_ = nullptr; | 2107 raster_worker_pool_ = nullptr; |
| 2108 single_thread_synchronous_task_graph_runner_ = nullptr; |
| 2088 } | 2109 } |
| 2089 | 2110 |
| 2090 bool LayerTreeHostImpl::UsePendingTreeForSync() const { | 2111 bool LayerTreeHostImpl::UsePendingTreeForSync() const { |
| 2091 // 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 |
| 2092 // time to raster before being displayed. | 2113 // time to raster before being displayed. |
| 2093 return settings_.impl_side_painting; | 2114 return settings_.impl_side_painting; |
| 2094 } | 2115 } |
| 2095 | 2116 |
| 2096 bool LayerTreeHostImpl::UseZeroCopyRasterizer() const { | 2117 bool LayerTreeHostImpl::CanUseZeroCopyRasterizer() const { |
| 2097 return settings_.use_zero_copy && GetRendererCapabilities().using_image; | 2118 return GetRendererCapabilities().using_image; |
| 2098 } | 2119 } |
| 2099 | 2120 |
| 2100 bool LayerTreeHostImpl::UseOneCopyRasterizer() const { | 2121 bool LayerTreeHostImpl::UseOneCopyRasterizer() const { |
| 2101 // Sync query support is required by one-copy rasterizer. | 2122 // Sync query support is required by one-copy rasterizer. |
| 2102 return settings_.use_one_copy && GetRendererCapabilities().using_image && | 2123 return settings_.use_one_copy && GetRendererCapabilities().using_image && |
| 2103 resource_provider_->use_sync_query(); | 2124 resource_provider_->use_sync_query(); |
| 2104 } | 2125 } |
| 2105 | 2126 |
| 2106 void LayerTreeHostImpl::EnforceZeroBudget(bool zero_budget) { | 2127 void LayerTreeHostImpl::EnforceZeroBudget(bool zero_budget) { |
| 2107 SetManagedMemoryPolicy(cached_managed_memory_policy_, zero_budget); | 2128 SetManagedMemoryPolicy(cached_managed_memory_policy_, zero_budget); |
| (...skipping 1370 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 |