Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(27)

Side by Side Diff: cc/trees/layer_tree_host_impl.cc

Issue 334133002: cc: Support on demand raster with ganesh (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: review Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698