summaryrefslogtreecommitdiffstats
path: root/cc/test
diff options
context:
space:
mode:
authordanakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-01-16 03:41:00 +0000
committerdanakj@chromium.org <danakj@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-01-16 03:41:00 +0000
commit05469638c90c61f273420773ab3139d4286a7fb0 (patch)
tree06c32018843396f67cc7e71ef7ffecde9faec103 /cc/test
parent658ce05d1f2ec2717f3c00c9b21934373010ca35 (diff)
downloadchromium_src-05469638c90c61f273420773ab3139d4286a7fb0.zip
chromium_src-05469638c90c61f273420773ab3139d4286a7fb0.tar.gz
chromium_src-05469638c90c61f273420773ab3139d4286a7fb0.tar.bz2
cc: Implement DelegatingRender::drawFrame() method.
The method sends the render passes it is given to the parent compositor via the output surface. It should include a valid frame metadata with it. Tests: DelegatingRendererTestDraw.runSingleThread DelegatingRendererTestDraw.runMultiThread DelegatingRendererTestResources.runSingleThread DelegatingRendererTestResources.runMultiThread R=piman BUG=123444 Review URL: https://codereview.chromium.org/11777025 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@177073 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cc/test')
-rw-r--r--cc/test/fake_output_surface.cc12
-rw-r--r--cc/test/fake_output_surface.h8
-rw-r--r--cc/test/layer_tree_test_common.cc4
-rw-r--r--cc/test/layer_tree_test_common.h3
-rw-r--r--cc/test/mock_quad_culler.cc2
-rw-r--r--cc/test/pixel_test_output_surface.h2
-rw-r--r--cc/test/render_pass_test_common.cc127
-rw-r--r--cc/test/render_pass_test_common.h11
-rw-r--r--cc/test/render_pass_test_utils.cc2
-rw-r--r--cc/test/render_pass_test_utils.h2
10 files changed, 120 insertions, 53 deletions
diff --git a/cc/test/fake_output_surface.cc b/cc/test/fake_output_surface.cc
index a312041..ebbe783 100644
--- a/cc/test/fake_output_surface.cc
+++ b/cc/test/fake_output_surface.cc
@@ -7,13 +7,15 @@
namespace cc {
FakeOutputSurface::FakeOutputSurface(
- scoped_ptr<WebKit::WebGraphicsContext3D> context3d, bool has_parent) {
+ scoped_ptr<WebKit::WebGraphicsContext3D> context3d, bool has_parent)
+ : num_sent_frames_(0) {
context3d_ = context3d.Pass();
capabilities_.has_parent_compositor = has_parent;
}
FakeOutputSurface::FakeOutputSurface(
- scoped_ptr<SoftwareOutputDevice> software_device, bool has_parent) {
+ scoped_ptr<SoftwareOutputDevice> software_device, bool has_parent)
+ : num_sent_frames_(0) {
software_device_ = software_device.Pass();
capabilities_.has_parent_compositor = has_parent;
}
@@ -43,6 +45,10 @@ SoftwareOutputDevice* FakeOutputSurface::SoftwareDevice() const {
return software_device_.get();
}
-void FakeOutputSurface::SendFrameToParentCompositor(const CompositorFrame&) {}
+void FakeOutputSurface::SendFrameToParentCompositor(
+ CompositorFrame* frame) {
+ frame->AssignTo(&last_sent_frame_);
+ ++num_sent_frames_;
+}
} // namespace cc
diff --git a/cc/test/fake_output_surface.h b/cc/test/fake_output_surface.h
index d843cca..0cfb41f 100644
--- a/cc/test/fake_output_surface.h
+++ b/cc/test/fake_output_surface.h
@@ -7,6 +7,7 @@
#include "base/logging.h"
#include "base/memory/scoped_ptr.h"
+#include "cc/compositor_frame.h"
#include "cc/output_surface.h"
#include "cc/test/fake_software_output_device.h"
#include "cc/test/fake_web_graphics_context_3d.h"
@@ -47,7 +48,10 @@ class FakeOutputSurface : public OutputSurface {
virtual WebKit::WebGraphicsContext3D* Context3D() const OVERRIDE;
virtual SoftwareOutputDevice* SoftwareDevice() const OVERRIDE;
- virtual void SendFrameToParentCompositor(const CompositorFrame&) OVERRIDE;
+ virtual void SendFrameToParentCompositor(CompositorFrame*) OVERRIDE;
+
+ CompositorFrame& last_sent_frame() { return last_sent_frame_; }
+ size_t num_sent_frames() { return num_sent_frames_; }
private:
explicit FakeOutputSurface(
@@ -59,6 +63,8 @@ private:
scoped_ptr<SoftwareOutputDevice> software_device_;
struct Capabilities capabilities_;
OutputSurfaceClient* client_;
+ CompositorFrame last_sent_frame_;
+ size_t num_sent_frames_;
};
static inline scoped_ptr<cc::OutputSurface> createFakeOutputSurface()
diff --git a/cc/test/layer_tree_test_common.cc b/cc/test/layer_tree_test_common.cc
index cfe6861..f710f4b 100644
--- a/cc/test/layer_tree_test_common.cc
+++ b/cc/test/layer_tree_test_common.cc
@@ -29,7 +29,7 @@ using namespace WebKit;
namespace cc {
-bool TestHooks::prepareToDrawOnThread(cc::LayerTreeHostImpl*)
+bool TestHooks::prepareToDrawOnThread(cc::LayerTreeHostImpl*, LayerTreeHostImpl::FrameData&, bool)
{
return true;
}
@@ -64,7 +64,7 @@ void MockLayerTreeHostImpl::commitComplete()
bool MockLayerTreeHostImpl::prepareToDraw(FrameData& frame)
{
bool result = LayerTreeHostImpl::prepareToDraw(frame);
- if (!m_testHooks->prepareToDrawOnThread(this))
+ if (!m_testHooks->prepareToDrawOnThread(this, frame, result))
result = false;
return result;
}
diff --git a/cc/test/layer_tree_test_common.h b/cc/test/layer_tree_test_common.h
index 3b0cfd6..682edec 100644
--- a/cc/test/layer_tree_test_common.h
+++ b/cc/test/layer_tree_test_common.h
@@ -24,7 +24,8 @@ class TestHooks : public WebKit::WebAnimationDelegate {
public:
virtual void beginCommitOnThread(LayerTreeHostImpl*) { }
virtual void commitCompleteOnThread(LayerTreeHostImpl*) { }
- virtual bool prepareToDrawOnThread(LayerTreeHostImpl*);
+ virtual bool prepareToDrawOnThread(
+ LayerTreeHostImpl*, LayerTreeHostImpl::FrameData&, bool result);
virtual void drawLayersOnThread(LayerTreeHostImpl*) { }
virtual void animateLayers(LayerTreeHostImpl*, base::TimeTicks monotonicTime, bool hasUnfinishedAnimation) { }
virtual void willAnimateLayers(LayerTreeHostImpl*, base::TimeTicks monotonicTime) { }
diff --git a/cc/test/mock_quad_culler.cc b/cc/test/mock_quad_culler.cc
index b4f8cdf..c2e5dbdc 100644
--- a/cc/test/mock_quad_culler.cc
+++ b/cc/test/mock_quad_culler.cc
@@ -4,6 +4,8 @@
#include "cc/test/mock_quad_culler.h"
+#include "cc/draw_quad.h"
+
namespace cc {
MockQuadCuller::MockQuadCuller()
diff --git a/cc/test/pixel_test_output_surface.h b/cc/test/pixel_test_output_surface.h
index b3f26c41..91d789f 100644
--- a/cc/test/pixel_test_output_surface.h
+++ b/cc/test/pixel_test_output_surface.h
@@ -24,7 +24,7 @@ class PixelTestOutputSurface : public OutputSurface {
OVERRIDE;
virtual WebKit::WebGraphicsContext3D* Context3D() const OVERRIDE;
virtual SoftwareOutputDevice* SoftwareDevice() const OVERRIDE;
- virtual void SendFrameToParentCompositor(const CompositorFrame&) OVERRIDE {}
+ virtual void SendFrameToParentCompositor(CompositorFrame*) OVERRIDE {}
private:
PixelTestOutputSurface();
diff --git a/cc/test/render_pass_test_common.cc b/cc/test/render_pass_test_common.cc
index 065f593..fafb84b 100644
--- a/cc/test/render_pass_test_common.cc
+++ b/cc/test/render_pass_test_common.cc
@@ -19,8 +19,17 @@
namespace cc {
+void TestRenderPass::AppendQuad(scoped_ptr<cc::DrawQuad> quad) {
+ quad_list.push_back(quad.Pass());
+}
+
+void TestRenderPass::AppendSharedQuadState(
+ scoped_ptr<cc::SharedQuadState> state) {
+ shared_quad_state_list.push_back(state.Pass());
+}
+
void TestRenderPass::AppendOneOfEveryQuadType(
- cc::ResourceProvider* resourceProvider) {
+ cc::ResourceProvider* resourceProvider, RenderPass::Id child_pass) {
gfx::Rect rect(0, 0, 100, 100);
gfx::Rect opaque_rect(10, 10, 80, 80);
const float vertex_opacity[] = {1.0f, 1.0f, 1.0f, 1.0f};
@@ -32,6 +41,36 @@ void TestRenderPass::AppendOneOfEveryQuadType(
resourceProvider->allocateForTesting(texture_resource);
unsigned texture_id = ResourceProvider::ScopedReadLockGL(
resourceProvider, texture_resource).textureId();
+ cc::ResourceProvider::ResourceId resource1 =
+ resourceProvider->createResource(
+ gfx::Size(45, 5),
+ resourceProvider->bestTextureFormat(),
+ ResourceProvider::TextureUsageAny);
+ resourceProvider->allocateForTesting(resource1);
+ cc::ResourceProvider::ResourceId resource2 =
+ resourceProvider->createResource(
+ gfx::Size(346, 61),
+ resourceProvider->bestTextureFormat(),
+ ResourceProvider::TextureUsageAny);
+ resourceProvider->allocateForTesting(resource2);
+ cc::ResourceProvider::ResourceId resource3 =
+ resourceProvider->createResource(
+ gfx::Size(12, 134),
+ resourceProvider->bestTextureFormat(),
+ ResourceProvider::TextureUsageAny);
+ resourceProvider->allocateForTesting(resource3);
+ cc::ResourceProvider::ResourceId resource4 =
+ resourceProvider->createResource(
+ gfx::Size(56, 12),
+ resourceProvider->bestTextureFormat(),
+ ResourceProvider::TextureUsageAny);
+ resourceProvider->allocateForTesting(resource4);
+ cc::ResourceProvider::ResourceId resource5 =
+ resourceProvider->createResource(
+ gfx::Size(73, 26),
+ resourceProvider->bestTextureFormat(),
+ ResourceProvider::TextureUsageAny);
+ resourceProvider->allocateForTesting(resource5);
scoped_ptr<cc::SharedQuadState> shared_state = cc::SharedQuadState::Create();
shared_state->SetAll(gfx::Transform(),
@@ -66,19 +105,35 @@ void TestRenderPass::AppendOneOfEveryQuadType(
cc::IOSurfaceDrawQuad::FLIPPED);
AppendQuad(io_surface_quad.PassAs<DrawQuad>());
- scoped_ptr<cc::RenderPassDrawQuad> render_pass_quad =
- cc::RenderPassDrawQuad::Create();
- render_pass_quad->SetNew(shared_state.get(),
- rect,
- cc::RenderPass::Id(1, 1),
- false,
- 0,
- rect,
- gfx::RectF(),
- WebKit::WebFilterOperations(),
- skia::RefPtr<SkImageFilter>(),
- WebKit::WebFilterOperations());
- AppendQuad(render_pass_quad.PassAs<DrawQuad>());
+ if (child_pass.layer_id) {
+ scoped_ptr<cc::RenderPassDrawQuad> render_pass_quad =
+ cc::RenderPassDrawQuad::Create();
+ render_pass_quad->SetNew(shared_state.get(),
+ rect,
+ child_pass,
+ false,
+ resource5,
+ rect,
+ gfx::RectF(),
+ WebKit::WebFilterOperations(),
+ skia::RefPtr<SkImageFilter>(),
+ WebKit::WebFilterOperations());
+ AppendQuad(render_pass_quad.PassAs<DrawQuad>());
+
+ scoped_ptr<cc::RenderPassDrawQuad> render_pass_replica_quad =
+ cc::RenderPassDrawQuad::Create();
+ render_pass_replica_quad->SetNew(shared_state.get(),
+ rect,
+ child_pass,
+ true,
+ resource5,
+ rect,
+ gfx::RectF(),
+ WebKit::WebFilterOperations(),
+ skia::RefPtr<SkImageFilter>(),
+ WebKit::WebFilterOperations());
+ AppendQuad(render_pass_replica_quad.PassAs<DrawQuad>());
+ }
scoped_ptr<cc::SolidColorDrawQuad> solid_color_quad =
cc::SolidColorDrawQuad::Create();
@@ -101,7 +156,7 @@ void TestRenderPass::AppendOneOfEveryQuadType(
texture_quad->SetNew(shared_state.get(),
rect,
opaque_rect,
- texture_resource,
+ resource1,
false,
rect,
vertex_opacity,
@@ -111,16 +166,16 @@ void TestRenderPass::AppendOneOfEveryQuadType(
scoped_ptr<cc::TileDrawQuad> scaled_tile_quad =
cc::TileDrawQuad::Create();
scaled_tile_quad->SetNew(shared_state.get(),
- rect,
- opaque_rect,
- texture_resource,
- gfx::RectF(0, 0, 50, 50),
- gfx::Size(50, 50),
- false,
- false,
- false,
- false,
- false);
+ rect,
+ opaque_rect,
+ resource2,
+ gfx::RectF(0, 0, 50, 50),
+ gfx::Size(50, 50),
+ false,
+ false,
+ false,
+ false,
+ false);
AppendQuad(scaled_tile_quad.PassAs<DrawQuad>());
scoped_ptr<cc::SharedQuadState> transformed_state = shared_state->Copy();
@@ -130,16 +185,16 @@ void TestRenderPass::AppendOneOfEveryQuadType(
scoped_ptr<cc::TileDrawQuad> transformed_tile_quad =
cc::TileDrawQuad::Create();
transformed_tile_quad->SetNew(transformed_state.get(),
- rect,
- opaque_rect,
- texture_resource,
- gfx::RectF(0, 0, 100, 100),
- gfx::Size(100, 100),
- false,
- false,
- false,
- false,
- false);
+ rect,
+ opaque_rect,
+ resource3,
+ gfx::RectF(0, 0, 100, 100),
+ gfx::Size(100, 100),
+ false,
+ false,
+ false,
+ false,
+ false);
AppendQuad(transformed_tile_quad.PassAs<DrawQuad>());
scoped_ptr<cc::TileDrawQuad> tile_quad =
@@ -147,7 +202,7 @@ void TestRenderPass::AppendOneOfEveryQuadType(
tile_quad->SetNew(shared_state.get(),
rect,
opaque_rect,
- texture_resource,
+ resource4,
gfx::RectF(0, 0, 100, 100),
gfx::Size(100, 100),
false,
diff --git a/cc/test/render_pass_test_common.h b/cc/test/render_pass_test_common.h
index 199a618..6bc765d 100644
--- a/cc/test/render_pass_test_common.h
+++ b/cc/test/render_pass_test_common.h
@@ -19,14 +19,11 @@ class TestRenderPass : public cc::RenderPass {
return make_scoped_ptr(new TestRenderPass);
}
- void AppendQuad(scoped_ptr<cc::DrawQuad> quad) {
- quad_list.push_back(quad.Pass());
- }
- void AppendSharedQuadState(scoped_ptr<cc::SharedQuadState> state) {
- shared_quad_state_list.push_back(state.Pass());
- }
+ void AppendQuad(scoped_ptr<cc::DrawQuad> quad);
+ void AppendSharedQuadState(scoped_ptr<cc::SharedQuadState> state);
- void AppendOneOfEveryQuadType(cc::ResourceProvider*);
+ void AppendOneOfEveryQuadType(
+ cc::ResourceProvider*, RenderPass::Id child_pass);
protected:
TestRenderPass() : RenderPass() {}
diff --git a/cc/test/render_pass_test_utils.cc b/cc/test/render_pass_test_utils.cc
index a793505..4e5d6ad 100644
--- a/cc/test/render_pass_test_utils.cc
+++ b/cc/test/render_pass_test_utils.cc
@@ -15,7 +15,7 @@
namespace cc {
-TestRenderPass* addRenderPass(ScopedPtrVector<RenderPass>& passList,
+TestRenderPass* addRenderPass(RenderPassList& passList,
RenderPass::Id id,
const gfx::Rect& outputRect,
const gfx::Transform& rootTransform) {
diff --git a/cc/test/render_pass_test_utils.h b/cc/test/render_pass_test_utils.h
index 140e029..b4d8dba 100644
--- a/cc/test/render_pass_test_utils.h
+++ b/cc/test/render_pass_test_utils.h
@@ -22,7 +22,7 @@ class TestRenderPass;
// Adds a new render pass with the provided properties to the given
// render pass list.
TestRenderPass* addRenderPass(
- ScopedPtrVector<RenderPass>& passList,
+ RenderPassList& passList,
RenderPass::Id id,
const gfx::Rect& outputRect,
const gfx::Transform& rootTransform);