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