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

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: break => return 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 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 settings().scheduled_raster_task_limit);
2025
2026 UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy());
2027 need_to_update_visible_tiles_before_draw_ = false;
2028 }
2029
2030 void LayerTreeHostImpl::CreateResourceAndRasterWorkerPool(
2031 scoped_ptr<RasterWorkerPool>* raster_worker_pool,
2032 scoped_ptr<ResourcePool>* resource_pool,
2033 scoped_ptr<ResourcePool>* staging_resource_pool) {
2034 base::SingleThreadTaskRunner* task_runner =
2035 proxy_->HasImplThread() ? proxy_->ImplThreadTaskRunner()
2036 : proxy_->MainThreadTaskRunner();
2037 DCHECK(task_runner);
2038
2014 ContextProvider* context_provider = output_surface_->context_provider(); 2039 ContextProvider* context_provider = output_surface_->context_provider();
2015 if (!context_provider) { 2040 if (!context_provider) {
2016 resource_pool_ = 2041 *resource_pool =
2017 ResourcePool::Create(resource_provider_.get(), 2042 ResourcePool::Create(resource_provider_.get(),
2018 GL_TEXTURE_2D, 2043 GL_TEXTURE_2D,
2019 resource_provider_->best_texture_format()); 2044 resource_provider_->best_texture_format());
2020 2045
2021 raster_worker_pool_ = 2046 *raster_worker_pool =
2022 BitmapRasterWorkerPool::Create(proxy_->ImplThreadTaskRunner(), 2047 BitmapRasterWorkerPool::Create(proxy_->ImplThreadTaskRunner(),
2023 RasterWorkerPool::GetTaskGraphRunner(), 2048 RasterWorkerPool::GetTaskGraphRunner(),
2024 resource_provider_.get()); 2049 resource_provider_.get());
2025 } else if (use_gpu_rasterization_) { 2050 } else if (use_gpu_rasterization_) {
2026 resource_pool_ = 2051 *resource_pool =
2027 ResourcePool::Create(resource_provider_.get(), 2052 ResourcePool::Create(resource_provider_.get(),
2028 GL_TEXTURE_2D, 2053 GL_TEXTURE_2D,
2029 resource_provider_->best_texture_format()); 2054 resource_provider_->best_texture_format());
2030 2055
2031 raster_worker_pool_ = 2056 *raster_worker_pool =
2032 GpuRasterWorkerPool::Create(task_runner, 2057 GpuRasterWorkerPool::Create(task_runner,
2033 context_provider, 2058 context_provider,
2034 resource_provider_.get(), 2059 resource_provider_.get(),
2035 settings_.use_distance_field_text); 2060 settings_.use_distance_field_text);
2036 } else if (UseZeroCopyRasterizer()) { 2061 } else if (settings_.use_zero_copy && CanUseZeroCopyRasterizer()) {
2037 resource_pool_ = ResourcePool::Create( 2062 *resource_pool = ResourcePool::Create(
2038 resource_provider_.get(), 2063 resource_provider_.get(),
2039 GetMapImageTextureTarget(context_provider->ContextCapabilities()), 2064 GetMapImageTextureTarget(context_provider->ContextCapabilities()),
2040 resource_provider_->best_texture_format()); 2065 resource_provider_->best_texture_format());
2041 2066
2042 raster_worker_pool_ = 2067 *raster_worker_pool =
2043 ZeroCopyRasterWorkerPool::Create(proxy_->ImplThreadTaskRunner(), 2068 ZeroCopyRasterWorkerPool::Create(proxy_->ImplThreadTaskRunner(),
2044 RasterWorkerPool::GetTaskGraphRunner(), 2069 RasterWorkerPool::GetTaskGraphRunner(),
2045 resource_provider_.get()); 2070 resource_provider_.get());
2046 } else if (UseOneCopyRasterizer()) { 2071 } else if (settings_.use_one_copy && CanUseOneCopyRasterizer()) {
2047 // We need to create a staging resource pool when using copy rasterizer. 2072 // We need to create a staging resource pool when using copy rasterizer.
2048 staging_resource_pool_ = ResourcePool::Create( 2073 *staging_resource_pool = ResourcePool::Create(
2049 resource_provider_.get(), 2074 resource_provider_.get(),
2050 GetMapImageTextureTarget(context_provider->ContextCapabilities()), 2075 GetMapImageTextureTarget(context_provider->ContextCapabilities()),
2051 resource_provider_->best_texture_format()); 2076 resource_provider_->best_texture_format());
2052 resource_pool_ = 2077 *resource_pool =
2053 ResourcePool::Create(resource_provider_.get(), 2078 ResourcePool::Create(resource_provider_.get(),
2054 GL_TEXTURE_2D, 2079 GL_TEXTURE_2D,
2055 resource_provider_->best_texture_format()); 2080 resource_provider_->best_texture_format());
2056 2081
2057 raster_worker_pool_ = 2082 *raster_worker_pool =
2058 OneCopyRasterWorkerPool::Create(task_runner, 2083 OneCopyRasterWorkerPool::Create(task_runner,
2059 RasterWorkerPool::GetTaskGraphRunner(), 2084 RasterWorkerPool::GetTaskGraphRunner(),
2060 context_provider, 2085 context_provider,
2061 resource_provider_.get(), 2086 resource_provider_.get(),
2062 staging_resource_pool_.get()); 2087 staging_resource_pool_.get());
2063 } else { 2088 } else {
2064 resource_pool_ = ResourcePool::Create( 2089 *resource_pool = ResourcePool::Create(
2065 resource_provider_.get(), 2090 resource_provider_.get(),
2066 GL_TEXTURE_2D, 2091 GL_TEXTURE_2D,
2067 resource_provider_->memory_efficient_texture_format()); 2092 resource_provider_->memory_efficient_texture_format());
2068 2093
2069 raster_worker_pool_ = PixelBufferRasterWorkerPool::Create( 2094 *raster_worker_pool = PixelBufferRasterWorkerPool::Create(
2070 task_runner, 2095 task_runner,
2071 RasterWorkerPool::GetTaskGraphRunner(), 2096 RasterWorkerPool::GetTaskGraphRunner(),
2072 context_provider, 2097 context_provider,
2073 resource_provider_.get(), 2098 resource_provider_.get(),
2074 GetMaxTransferBufferUsageBytes(context_provider->ContextCapabilities(), 2099 GetMaxTransferBufferUsageBytes(context_provider->ContextCapabilities(),
2075 settings_.refresh_rate)); 2100 settings_.refresh_rate));
2076 } 2101 }
2077
2078 tile_manager_ = TileManager::Create(this,
2079 task_runner,
2080 resource_pool_.get(),
2081 raster_worker_pool_->AsRasterizer(),
2082 rendering_stats_instrumentation_,
2083 settings().scheduled_raster_task_limit);
2084
2085 UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy());
2086 need_to_update_visible_tiles_before_draw_ = false;
2087 } 2102 }
2088 2103
2089 void LayerTreeHostImpl::DestroyTileManager() { 2104 void LayerTreeHostImpl::DestroyTileManager() {
2090 tile_manager_ = nullptr; 2105 tile_manager_ = nullptr;
2091 resource_pool_ = nullptr; 2106 resource_pool_ = nullptr;
2092 staging_resource_pool_ = nullptr; 2107 staging_resource_pool_ = nullptr;
2093 raster_worker_pool_ = nullptr; 2108 raster_worker_pool_ = nullptr;
2094 } 2109 }
2095 2110
2096 bool LayerTreeHostImpl::UsePendingTreeForSync() const { 2111 bool LayerTreeHostImpl::UsePendingTreeForSync() const {
2097 // 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
2098 // time to raster before being displayed. 2113 // time to raster before being displayed.
2099 return settings_.impl_side_painting; 2114 return settings_.impl_side_painting;
2100 } 2115 }
2101 2116
2102 bool LayerTreeHostImpl::UseZeroCopyRasterizer() const { 2117 bool LayerTreeHostImpl::CanUseZeroCopyRasterizer() const {
2103 return settings_.use_zero_copy && GetRendererCapabilities().using_image; 2118 return GetRendererCapabilities().using_image;
2104 } 2119 }
2105 2120
2106 bool LayerTreeHostImpl::UseOneCopyRasterizer() const { 2121 bool LayerTreeHostImpl::CanUseOneCopyRasterizer() const {
2107 // Sync query support is required by one-copy rasterizer. 2122 // Sync query support is required by one-copy rasterizer.
2108 return settings_.use_one_copy && GetRendererCapabilities().using_image && 2123 return GetRendererCapabilities().using_image &&
2109 resource_provider_->use_sync_query(); 2124 resource_provider_->use_sync_query();
2110 } 2125 }
2111 2126
2112 void LayerTreeHostImpl::EnforceZeroBudget(bool zero_budget) { 2127 void LayerTreeHostImpl::EnforceZeroBudget(bool zero_budget) {
2113 SetManagedMemoryPolicy(cached_managed_memory_policy_, zero_budget); 2128 SetManagedMemoryPolicy(cached_managed_memory_policy_, zero_budget);
2114 } 2129 }
2115 2130
2116 bool LayerTreeHostImpl::InitializeRenderer( 2131 bool LayerTreeHostImpl::InitializeRenderer(
2117 scoped_ptr<OutputSurface> output_surface) { 2132 scoped_ptr<OutputSurface> output_surface) {
2118 TRACE_EVENT0("cc", "LayerTreeHostImpl::InitializeRenderer"); 2133 TRACE_EVENT0("cc", "LayerTreeHostImpl::InitializeRenderer");
(...skipping 1359 matching lines...) Expand 10 before | Expand all | Expand 10 after
3478 } 3493 }
3479 3494
3480 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { 3495 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) {
3481 std::vector<PictureLayerImpl*>::iterator it = 3496 std::vector<PictureLayerImpl*>::iterator it =
3482 std::find(picture_layers_.begin(), picture_layers_.end(), layer); 3497 std::find(picture_layers_.begin(), picture_layers_.end(), layer);
3483 DCHECK(it != picture_layers_.end()); 3498 DCHECK(it != picture_layers_.end());
3484 picture_layers_.erase(it); 3499 picture_layers_.erase(it);
3485 } 3500 }
3486 3501
3487 } // namespace cc 3502 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698