Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(478)

Side by Side Diff: cc/trees/layer_tree_host_impl.cc

Issue 667793004: Support single-threaded impl-side painting (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove DCHECKs; make settings better Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/trees/layer_tree_host_impl.h ('k') | cc/trees/layer_tree_host_pixeltest_synchronous.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
OLDNEW
« no previous file with comments | « cc/trees/layer_tree_host_impl.h ('k') | cc/trees/layer_tree_host_pixeltest_synchronous.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698