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

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

Issue 668123003: cc: Support texture rect targets for masks (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@base_for_texture_rect_changes
Patch Set: virtual CreateResourceAndRasterWorkerPool Created 6 years, 2 months 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 1993 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698