| 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 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 209 LayerTreeHostImpl::LayerTreeHostImpl( | 209 LayerTreeHostImpl::LayerTreeHostImpl( |
| 210 const LayerTreeSettings& settings, | 210 const LayerTreeSettings& settings, |
| 211 LayerTreeHostImplClient* client, | 211 LayerTreeHostImplClient* client, |
| 212 Proxy* proxy, | 212 Proxy* proxy, |
| 213 RenderingStatsInstrumentation* rendering_stats_instrumentation, | 213 RenderingStatsInstrumentation* rendering_stats_instrumentation, |
| 214 SharedBitmapManager* manager, | 214 SharedBitmapManager* manager, |
| 215 int id) | 215 int id) |
| 216 : client_(client), | 216 : client_(client), |
| 217 proxy_(proxy), | 217 proxy_(proxy), |
| 218 use_gpu_rasterization_(false), | 218 use_gpu_rasterization_(false), |
| 219 on_demand_task_graph_runner_(NULL), |
| 219 input_handler_client_(NULL), | 220 input_handler_client_(NULL), |
| 220 did_lock_scrolling_layer_(false), | 221 did_lock_scrolling_layer_(false), |
| 221 should_bubble_scrolls_(false), | 222 should_bubble_scrolls_(false), |
| 222 wheel_scrolling_(false), | 223 wheel_scrolling_(false), |
| 223 scroll_affects_scroll_handler_(false), | 224 scroll_affects_scroll_handler_(false), |
| 224 scroll_layer_id_when_mouse_over_scrollbar_(0), | 225 scroll_layer_id_when_mouse_over_scrollbar_(0), |
| 225 tile_priorities_dirty_(false), | 226 tile_priorities_dirty_(false), |
| 226 root_layer_scroll_offset_delegate_(NULL), | 227 root_layer_scroll_offset_delegate_(NULL), |
| 227 settings_(settings), | 228 settings_(settings), |
| 228 visible_(true), | 229 visible_(true), |
| (...skipping 1647 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1876 if (use_gpu_rasterization_ && context_provider) { | 1877 if (use_gpu_rasterization_ && context_provider) { |
| 1877 resource_pool_ = | 1878 resource_pool_ = |
| 1878 ResourcePool::Create(resource_provider_.get(), | 1879 ResourcePool::Create(resource_provider_.get(), |
| 1879 GL_TEXTURE_2D, | 1880 GL_TEXTURE_2D, |
| 1880 resource_provider_->best_texture_format()); | 1881 resource_provider_->best_texture_format()); |
| 1881 | 1882 |
| 1882 raster_worker_pool_ = | 1883 raster_worker_pool_ = |
| 1883 DirectRasterWorkerPool::Create(proxy_->ImplThreadTaskRunner(), | 1884 DirectRasterWorkerPool::Create(proxy_->ImplThreadTaskRunner(), |
| 1884 resource_provider_.get(), | 1885 resource_provider_.get(), |
| 1885 context_provider); | 1886 context_provider); |
| 1887 on_demand_task_graph_runner_ = &synchronous_task_graph_runner_; |
| 1886 } else if (UseZeroCopyTextureUpload()) { | 1888 } else if (UseZeroCopyTextureUpload()) { |
| 1887 resource_pool_ = | 1889 resource_pool_ = |
| 1888 ResourcePool::Create(resource_provider_.get(), | 1890 ResourcePool::Create(resource_provider_.get(), |
| 1889 GetMapImageTextureTarget(context_provider), | 1891 GetMapImageTextureTarget(context_provider), |
| 1890 resource_provider_->best_texture_format()); | 1892 resource_provider_->best_texture_format()); |
| 1891 | 1893 |
| 1892 raster_worker_pool_ = | 1894 raster_worker_pool_ = |
| 1893 ImageRasterWorkerPool::Create(proxy_->ImplThreadTaskRunner(), | 1895 ImageRasterWorkerPool::Create(proxy_->ImplThreadTaskRunner(), |
| 1894 RasterWorkerPool::GetTaskGraphRunner(), | 1896 RasterWorkerPool::GetTaskGraphRunner(), |
| 1895 resource_provider_.get()); | 1897 resource_provider_.get()); |
| 1898 on_demand_task_graph_runner_ = RasterWorkerPool::GetTaskGraphRunner(); |
| 1896 } else if (UseOneCopyTextureUpload()) { | 1899 } else if (UseOneCopyTextureUpload()) { |
| 1897 // We need to create a staging resource pool when using copy rasterizer. | 1900 // We need to create a staging resource pool when using copy rasterizer. |
| 1898 staging_resource_pool_ = | 1901 staging_resource_pool_ = |
| 1899 ResourcePool::Create(resource_provider_.get(), | 1902 ResourcePool::Create(resource_provider_.get(), |
| 1900 GetMapImageTextureTarget(context_provider), | 1903 GetMapImageTextureTarget(context_provider), |
| 1901 resource_provider_->best_texture_format()); | 1904 resource_provider_->best_texture_format()); |
| 1902 resource_pool_ = | 1905 resource_pool_ = |
| 1903 ResourcePool::Create(resource_provider_.get(), | 1906 ResourcePool::Create(resource_provider_.get(), |
| 1904 GL_TEXTURE_2D, | 1907 GL_TEXTURE_2D, |
| 1905 resource_provider_->best_texture_format()); | 1908 resource_provider_->best_texture_format()); |
| 1906 | 1909 |
| 1907 raster_worker_pool_ = ImageCopyRasterWorkerPool::Create( | 1910 raster_worker_pool_ = ImageCopyRasterWorkerPool::Create( |
| 1908 proxy_->ImplThreadTaskRunner(), | 1911 proxy_->ImplThreadTaskRunner(), |
| 1909 RasterWorkerPool::GetTaskGraphRunner(), | 1912 RasterWorkerPool::GetTaskGraphRunner(), |
| 1910 resource_provider_.get(), | 1913 resource_provider_.get(), |
| 1911 staging_resource_pool_.get()); | 1914 staging_resource_pool_.get()); |
| 1915 on_demand_task_graph_runner_ = RasterWorkerPool::GetTaskGraphRunner(); |
| 1912 } else { | 1916 } else { |
| 1913 resource_pool_ = ResourcePool::Create( | 1917 resource_pool_ = ResourcePool::Create( |
| 1914 resource_provider_.get(), | 1918 resource_provider_.get(), |
| 1915 GL_TEXTURE_2D, | 1919 GL_TEXTURE_2D, |
| 1916 resource_provider_->memory_efficient_texture_format()); | 1920 resource_provider_->memory_efficient_texture_format()); |
| 1917 | 1921 |
| 1918 raster_worker_pool_ = PixelBufferRasterWorkerPool::Create( | 1922 raster_worker_pool_ = PixelBufferRasterWorkerPool::Create( |
| 1919 proxy_->ImplThreadTaskRunner(), | 1923 proxy_->ImplThreadTaskRunner(), |
| 1920 RasterWorkerPool::GetTaskGraphRunner(), | 1924 RasterWorkerPool::GetTaskGraphRunner(), |
| 1921 resource_provider_.get(), | 1925 resource_provider_.get(), |
| 1922 transfer_buffer_memory_limit_); | 1926 transfer_buffer_memory_limit_); |
| 1927 on_demand_task_graph_runner_ = RasterWorkerPool::GetTaskGraphRunner(); |
| 1923 } | 1928 } |
| 1924 | 1929 |
| 1925 tile_manager_ = | 1930 tile_manager_ = |
| 1926 TileManager::Create(this, | 1931 TileManager::Create(this, |
| 1927 proxy_->ImplThreadTaskRunner(), | 1932 proxy_->ImplThreadTaskRunner(), |
| 1928 resource_pool_.get(), | 1933 resource_pool_.get(), |
| 1929 raster_worker_pool_->AsRasterizer(), | 1934 raster_worker_pool_->AsRasterizer(), |
| 1930 rendering_stats_instrumentation_); | 1935 rendering_stats_instrumentation_); |
| 1931 | 1936 |
| 1932 UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy()); | 1937 UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy()); |
| 1933 need_to_update_visible_tiles_before_draw_ = false; | 1938 need_to_update_visible_tiles_before_draw_ = false; |
| 1939 on_demand_task_namespace_ = on_demand_task_graph_runner_->GetNamespaceToken(); |
| 1934 } | 1940 } |
| 1935 | 1941 |
| 1936 void LayerTreeHostImpl::DestroyTileManager() { | 1942 void LayerTreeHostImpl::DestroyTileManager() { |
| 1937 tile_manager_.reset(); | 1943 tile_manager_.reset(); |
| 1938 resource_pool_.reset(); | 1944 resource_pool_.reset(); |
| 1939 staging_resource_pool_.reset(); | 1945 staging_resource_pool_.reset(); |
| 1940 raster_worker_pool_.reset(); | 1946 raster_worker_pool_.reset(); |
| 1941 } | 1947 } |
| 1942 | 1948 |
| 1943 bool LayerTreeHostImpl::UseZeroCopyTextureUpload() const { | 1949 bool LayerTreeHostImpl::UseZeroCopyTextureUpload() const { |
| (...skipping 810 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2754 scroll_info->page_scale_delta = active_tree_->page_scale_delta(); | 2760 scroll_info->page_scale_delta = active_tree_->page_scale_delta(); |
| 2755 active_tree_->set_sent_page_scale_delta(scroll_info->page_scale_delta); | 2761 active_tree_->set_sent_page_scale_delta(scroll_info->page_scale_delta); |
| 2756 | 2762 |
| 2757 return scroll_info.Pass(); | 2763 return scroll_info.Pass(); |
| 2758 } | 2764 } |
| 2759 | 2765 |
| 2760 void LayerTreeHostImpl::SetFullRootLayerDamage() { | 2766 void LayerTreeHostImpl::SetFullRootLayerDamage() { |
| 2761 SetViewportDamage(gfx::Rect(DrawViewportSize())); | 2767 SetViewportDamage(gfx::Rect(DrawViewportSize())); |
| 2762 } | 2768 } |
| 2763 | 2769 |
| 2770 void LayerTreeHostImpl::RunOnDemandRasterTask(Task* on_demand_raster_task) { |
| 2771 DCHECK(on_demand_task_graph_runner_); |
| 2772 |
| 2773 // Construct a task graph that contains this single raster task. |
| 2774 TaskGraph graph; |
| 2775 graph.nodes.push_back( |
| 2776 TaskGraph::Node(on_demand_raster_task, |
| 2777 RasterWorkerPool::kOnDemandRasterTaskPriority, |
| 2778 0u)); |
| 2779 |
| 2780 // Schedule task and wait for task graph runner to finish running it. |
| 2781 on_demand_task_graph_runner_->ScheduleTasks(on_demand_task_namespace_, |
| 2782 &graph); |
| 2783 |
| 2784 if (on_demand_task_graph_runner_ == &synchronous_task_graph_runner_) |
| 2785 on_demand_task_graph_runner_->RunUntilIdle(); |
| 2786 |
| 2787 on_demand_task_graph_runner_->WaitForTasksToFinishRunning( |
| 2788 on_demand_task_namespace_); |
| 2789 |
| 2790 // Collect task now that it has finished running. |
| 2791 Task::Vector completed_tasks; |
| 2792 on_demand_task_graph_runner_->CollectCompletedTasks(on_demand_task_namespace_, |
| 2793 &completed_tasks); |
| 2794 DCHECK_EQ(1u, completed_tasks.size()); |
| 2795 DCHECK_EQ(completed_tasks[0], on_demand_raster_task); |
| 2796 } |
| 2797 |
| 2764 void LayerTreeHostImpl::ScrollViewportBy(gfx::Vector2dF scroll_delta) { | 2798 void LayerTreeHostImpl::ScrollViewportBy(gfx::Vector2dF scroll_delta) { |
| 2765 DCHECK(InnerViewportScrollLayer()); | 2799 DCHECK(InnerViewportScrollLayer()); |
| 2766 LayerImpl* scroll_layer = OuterViewportScrollLayer() | 2800 LayerImpl* scroll_layer = OuterViewportScrollLayer() |
| 2767 ? OuterViewportScrollLayer() | 2801 ? OuterViewportScrollLayer() |
| 2768 : InnerViewportScrollLayer(); | 2802 : InnerViewportScrollLayer(); |
| 2769 | 2803 |
| 2770 gfx::Vector2dF unused_delta = scroll_layer->ScrollBy(scroll_delta); | 2804 gfx::Vector2dF unused_delta = scroll_layer->ScrollBy(scroll_delta); |
| 2771 | 2805 |
| 2772 if (!unused_delta.IsZero() && (scroll_layer == OuterViewportScrollLayer())) | 2806 if (!unused_delta.IsZero() && (scroll_layer == OuterViewportScrollLayer())) |
| 2773 InnerViewportScrollLayer()->ScrollBy(unused_delta); | 2807 InnerViewportScrollLayer()->ScrollBy(unused_delta); |
| (...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3108 } | 3142 } |
| 3109 | 3143 |
| 3110 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { | 3144 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { |
| 3111 std::vector<PictureLayerImpl*>::iterator it = | 3145 std::vector<PictureLayerImpl*>::iterator it = |
| 3112 std::find(picture_layers_.begin(), picture_layers_.end(), layer); | 3146 std::find(picture_layers_.begin(), picture_layers_.end(), layer); |
| 3113 DCHECK(it != picture_layers_.end()); | 3147 DCHECK(it != picture_layers_.end()); |
| 3114 picture_layers_.erase(it); | 3148 picture_layers_.erase(it); |
| 3115 } | 3149 } |
| 3116 | 3150 |
| 3117 } // namespace cc | 3151 } // namespace cc |
| OLD | NEW |