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 30 matching lines...) Expand all Loading... |
41 #include "cc/output/copy_output_request.h" | 41 #include "cc/output/copy_output_request.h" |
42 #include "cc/output/delegating_renderer.h" | 42 #include "cc/output/delegating_renderer.h" |
43 #include "cc/output/gl_renderer.h" | 43 #include "cc/output/gl_renderer.h" |
44 #include "cc/output/software_renderer.h" | 44 #include "cc/output/software_renderer.h" |
45 #include "cc/quads/render_pass_draw_quad.h" | 45 #include "cc/quads/render_pass_draw_quad.h" |
46 #include "cc/quads/shared_quad_state.h" | 46 #include "cc/quads/shared_quad_state.h" |
47 #include "cc/quads/solid_color_draw_quad.h" | 47 #include "cc/quads/solid_color_draw_quad.h" |
48 #include "cc/quads/texture_draw_quad.h" | 48 #include "cc/quads/texture_draw_quad.h" |
49 #include "cc/resources/eviction_tile_priority_queue.h" | 49 #include "cc/resources/eviction_tile_priority_queue.h" |
50 #include "cc/resources/gpu_raster_worker_pool.h" | 50 #include "cc/resources/gpu_raster_worker_pool.h" |
51 #include "cc/resources/image_copy_raster_worker_pool.h" | |
52 #include "cc/resources/image_raster_worker_pool.h" | |
53 #include "cc/resources/memory_history.h" | 51 #include "cc/resources/memory_history.h" |
| 52 #include "cc/resources/one_copy_raster_worker_pool.h" |
54 #include "cc/resources/picture_layer_tiling.h" | 53 #include "cc/resources/picture_layer_tiling.h" |
55 #include "cc/resources/pixel_buffer_raster_worker_pool.h" | 54 #include "cc/resources/pixel_buffer_raster_worker_pool.h" |
56 #include "cc/resources/prioritized_resource_manager.h" | 55 #include "cc/resources/prioritized_resource_manager.h" |
57 #include "cc/resources/raster_tile_priority_queue.h" | 56 #include "cc/resources/raster_tile_priority_queue.h" |
58 #include "cc/resources/raster_worker_pool.h" | 57 #include "cc/resources/raster_worker_pool.h" |
59 #include "cc/resources/resource_pool.h" | 58 #include "cc/resources/resource_pool.h" |
60 #include "cc/resources/texture_mailbox_deleter.h" | 59 #include "cc/resources/texture_mailbox_deleter.h" |
61 #include "cc/resources/ui_resource_bitmap.h" | 60 #include "cc/resources/ui_resource_bitmap.h" |
| 61 #include "cc/resources/zero_copy_raster_worker_pool.h" |
62 #include "cc/scheduler/delay_based_time_source.h" | 62 #include "cc/scheduler/delay_based_time_source.h" |
63 #include "cc/trees/damage_tracker.h" | 63 #include "cc/trees/damage_tracker.h" |
64 #include "cc/trees/layer_tree_host.h" | 64 #include "cc/trees/layer_tree_host.h" |
65 #include "cc/trees/layer_tree_host_common.h" | 65 #include "cc/trees/layer_tree_host_common.h" |
66 #include "cc/trees/layer_tree_impl.h" | 66 #include "cc/trees/layer_tree_impl.h" |
67 #include "cc/trees/occlusion_tracker.h" | 67 #include "cc/trees/occlusion_tracker.h" |
68 #include "cc/trees/single_thread_proxy.h" | 68 #include "cc/trees/single_thread_proxy.h" |
69 #include "cc/trees/tree_synchronizer.h" | 69 #include "cc/trees/tree_synchronizer.h" |
70 #include "gpu/command_buffer/client/gles2_interface.h" | 70 #include "gpu/command_buffer/client/gles2_interface.h" |
71 #include "gpu/GLES2/gl2extchromium.h" | 71 #include "gpu/GLES2/gl2extchromium.h" |
(...skipping 1897 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1969 if (use_gpu_rasterization_ && context_provider) { | 1969 if (use_gpu_rasterization_ && context_provider) { |
1970 resource_pool_ = | 1970 resource_pool_ = |
1971 ResourcePool::Create(resource_provider_.get(), | 1971 ResourcePool::Create(resource_provider_.get(), |
1972 GL_TEXTURE_2D, | 1972 GL_TEXTURE_2D, |
1973 resource_provider_->best_texture_format()); | 1973 resource_provider_->best_texture_format()); |
1974 | 1974 |
1975 raster_worker_pool_ = | 1975 raster_worker_pool_ = |
1976 GpuRasterWorkerPool::Create(proxy_->ImplThreadTaskRunner(), | 1976 GpuRasterWorkerPool::Create(proxy_->ImplThreadTaskRunner(), |
1977 context_provider, | 1977 context_provider, |
1978 resource_provider_.get()); | 1978 resource_provider_.get()); |
1979 } else if (UseOneCopyTextureUpload() && context_provider) { | 1979 } else if (UseOneCopyRasterizer() && context_provider) { |
1980 // We need to create a staging resource pool when using copy rasterizer. | 1980 // We need to create a staging resource pool when using copy rasterizer. |
1981 staging_resource_pool_ = | 1981 staging_resource_pool_ = |
1982 ResourcePool::Create(resource_provider_.get(), | 1982 ResourcePool::Create(resource_provider_.get(), |
1983 GetMapImageTextureTarget(context_provider), | 1983 GetMapImageTextureTarget(context_provider), |
1984 resource_provider_->best_texture_format()); | 1984 resource_provider_->best_texture_format()); |
1985 resource_pool_ = | 1985 resource_pool_ = |
1986 ResourcePool::Create(resource_provider_.get(), | 1986 ResourcePool::Create(resource_provider_.get(), |
1987 GL_TEXTURE_2D, | 1987 GL_TEXTURE_2D, |
1988 resource_provider_->best_texture_format()); | 1988 resource_provider_->best_texture_format()); |
1989 | 1989 |
1990 raster_worker_pool_ = ImageCopyRasterWorkerPool::Create( | 1990 raster_worker_pool_ = |
1991 proxy_->ImplThreadTaskRunner(), | 1991 OneCopyRasterWorkerPool::Create(proxy_->ImplThreadTaskRunner(), |
1992 RasterWorkerPool::GetTaskGraphRunner(), | 1992 RasterWorkerPool::GetTaskGraphRunner(), |
1993 context_provider, | 1993 context_provider, |
1994 resource_provider_.get(), | 1994 resource_provider_.get(), |
1995 staging_resource_pool_.get()); | 1995 staging_resource_pool_.get()); |
1996 } else if (!UseZeroCopyTextureUpload() && context_provider) { | 1996 } else if (!UseZeroCopyRasterizer() && context_provider) { |
1997 resource_pool_ = ResourcePool::Create( | 1997 resource_pool_ = ResourcePool::Create( |
1998 resource_provider_.get(), | 1998 resource_provider_.get(), |
1999 GL_TEXTURE_2D, | 1999 GL_TEXTURE_2D, |
2000 resource_provider_->memory_efficient_texture_format()); | 2000 resource_provider_->memory_efficient_texture_format()); |
2001 | 2001 |
2002 raster_worker_pool_ = PixelBufferRasterWorkerPool::Create( | 2002 raster_worker_pool_ = PixelBufferRasterWorkerPool::Create( |
2003 proxy_->ImplThreadTaskRunner(), | 2003 proxy_->ImplThreadTaskRunner(), |
2004 RasterWorkerPool::GetTaskGraphRunner(), | 2004 RasterWorkerPool::GetTaskGraphRunner(), |
2005 context_provider, | 2005 context_provider, |
2006 resource_provider_.get(), | 2006 resource_provider_.get(), |
2007 transfer_buffer_memory_limit_); | 2007 transfer_buffer_memory_limit_); |
2008 } else { | 2008 } else { |
2009 resource_pool_ = | 2009 resource_pool_ = |
2010 ResourcePool::Create(resource_provider_.get(), | 2010 ResourcePool::Create(resource_provider_.get(), |
2011 GetMapImageTextureTarget(context_provider), | 2011 GetMapImageTextureTarget(context_provider), |
2012 resource_provider_->best_texture_format()); | 2012 resource_provider_->best_texture_format()); |
2013 | 2013 |
2014 raster_worker_pool_ = | 2014 raster_worker_pool_ = |
2015 ImageRasterWorkerPool::Create(proxy_->ImplThreadTaskRunner(), | 2015 ZeroCopyRasterWorkerPool::Create(proxy_->ImplThreadTaskRunner(), |
2016 RasterWorkerPool::GetTaskGraphRunner(), | 2016 RasterWorkerPool::GetTaskGraphRunner(), |
2017 resource_provider_.get()); | 2017 resource_provider_.get()); |
2018 } | 2018 } |
2019 | 2019 |
2020 tile_manager_ = | 2020 tile_manager_ = |
2021 TileManager::Create(this, | 2021 TileManager::Create(this, |
2022 proxy_->ImplThreadTaskRunner(), | 2022 proxy_->ImplThreadTaskRunner(), |
2023 resource_pool_.get(), | 2023 resource_pool_.get(), |
2024 raster_worker_pool_->AsRasterizer(), | 2024 raster_worker_pool_->AsRasterizer(), |
2025 rendering_stats_instrumentation_); | 2025 rendering_stats_instrumentation_); |
2026 | 2026 |
2027 UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy()); | 2027 UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy()); |
2028 need_to_update_visible_tiles_before_draw_ = false; | 2028 need_to_update_visible_tiles_before_draw_ = false; |
2029 } | 2029 } |
2030 | 2030 |
2031 void LayerTreeHostImpl::DestroyTileManager() { | 2031 void LayerTreeHostImpl::DestroyTileManager() { |
2032 tile_manager_.reset(); | 2032 tile_manager_.reset(); |
2033 resource_pool_.reset(); | 2033 resource_pool_.reset(); |
2034 staging_resource_pool_.reset(); | 2034 staging_resource_pool_.reset(); |
2035 raster_worker_pool_.reset(); | 2035 raster_worker_pool_.reset(); |
2036 } | 2036 } |
2037 | 2037 |
2038 bool LayerTreeHostImpl::UsePendingTreeForSync() const { | 2038 bool LayerTreeHostImpl::UsePendingTreeForSync() const { |
2039 // In impl-side painting, synchronize to the pending tree so that it has | 2039 // In impl-side painting, synchronize to the pending tree so that it has |
2040 // time to raster before being displayed. | 2040 // time to raster before being displayed. |
2041 return settings_.impl_side_painting; | 2041 return settings_.impl_side_painting; |
2042 } | 2042 } |
2043 | 2043 |
2044 bool LayerTreeHostImpl::UseZeroCopyTextureUpload() const { | 2044 bool LayerTreeHostImpl::UseZeroCopyRasterizer() const { |
2045 // Note: we use zero-copy by default when the renderer is using | 2045 // Note: we use zero-copy by default when the renderer is using |
2046 // shared memory resources. | 2046 // shared memory resources. |
2047 return (settings_.use_zero_copy || | 2047 return (settings_.use_zero_copy || |
2048 GetRendererCapabilities().using_shared_memory_resources) && | 2048 GetRendererCapabilities().using_shared_memory_resources) && |
2049 GetRendererCapabilities().using_map_image; | 2049 GetRendererCapabilities().using_map_image; |
2050 } | 2050 } |
2051 | 2051 |
2052 bool LayerTreeHostImpl::UseOneCopyTextureUpload() const { | 2052 bool LayerTreeHostImpl::UseOneCopyRasterizer() const { |
2053 // Sync query support is required by one-copy rasterizer. | 2053 // Sync query support is required by one-copy rasterizer. |
2054 return settings_.use_one_copy && GetRendererCapabilities().using_map_image && | 2054 return settings_.use_one_copy && GetRendererCapabilities().using_map_image && |
2055 resource_provider_->use_sync_query(); | 2055 resource_provider_->use_sync_query(); |
2056 } | 2056 } |
2057 | 2057 |
2058 void LayerTreeHostImpl::EnforceZeroBudget(bool zero_budget) { | 2058 void LayerTreeHostImpl::EnforceZeroBudget(bool zero_budget) { |
2059 SetManagedMemoryPolicy(cached_managed_memory_policy_, zero_budget); | 2059 SetManagedMemoryPolicy(cached_managed_memory_policy_, zero_budget); |
2060 } | 2060 } |
2061 | 2061 |
2062 bool LayerTreeHostImpl::InitializeRenderer( | 2062 bool LayerTreeHostImpl::InitializeRenderer( |
(...skipping 1315 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3378 } | 3378 } |
3379 | 3379 |
3380 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { | 3380 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { |
3381 std::vector<PictureLayerImpl*>::iterator it = | 3381 std::vector<PictureLayerImpl*>::iterator it = |
3382 std::find(picture_layers_.begin(), picture_layers_.end(), layer); | 3382 std::find(picture_layers_.begin(), picture_layers_.end(), layer); |
3383 DCHECK(it != picture_layers_.end()); | 3383 DCHECK(it != picture_layers_.end()); |
3384 picture_layers_.erase(it); | 3384 picture_layers_.erase(it); |
3385 } | 3385 } |
3386 | 3386 |
3387 } // namespace cc | 3387 } // namespace cc |
OLD | NEW |