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

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: review2 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 1647 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
reveman 2014/06/20 18:44:19 nit: this blank line looks inconsistent with lines
boliu 2014/06/20 19:02:19 Removed this blank line then.
1888 on_demand_task_graph_runner_ = &synchronous_task_graph_runner_;
1886 } else if (UseZeroCopyTextureUpload()) { 1889 } else if (UseZeroCopyTextureUpload()) {
1887 resource_pool_ = 1890 resource_pool_ =
1888 ResourcePool::Create(resource_provider_.get(), 1891 ResourcePool::Create(resource_provider_.get(),
1889 GetMapImageTextureTarget(context_provider), 1892 GetMapImageTextureTarget(context_provider),
1890 resource_provider_->best_texture_format()); 1893 resource_provider_->best_texture_format());
1891 1894
1892 raster_worker_pool_ = 1895 raster_worker_pool_ =
1893 ImageRasterWorkerPool::Create(proxy_->ImplThreadTaskRunner(), 1896 ImageRasterWorkerPool::Create(proxy_->ImplThreadTaskRunner(),
1894 RasterWorkerPool::GetTaskGraphRunner(), 1897 RasterWorkerPool::GetTaskGraphRunner(),
1895 resource_provider_.get()); 1898 resource_provider_.get());
1899 on_demand_task_graph_runner_ = RasterWorkerPool::GetTaskGraphRunner();
1896 } else if (UseOneCopyTextureUpload()) { 1900 } else if (UseOneCopyTextureUpload()) {
1897 // We need to create a staging resource pool when using copy rasterizer. 1901 // We need to create a staging resource pool when using copy rasterizer.
1898 staging_resource_pool_ = 1902 staging_resource_pool_ =
1899 ResourcePool::Create(resource_provider_.get(), 1903 ResourcePool::Create(resource_provider_.get(),
1900 GetMapImageTextureTarget(context_provider), 1904 GetMapImageTextureTarget(context_provider),
1901 resource_provider_->best_texture_format()); 1905 resource_provider_->best_texture_format());
1902 resource_pool_ = 1906 resource_pool_ =
1903 ResourcePool::Create(resource_provider_.get(), 1907 ResourcePool::Create(resource_provider_.get(),
1904 GL_TEXTURE_2D, 1908 GL_TEXTURE_2D,
1905 resource_provider_->best_texture_format()); 1909 resource_provider_->best_texture_format());
1906 1910
1907 raster_worker_pool_ = ImageCopyRasterWorkerPool::Create( 1911 raster_worker_pool_ = ImageCopyRasterWorkerPool::Create(
1908 proxy_->ImplThreadTaskRunner(), 1912 proxy_->ImplThreadTaskRunner(),
1909 RasterWorkerPool::GetTaskGraphRunner(), 1913 RasterWorkerPool::GetTaskGraphRunner(),
1910 resource_provider_.get(), 1914 resource_provider_.get(),
1911 staging_resource_pool_.get()); 1915 staging_resource_pool_.get());
1916 on_demand_task_graph_runner_ = RasterWorkerPool::GetTaskGraphRunner();
1912 } else { 1917 } else {
1913 resource_pool_ = ResourcePool::Create( 1918 resource_pool_ = ResourcePool::Create(
1914 resource_provider_.get(), 1919 resource_provider_.get(),
1915 GL_TEXTURE_2D, 1920 GL_TEXTURE_2D,
1916 resource_provider_->memory_efficient_texture_format()); 1921 resource_provider_->memory_efficient_texture_format());
1917 1922
1918 raster_worker_pool_ = PixelBufferRasterWorkerPool::Create( 1923 raster_worker_pool_ = PixelBufferRasterWorkerPool::Create(
1919 proxy_->ImplThreadTaskRunner(), 1924 proxy_->ImplThreadTaskRunner(),
1920 RasterWorkerPool::GetTaskGraphRunner(), 1925 RasterWorkerPool::GetTaskGraphRunner(),
1921 resource_provider_.get(), 1926 resource_provider_.get(),
1922 transfer_buffer_memory_limit_); 1927 transfer_buffer_memory_limit_);
1928 on_demand_task_graph_runner_ = RasterWorkerPool::GetTaskGraphRunner();
1923 } 1929 }
1924 1930
1925 tile_manager_ = 1931 tile_manager_ =
1926 TileManager::Create(this, 1932 TileManager::Create(this,
1927 proxy_->ImplThreadTaskRunner(), 1933 proxy_->ImplThreadTaskRunner(),
1928 resource_pool_.get(), 1934 resource_pool_.get(),
1929 raster_worker_pool_->AsRasterizer(), 1935 raster_worker_pool_->AsRasterizer(),
1930 rendering_stats_instrumentation_); 1936 rendering_stats_instrumentation_);
1931 1937
1932 UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy()); 1938 UpdateTileManagerMemoryPolicy(ActualManagedMemoryPolicy());
1933 need_to_update_visible_tiles_before_draw_ = false; 1939 need_to_update_visible_tiles_before_draw_ = false;
1940 on_demand_task_namespace_ = on_demand_task_graph_runner_->GetNamespaceToken();
reveman 2014/06/20 18:44:19 Note: we'll end up creating a new task namespace e
boliu 2014/06/20 19:02:19 Yeah I thought about this. In webview CreateAndSet
1934 } 1941 }
1935 1942
1936 void LayerTreeHostImpl::DestroyTileManager() { 1943 void LayerTreeHostImpl::DestroyTileManager() {
1937 tile_manager_.reset(); 1944 tile_manager_.reset();
1938 resource_pool_.reset(); 1945 resource_pool_.reset();
1939 staging_resource_pool_.reset(); 1946 staging_resource_pool_.reset();
1940 raster_worker_pool_.reset(); 1947 raster_worker_pool_.reset();
1941 } 1948 }
1942 1949
1943 bool LayerTreeHostImpl::UseZeroCopyTextureUpload() const { 1950 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(); 2761 scroll_info->page_scale_delta = active_tree_->page_scale_delta();
2755 active_tree_->set_sent_page_scale_delta(scroll_info->page_scale_delta); 2762 active_tree_->set_sent_page_scale_delta(scroll_info->page_scale_delta);
2756 2763
2757 return scroll_info.Pass(); 2764 return scroll_info.Pass();
2758 } 2765 }
2759 2766
2760 void LayerTreeHostImpl::SetFullRootLayerDamage() { 2767 void LayerTreeHostImpl::SetFullRootLayerDamage() {
2761 SetViewportDamage(gfx::Rect(DrawViewportSize())); 2768 SetViewportDamage(gfx::Rect(DrawViewportSize()));
2762 } 2769 }
2763 2770
2771 void LayerTreeHostImpl::RunOnDemandRasterTask(Task* on_demand_raster_task) {
2772 DCHECK(on_demand_task_graph_runner_);
2773
2774 // Construct a task graph that contains this single raster task.
2775 TaskGraph graph;
2776 graph.nodes.push_back(
2777 TaskGraph::Node(on_demand_raster_task,
2778 RasterWorkerPool::kOnDemandRasterTaskPriority,
2779 0u));
2780
2781 // Schedule task and wait for task graph runner to finish running it.
2782 on_demand_task_graph_runner_->ScheduleTasks(on_demand_task_namespace_,
2783 &graph);
2784
2785 if (&synchronous_task_graph_runner_ == on_demand_task_graph_runner_)
reveman 2014/06/20 18:44:19 nit: do you mind flipping this around? not sure wh
2786 on_demand_task_graph_runner_->RunUntilIdle();
reveman 2014/06/20 18:44:19 nit: I think a blank line here would make the code
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698