summaryrefslogtreecommitdiffstats
path: root/cc/output
diff options
context:
space:
mode:
authorboliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-21 01:11:57 +0000
committerboliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-06-21 01:11:57 +0000
commite7391c3bb6f2345e4ed1d6d9c9d1cf03f83ff48b (patch)
tree90d10d958d424e6d024500903eb1c84a3df4489a /cc/output
parentf89ee437e25a2afde6f7dc2ca3d49fd462d23ea3 (diff)
downloadchromium_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.cc27
-rw-r--r--cc/output/direct_renderer.h4
-rw-r--r--cc/output/gl_renderer.cc2
-rw-r--r--cc/output/overlay_unittest.cc1
-rw-r--r--cc/output/renderer.h2
-rw-r--r--cc/output/software_renderer.cc2
-rw-r--r--cc/output/software_renderer_unittest.cc1
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,