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

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: Rebase, add ContextCapabilities 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
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 1718 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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

Powered by Google App Engine
This is Rietveld 408576698