| 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 |