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 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
215 LayerTreeHostImpl::LayerTreeHostImpl( | 215 LayerTreeHostImpl::LayerTreeHostImpl( |
216 const LayerTreeSettings& settings, | 216 const LayerTreeSettings& settings, |
217 LayerTreeHostImplClient* client, | 217 LayerTreeHostImplClient* client, |
218 Proxy* proxy, | 218 Proxy* proxy, |
219 RenderingStatsInstrumentation* rendering_stats_instrumentation, | 219 RenderingStatsInstrumentation* rendering_stats_instrumentation, |
220 SharedBitmapManager* manager, | 220 SharedBitmapManager* manager, |
221 int id) | 221 int id) |
222 : client_(client), | 222 : client_(client), |
223 proxy_(proxy), | 223 proxy_(proxy), |
224 use_gpu_rasterization_(false), | 224 use_gpu_rasterization_(false), |
225 on_demand_task_graph_runner_(NULL), | |
226 input_handler_client_(NULL), | 225 input_handler_client_(NULL), |
227 did_lock_scrolling_layer_(false), | 226 did_lock_scrolling_layer_(false), |
228 should_bubble_scrolls_(false), | 227 should_bubble_scrolls_(false), |
229 wheel_scrolling_(false), | 228 wheel_scrolling_(false), |
230 scroll_affects_scroll_handler_(false), | 229 scroll_affects_scroll_handler_(false), |
231 scroll_layer_id_when_mouse_over_scrollbar_(0), | 230 scroll_layer_id_when_mouse_over_scrollbar_(0), |
232 tile_priorities_dirty_(false), | 231 tile_priorities_dirty_(false), |
233 root_layer_scroll_offset_delegate_(NULL), | 232 root_layer_scroll_offset_delegate_(NULL), |
234 settings_(settings), | 233 settings_(settings), |
235 visible_(true), | 234 visible_(true), |
(...skipping 1748 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1984 if (use_gpu_rasterization_ && context_provider) { | 1983 if (use_gpu_rasterization_ && context_provider) { |
1985 resource_pool_ = | 1984 resource_pool_ = |
1986 ResourcePool::Create(resource_provider_.get(), | 1985 ResourcePool::Create(resource_provider_.get(), |
1987 GL_TEXTURE_2D, | 1986 GL_TEXTURE_2D, |
1988 resource_provider_->best_texture_format()); | 1987 resource_provider_->best_texture_format()); |
1989 | 1988 |
1990 raster_worker_pool_ = | 1989 raster_worker_pool_ = |
1991 GpuRasterWorkerPool::Create(proxy_->ImplThreadTaskRunner(), | 1990 GpuRasterWorkerPool::Create(proxy_->ImplThreadTaskRunner(), |
1992 context_provider, | 1991 context_provider, |
1993 resource_provider_.get()); | 1992 resource_provider_.get()); |
1994 on_demand_task_graph_runner_ = &synchronous_task_graph_runner_; | |
1995 } else if (UseOneCopyTextureUpload() && context_provider) { | 1993 } else if (UseOneCopyTextureUpload() && context_provider) { |
1996 // We need to create a staging resource pool when using copy rasterizer. | 1994 // We need to create a staging resource pool when using copy rasterizer. |
1997 staging_resource_pool_ = | 1995 staging_resource_pool_ = |
1998 ResourcePool::Create(resource_provider_.get(), | 1996 ResourcePool::Create(resource_provider_.get(), |
1999 GetMapImageTextureTarget(context_provider), | 1997 GetMapImageTextureTarget(context_provider), |
2000 resource_provider_->best_texture_format()); | 1998 resource_provider_->best_texture_format()); |
2001 resource_pool_ = | 1999 resource_pool_ = |
2002 ResourcePool::Create(resource_provider_.get(), | 2000 ResourcePool::Create(resource_provider_.get(), |
2003 GL_TEXTURE_2D, | 2001 GL_TEXTURE_2D, |
2004 resource_provider_->best_texture_format()); | 2002 resource_provider_->best_texture_format()); |
2005 | 2003 |
2006 raster_worker_pool_ = ImageCopyRasterWorkerPool::Create( | 2004 raster_worker_pool_ = ImageCopyRasterWorkerPool::Create( |
2007 proxy_->ImplThreadTaskRunner(), | 2005 proxy_->ImplThreadTaskRunner(), |
2008 RasterWorkerPool::GetTaskGraphRunner(), | 2006 RasterWorkerPool::GetTaskGraphRunner(), |
2009 context_provider, | 2007 context_provider, |
2010 resource_provider_.get(), | 2008 resource_provider_.get(), |
2011 staging_resource_pool_.get()); | 2009 staging_resource_pool_.get()); |
2012 on_demand_task_graph_runner_ = RasterWorkerPool::GetTaskGraphRunner(); | |
2013 } else if (!UseZeroCopyTextureUpload() && context_provider) { | 2010 } else if (!UseZeroCopyTextureUpload() && context_provider) { |
2014 resource_pool_ = ResourcePool::Create( | 2011 resource_pool_ = ResourcePool::Create( |
2015 resource_provider_.get(), | 2012 resource_provider_.get(), |
2016 GL_TEXTURE_2D, | 2013 GL_TEXTURE_2D, |
2017 resource_provider_->memory_efficient_texture_format()); | 2014 resource_provider_->memory_efficient_texture_format()); |
2018 | 2015 |
2019 raster_worker_pool_ = PixelBufferRasterWorkerPool::Create( | 2016 raster_worker_pool_ = PixelBufferRasterWorkerPool::Create( |
2020 proxy_->ImplThreadTaskRunner(), | 2017 proxy_->ImplThreadTaskRunner(), |
2021 RasterWorkerPool::GetTaskGraphRunner(), | 2018 RasterWorkerPool::GetTaskGraphRunner(), |
2022 context_provider, | 2019 context_provider, |
2023 resource_provider_.get(), | 2020 resource_provider_.get(), |
2024 transfer_buffer_memory_limit_); | 2021 transfer_buffer_memory_limit_); |
2025 on_demand_task_graph_runner_ = RasterWorkerPool::GetTaskGraphRunner(); | |
2026 } else { | 2022 } else { |
2027 resource_pool_ = | 2023 resource_pool_ = |
2028 ResourcePool::Create(resource_provider_.get(), | 2024 ResourcePool::Create(resource_provider_.get(), |
2029 GetMapImageTextureTarget(context_provider), | 2025 GetMapImageTextureTarget(context_provider), |
2030 resource_provider_->best_texture_format()); | 2026 resource_provider_->best_texture_format()); |
2031 | 2027 |
2032 raster_worker_pool_ = | 2028 raster_worker_pool_ = |
2033 ImageRasterWorkerPool::Create(proxy_->ImplThreadTaskRunner(), | 2029 ImageRasterWorkerPool::Create(proxy_->ImplThreadTaskRunner(), |
2034 RasterWorkerPool::GetTaskGraphRunner(), | 2030 RasterWorkerPool::GetTaskGraphRunner(), |
2035 resource_provider_.get()); | 2031 resource_provider_.get()); |
2036 on_demand_task_graph_runner_ = RasterWorkerPool::GetTaskGraphRunner(); | |
2037 } | 2032 } |
2038 | 2033 |
2039 tile_manager_ = | 2034 tile_manager_ = |
2040 TileManager::Create(this, | 2035 TileManager::Create(this, |
2041 proxy_->ImplThreadTaskRunner(), | 2036 proxy_->ImplThreadTaskRunner(), |
2042 resource_pool_.get(), | 2037 resource_pool_.get(), |
2043 raster_worker_pool_->AsRasterizer(), | 2038 raster_worker_pool_->AsRasterizer(), |
2044 rendering_stats_instrumentation_); | 2039 rendering_stats_instrumentation_); |
2045 | 2040 |
2046 UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy()); | 2041 UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy()); |
2047 need_to_update_visible_tiles_before_draw_ = false; | 2042 need_to_update_visible_tiles_before_draw_ = false; |
2048 on_demand_task_namespace_ = on_demand_task_graph_runner_->GetNamespaceToken(); | |
2049 } | 2043 } |
2050 | 2044 |
2051 void LayerTreeHostImpl::DestroyTileManager() { | 2045 void LayerTreeHostImpl::DestroyTileManager() { |
2052 tile_manager_.reset(); | 2046 tile_manager_.reset(); |
2053 resource_pool_.reset(); | 2047 resource_pool_.reset(); |
2054 staging_resource_pool_.reset(); | 2048 staging_resource_pool_.reset(); |
2055 raster_worker_pool_.reset(); | 2049 raster_worker_pool_.reset(); |
2056 } | 2050 } |
2057 | 2051 |
2058 bool LayerTreeHostImpl::UsePendingTreeForSync() const { | 2052 bool LayerTreeHostImpl::UsePendingTreeForSync() const { |
(...skipping 902 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2961 active_tree_->set_sent_page_scale_delta(scroll_info->page_scale_delta); | 2955 active_tree_->set_sent_page_scale_delta(scroll_info->page_scale_delta); |
2962 scroll_info->swap_promises.swap(swap_promises_for_main_thread_scroll_update_); | 2956 scroll_info->swap_promises.swap(swap_promises_for_main_thread_scroll_update_); |
2963 | 2957 |
2964 return scroll_info.Pass(); | 2958 return scroll_info.Pass(); |
2965 } | 2959 } |
2966 | 2960 |
2967 void LayerTreeHostImpl::SetFullRootLayerDamage() { | 2961 void LayerTreeHostImpl::SetFullRootLayerDamage() { |
2968 SetViewportDamage(gfx::Rect(DrawViewportSize())); | 2962 SetViewportDamage(gfx::Rect(DrawViewportSize())); |
2969 } | 2963 } |
2970 | 2964 |
2971 void LayerTreeHostImpl::RunOnDemandRasterTask(Task* on_demand_raster_task) { | |
2972 DCHECK(on_demand_task_graph_runner_); | |
2973 | |
2974 // Construct a task graph that contains this single raster task. | |
2975 TaskGraph graph; | |
2976 graph.nodes.push_back( | |
2977 TaskGraph::Node(on_demand_raster_task, | |
2978 RasterWorkerPool::kOnDemandRasterTaskPriority, | |
2979 0u)); | |
2980 | |
2981 // Schedule task and wait for task graph runner to finish running it. | |
2982 on_demand_task_graph_runner_->ScheduleTasks(on_demand_task_namespace_, | |
2983 &graph); | |
2984 | |
2985 if (on_demand_task_graph_runner_ == &synchronous_task_graph_runner_) | |
2986 on_demand_task_graph_runner_->RunUntilIdle(); | |
2987 | |
2988 on_demand_task_graph_runner_->WaitForTasksToFinishRunning( | |
2989 on_demand_task_namespace_); | |
2990 | |
2991 // Collect task now that it has finished running. | |
2992 Task::Vector completed_tasks; | |
2993 on_demand_task_graph_runner_->CollectCompletedTasks(on_demand_task_namespace_, | |
2994 &completed_tasks); | |
2995 DCHECK_EQ(1u, completed_tasks.size()); | |
2996 DCHECK_EQ(completed_tasks[0], on_demand_raster_task); | |
2997 } | |
2998 | |
2999 void LayerTreeHostImpl::ScrollViewportBy(gfx::Vector2dF scroll_delta) { | 2965 void LayerTreeHostImpl::ScrollViewportBy(gfx::Vector2dF scroll_delta) { |
3000 DCHECK(InnerViewportScrollLayer()); | 2966 DCHECK(InnerViewportScrollLayer()); |
3001 LayerImpl* scroll_layer = OuterViewportScrollLayer() | 2967 LayerImpl* scroll_layer = OuterViewportScrollLayer() |
3002 ? OuterViewportScrollLayer() | 2968 ? OuterViewportScrollLayer() |
3003 : InnerViewportScrollLayer(); | 2969 : InnerViewportScrollLayer(); |
3004 | 2970 |
3005 gfx::Vector2dF unused_delta = scroll_layer->ScrollBy(scroll_delta); | 2971 gfx::Vector2dF unused_delta = scroll_layer->ScrollBy(scroll_delta); |
3006 | 2972 |
3007 if (!unused_delta.IsZero() && (scroll_layer == OuterViewportScrollLayer())) | 2973 if (!unused_delta.IsZero() && (scroll_layer == OuterViewportScrollLayer())) |
3008 InnerViewportScrollLayer()->ScrollBy(unused_delta); | 2974 InnerViewportScrollLayer()->ScrollBy(unused_delta); |
(...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3412 } | 3378 } |
3413 | 3379 |
3414 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { | 3380 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { |
3415 std::vector<PictureLayerImpl*>::iterator it = | 3381 std::vector<PictureLayerImpl*>::iterator it = |
3416 std::find(picture_layers_.begin(), picture_layers_.end(), layer); | 3382 std::find(picture_layers_.begin(), picture_layers_.end(), layer); |
3417 DCHECK(it != picture_layers_.end()); | 3383 DCHECK(it != picture_layers_.end()); |
3418 picture_layers_.erase(it); | 3384 picture_layers_.erase(it); |
3419 } | 3385 } |
3420 | 3386 |
3421 } // namespace cc | 3387 } // namespace cc |
OLD | NEW |