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 1636 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1865 void LayerTreeHostImpl::CreateAndSetTileManager() { | 1866 void LayerTreeHostImpl::CreateAndSetTileManager() { |
1866 DCHECK(!tile_manager_); | 1867 DCHECK(!tile_manager_); |
1867 DCHECK(settings_.impl_side_painting); | 1868 DCHECK(settings_.impl_side_painting); |
1868 DCHECK(output_surface_); | 1869 DCHECK(output_surface_); |
1869 DCHECK(resource_provider_); | 1870 DCHECK(resource_provider_); |
1870 DCHECK(proxy_->ImplThreadTaskRunner()); | 1871 DCHECK(proxy_->ImplThreadTaskRunner()); |
1871 | 1872 |
1872 ContextProvider* context_provider = output_surface_->context_provider(); | 1873 ContextProvider* context_provider = output_surface_->context_provider(); |
1873 transfer_buffer_memory_limit_ = | 1874 transfer_buffer_memory_limit_ = |
1874 GetMaxTransferBufferUsageBytes(context_provider); | 1875 GetMaxTransferBufferUsageBytes(context_provider); |
1876 on_demand_task_graph_runner_ = NULL; | |
reveman
2014/06/20 03:56:30
nit: doesn't look like you need this line
| |
1875 | 1877 |
1876 if (use_gpu_rasterization_ && context_provider) { | 1878 if (use_gpu_rasterization_ && context_provider) { |
1877 resource_pool_ = | 1879 resource_pool_ = |
1878 ResourcePool::Create(resource_provider_.get(), | 1880 ResourcePool::Create(resource_provider_.get(), |
1879 GL_TEXTURE_2D, | 1881 GL_TEXTURE_2D, |
1880 resource_provider_->best_texture_format()); | 1882 resource_provider_->best_texture_format()); |
1881 | 1883 |
1882 raster_worker_pool_ = | 1884 raster_worker_pool_ = |
1883 DirectRasterWorkerPool::Create(proxy_->ImplThreadTaskRunner(), | 1885 DirectRasterWorkerPool::Create(proxy_->ImplThreadTaskRunner(), |
1884 resource_provider_.get(), | 1886 resource_provider_.get(), |
1885 context_provider); | 1887 context_provider); |
1888 | |
1889 if (!synchronous_on_demand_task_graph_runner_) | |
1890 synchronous_on_demand_task_graph_runner_.reset(new TaskGraphRunner); | |
reveman
2014/06/20 03:56:30
A TaskGraphRunner instance is relatively lightweig
boliu
2014/06/20 04:21:06
Then don't need scoped_ptr either. Just embed the
| |
1891 on_demand_task_graph_runner_ = | |
1892 synchronous_on_demand_task_graph_runner_.get(); | |
1886 } else if (UseZeroCopyTextureUpload()) { | 1893 } else if (UseZeroCopyTextureUpload()) { |
1887 resource_pool_ = | 1894 resource_pool_ = |
1888 ResourcePool::Create(resource_provider_.get(), | 1895 ResourcePool::Create(resource_provider_.get(), |
1889 GetMapImageTextureTarget(context_provider), | 1896 GetMapImageTextureTarget(context_provider), |
1890 resource_provider_->best_texture_format()); | 1897 resource_provider_->best_texture_format()); |
1891 | 1898 |
1892 raster_worker_pool_ = | 1899 raster_worker_pool_ = |
1893 ImageRasterWorkerPool::Create(proxy_->ImplThreadTaskRunner(), | 1900 ImageRasterWorkerPool::Create(proxy_->ImplThreadTaskRunner(), |
1894 RasterWorkerPool::GetTaskGraphRunner(), | 1901 RasterWorkerPool::GetTaskGraphRunner(), |
1895 resource_provider_.get()); | 1902 resource_provider_.get()); |
1903 on_demand_task_graph_runner_ = RasterWorkerPool::GetTaskGraphRunner(); | |
1896 } else if (UseOneCopyTextureUpload()) { | 1904 } else if (UseOneCopyTextureUpload()) { |
1897 // We need to create a staging resource pool when using copy rasterizer. | 1905 // We need to create a staging resource pool when using copy rasterizer. |
1898 staging_resource_pool_ = | 1906 staging_resource_pool_ = |
1899 ResourcePool::Create(resource_provider_.get(), | 1907 ResourcePool::Create(resource_provider_.get(), |
1900 GetMapImageTextureTarget(context_provider), | 1908 GetMapImageTextureTarget(context_provider), |
1901 resource_provider_->best_texture_format()); | 1909 resource_provider_->best_texture_format()); |
1902 resource_pool_ = | 1910 resource_pool_ = |
1903 ResourcePool::Create(resource_provider_.get(), | 1911 ResourcePool::Create(resource_provider_.get(), |
1904 GL_TEXTURE_2D, | 1912 GL_TEXTURE_2D, |
1905 resource_provider_->best_texture_format()); | 1913 resource_provider_->best_texture_format()); |
1906 | 1914 |
1907 raster_worker_pool_ = ImageCopyRasterWorkerPool::Create( | 1915 raster_worker_pool_ = ImageCopyRasterWorkerPool::Create( |
1908 proxy_->ImplThreadTaskRunner(), | 1916 proxy_->ImplThreadTaskRunner(), |
1909 RasterWorkerPool::GetTaskGraphRunner(), | 1917 RasterWorkerPool::GetTaskGraphRunner(), |
1910 resource_provider_.get(), | 1918 resource_provider_.get(), |
1911 staging_resource_pool_.get()); | 1919 staging_resource_pool_.get()); |
1920 on_demand_task_graph_runner_ = RasterWorkerPool::GetTaskGraphRunner(); | |
1912 } else { | 1921 } else { |
1913 resource_pool_ = ResourcePool::Create( | 1922 resource_pool_ = ResourcePool::Create( |
1914 resource_provider_.get(), | 1923 resource_provider_.get(), |
1915 GL_TEXTURE_2D, | 1924 GL_TEXTURE_2D, |
1916 resource_provider_->memory_efficient_texture_format()); | 1925 resource_provider_->memory_efficient_texture_format()); |
1917 | 1926 |
1918 raster_worker_pool_ = PixelBufferRasterWorkerPool::Create( | 1927 raster_worker_pool_ = PixelBufferRasterWorkerPool::Create( |
1919 proxy_->ImplThreadTaskRunner(), | 1928 proxy_->ImplThreadTaskRunner(), |
1920 RasterWorkerPool::GetTaskGraphRunner(), | 1929 RasterWorkerPool::GetTaskGraphRunner(), |
1921 resource_provider_.get(), | 1930 resource_provider_.get(), |
1922 transfer_buffer_memory_limit_); | 1931 transfer_buffer_memory_limit_); |
1932 on_demand_task_graph_runner_ = RasterWorkerPool::GetTaskGraphRunner(); | |
1923 } | 1933 } |
1924 | 1934 |
1925 tile_manager_ = | 1935 tile_manager_ = |
1926 TileManager::Create(this, | 1936 TileManager::Create(this, |
1927 proxy_->ImplThreadTaskRunner(), | 1937 proxy_->ImplThreadTaskRunner(), |
1928 resource_pool_.get(), | 1938 resource_pool_.get(), |
1929 raster_worker_pool_->AsRasterizer(), | 1939 raster_worker_pool_->AsRasterizer(), |
1930 rendering_stats_instrumentation_); | 1940 rendering_stats_instrumentation_); |
1931 | 1941 |
1932 UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy()); | 1942 UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy()); |
1933 need_to_update_visible_tiles_before_draw_ = false; | 1943 need_to_update_visible_tiles_before_draw_ = false; |
1944 on_demand_task_namespace_ = on_demand_task_graph_runner_->GetNamespaceToken(); | |
1934 } | 1945 } |
1935 | 1946 |
1936 void LayerTreeHostImpl::DestroyTileManager() { | 1947 void LayerTreeHostImpl::DestroyTileManager() { |
1937 tile_manager_.reset(); | 1948 tile_manager_.reset(); |
1938 resource_pool_.reset(); | 1949 resource_pool_.reset(); |
1939 staging_resource_pool_.reset(); | 1950 staging_resource_pool_.reset(); |
1940 raster_worker_pool_.reset(); | 1951 raster_worker_pool_.reset(); |
1941 } | 1952 } |
1942 | 1953 |
1943 bool LayerTreeHostImpl::UseZeroCopyTextureUpload() const { | 1954 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(); | 2765 scroll_info->page_scale_delta = active_tree_->page_scale_delta(); |
2755 active_tree_->set_sent_page_scale_delta(scroll_info->page_scale_delta); | 2766 active_tree_->set_sent_page_scale_delta(scroll_info->page_scale_delta); |
2756 | 2767 |
2757 return scroll_info.Pass(); | 2768 return scroll_info.Pass(); |
2758 } | 2769 } |
2759 | 2770 |
2760 void LayerTreeHostImpl::SetFullRootLayerDamage() { | 2771 void LayerTreeHostImpl::SetFullRootLayerDamage() { |
2761 SetViewportDamage(gfx::Rect(DrawViewportSize())); | 2772 SetViewportDamage(gfx::Rect(DrawViewportSize())); |
2762 } | 2773 } |
2763 | 2774 |
2775 void LayerTreeHostImpl::RunOnDemandRasterTask(Task* on_demand_raster_task) { | |
2776 DCHECK(on_demand_task_graph_runner_); | |
2777 | |
2778 // Construct a task graph that contains this single raster task. | |
2779 TaskGraph graph; | |
2780 graph.nodes.push_back( | |
2781 TaskGraph::Node(on_demand_raster_task, | |
2782 RasterWorkerPool::kOnDemandRasterTaskPriority, | |
2783 0u)); | |
2784 | |
2785 // Schedule task and wait for task graph runner to finish running it. | |
2786 on_demand_task_graph_runner_->ScheduleTasks(on_demand_task_namespace_, | |
2787 &graph); | |
2788 | |
2789 if (synchronous_on_demand_task_graph_runner_.get() == | |
2790 on_demand_task_graph_runner_) { | |
2791 on_demand_task_graph_runner_->RunUntilIdle(); | |
2792 } else { | |
reveman
2014/06/20 03:56:30
can you remove this "else" and always call WaitFor
| |
2793 on_demand_task_graph_runner_->WaitForTasksToFinishRunning( | |
2794 on_demand_task_namespace_); | |
2795 } | |
2796 | |
2797 // Collect task now that it has finished running. | |
2798 Task::Vector completed_tasks; | |
2799 on_demand_task_graph_runner_->CollectCompletedTasks(on_demand_task_namespace_, | |
2800 &completed_tasks); | |
2801 DCHECK_EQ(1u, completed_tasks.size()); | |
2802 DCHECK_EQ(completed_tasks[0], on_demand_raster_task); | |
2803 } | |
2804 | |
2764 void LayerTreeHostImpl::ScrollViewportBy(gfx::Vector2dF scroll_delta) { | 2805 void LayerTreeHostImpl::ScrollViewportBy(gfx::Vector2dF scroll_delta) { |
2765 DCHECK(InnerViewportScrollLayer()); | 2806 DCHECK(InnerViewportScrollLayer()); |
2766 LayerImpl* scroll_layer = OuterViewportScrollLayer() | 2807 LayerImpl* scroll_layer = OuterViewportScrollLayer() |
2767 ? OuterViewportScrollLayer() | 2808 ? OuterViewportScrollLayer() |
2768 : InnerViewportScrollLayer(); | 2809 : InnerViewportScrollLayer(); |
2769 | 2810 |
2770 gfx::Vector2dF unused_delta = scroll_layer->ScrollBy(scroll_delta); | 2811 gfx::Vector2dF unused_delta = scroll_layer->ScrollBy(scroll_delta); |
2771 | 2812 |
2772 if (!unused_delta.IsZero() && (scroll_layer == OuterViewportScrollLayer())) | 2813 if (!unused_delta.IsZero() && (scroll_layer == OuterViewportScrollLayer())) |
2773 InnerViewportScrollLayer()->ScrollBy(unused_delta); | 2814 InnerViewportScrollLayer()->ScrollBy(unused_delta); |
(...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3108 } | 3149 } |
3109 | 3150 |
3110 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { | 3151 void LayerTreeHostImpl::UnregisterPictureLayerImpl(PictureLayerImpl* layer) { |
3111 std::vector<PictureLayerImpl*>::iterator it = | 3152 std::vector<PictureLayerImpl*>::iterator it = |
3112 std::find(picture_layers_.begin(), picture_layers_.end(), layer); | 3153 std::find(picture_layers_.begin(), picture_layers_.end(), layer); |
3113 DCHECK(it != picture_layers_.end()); | 3154 DCHECK(it != picture_layers_.end()); |
3114 picture_layers_.erase(it); | 3155 picture_layers_.erase(it); |
3115 } | 3156 } |
3116 | 3157 |
3117 } // namespace cc | 3158 } // namespace cc |
OLD | NEW |