diff options
author | boliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-06-21 01:11:57 +0000 |
---|---|---|
committer | boliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-06-21 01:11:57 +0000 |
commit | e7391c3bb6f2345e4ed1d6d9c9d1cf03f83ff48b (patch) | |
tree | 90d10d958d424e6d024500903eb1c84a3df4489a /cc/output | |
parent | f89ee437e25a2afde6f7dc2ca3d49fd462d23ea3 (diff) | |
download | chromium_src-e7391c3bb6f2345e4ed1d6d9c9d1cf03f83ff48b.zip chromium_src-e7391c3bb6f2345e4ed1d6d9c9d1cf03f83ff48b.tar.gz chromium_src-e7391c3bb6f2345e4ed1d6d9c9d1cf03f83ff48b.tar.bz2 |
cc: Support on demand raster with gpu rasterization
Normal gpu rasterization happens on compositor thread, so on-demand
rasteration must also be on compositor thread. So if impl-side painting is
off or if gpu rasterization is on, then directly raster on compositor
thread.
BUG=383379
Review URL: https://codereview.chromium.org/334133002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@278887 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cc/output')
-rw-r--r-- | cc/output/direct_renderer.cc | 27 | ||||
-rw-r--r-- | cc/output/direct_renderer.h | 4 | ||||
-rw-r--r-- | cc/output/gl_renderer.cc | 2 | ||||
-rw-r--r-- | cc/output/overlay_unittest.cc | 1 | ||||
-rw-r--r-- | cc/output/renderer.h | 2 | ||||
-rw-r--r-- | cc/output/software_renderer.cc | 2 | ||||
-rw-r--r-- | cc/output/software_renderer_unittest.cc | 1 |
7 files changed, 6 insertions, 33 deletions
diff --git a/cc/output/direct_renderer.cc b/cc/output/direct_renderer.cc index 08fe2571..ccde85b 100644 --- a/cc/output/direct_renderer.cc +++ b/cc/output/direct_renderer.cc @@ -415,33 +415,6 @@ bool DirectRenderer::UseRenderPass(DrawingFrame* frame, return BindFramebufferToTexture(frame, texture, render_pass->output_rect); } -void DirectRenderer::RunOnDemandRasterTask(Task* on_demand_raster_task) { - TaskGraphRunner* task_graph_runner = RasterWorkerPool::GetTaskGraphRunner(); - DCHECK(task_graph_runner); - - // Make sure we have a unique task namespace token. - if (!on_demand_task_namespace_.IsValid()) - on_demand_task_namespace_ = task_graph_runner->GetNamespaceToken(); - - // Construct a task graph that contains this single raster task. - TaskGraph graph; - graph.nodes.push_back( - TaskGraph::Node(on_demand_raster_task, - RasterWorkerPool::kOnDemandRasterTaskPriority, - 0u)); - - // Schedule task and wait for task graph runner to finish running it. - task_graph_runner->ScheduleTasks(on_demand_task_namespace_, &graph); - task_graph_runner->WaitForTasksToFinishRunning(on_demand_task_namespace_); - - // Collect task now that it has finished running. - Task::Vector completed_tasks; - task_graph_runner->CollectCompletedTasks(on_demand_task_namespace_, - &completed_tasks); - DCHECK_EQ(1u, completed_tasks.size()); - DCHECK_EQ(completed_tasks[0], on_demand_raster_task); -} - bool DirectRenderer::HasAllocatedResourcesForTesting(RenderPass::Id id) const { ScopedResource* texture = render_pass_textures_.get(id); diff --git a/cc/output/direct_renderer.h b/cc/output/direct_renderer.h index 0035ec2..1a84a87 100644 --- a/cc/output/direct_renderer.h +++ b/cc/output/direct_renderer.h @@ -91,8 +91,6 @@ class CC_EXPORT DirectRenderer : public Renderer { void DrawRenderPass(DrawingFrame* frame, const RenderPass* render_pass); bool UseRenderPass(DrawingFrame* frame, const RenderPass* render_pass); - void RunOnDemandRasterTask(Task* on_demand_raster_task); - virtual void BindFramebufferToOutputSurface(DrawingFrame* frame) = 0; virtual bool BindFramebufferToTexture(DrawingFrame* frame, const ScopedResource* resource, @@ -134,8 +132,6 @@ class CC_EXPORT DirectRenderer : public Renderer { private: gfx::Vector2d enlarge_pass_texture_amount_; - NamespaceToken on_demand_task_namespace_; - DISALLOW_COPY_AND_ASSIGN(DirectRenderer); }; diff --git a/cc/output/gl_renderer.cc b/cc/output/gl_renderer.cc index 68bc291..b58a4d1 100644 --- a/cc/output/gl_renderer.cc +++ b/cc/output/gl_renderer.cc @@ -1907,7 +1907,7 @@ void GLRenderer::DrawPictureQuad(const DrawingFrame* frame, &on_demand_tile_raster_bitmap_, quad->content_rect, quad->contents_scale)); - RunOnDemandRasterTask(on_demand_raster_task.get()); + client_->RunOnDemandRasterTask(on_demand_raster_task.get()); uint8_t* bitmap_pixels = NULL; SkBitmap on_demand_tile_raster_bitmap_dest; diff --git a/cc/output/overlay_unittest.cc b/cc/output/overlay_unittest.cc index 69c11c0..932ad7a 100644 --- a/cc/output/overlay_unittest.cc +++ b/cc/output/overlay_unittest.cc @@ -491,6 +491,7 @@ class FakeRendererClient : public RendererClient { public: // RendererClient methods. virtual void SetFullRootLayerDamage() OVERRIDE {} + virtual void RunOnDemandRasterTask(Task* on_demand_raster_task) OVERRIDE {} }; class MockOverlayScheduler { diff --git a/cc/output/renderer.h b/cc/output/renderer.h index af77cbb..d95a747 100644 --- a/cc/output/renderer.h +++ b/cc/output/renderer.h @@ -15,6 +15,7 @@ namespace cc { class CompositorFrameAck; class CompositorFrameMetadata; class ScopedResource; +class Task; struct RendererCapabilitiesImpl { RendererCapabilitiesImpl(); @@ -40,6 +41,7 @@ struct RendererCapabilitiesImpl { class CC_EXPORT RendererClient { public: virtual void SetFullRootLayerDamage() = 0; + virtual void RunOnDemandRasterTask(Task* on_demand_raster_task) = 0; }; class CC_EXPORT Renderer { diff --git a/cc/output/software_renderer.cc b/cc/output/software_renderer.cc index d0f97c0..61b3253 100644 --- a/cc/output/software_renderer.cc +++ b/cc/output/software_renderer.cc @@ -395,7 +395,7 @@ void SoftwareRenderer::DrawPictureQuad(const DrawingFrame* frame, current_canvas_, quad->content_rect, quad->contents_scale)); - RunOnDemandRasterTask(on_demand_raster_task.get()); + client_->RunOnDemandRasterTask(on_demand_raster_task.get()); current_canvas_->setDrawFilter(NULL); } diff --git a/cc/output/software_renderer_unittest.cc b/cc/output/software_renderer_unittest.cc index 52ff828..536b2ef1 100644 --- a/cc/output/software_renderer_unittest.cc +++ b/cc/output/software_renderer_unittest.cc @@ -52,6 +52,7 @@ class SoftwareRendererTest : public testing::Test, public RendererClient { // RendererClient implementation. virtual void SetFullRootLayerDamage() OVERRIDE {} + virtual void RunOnDemandRasterTask(Task* on_demand_raster_task) OVERRIDE {} scoped_ptr<SkBitmap> DrawAndCopyOutput(RenderPassList* list, float device_scale_factor, |