diff options
author | jamesr@chromium.org <jamesr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-01-17 06:32:36 +0000 |
---|---|---|
committer | jamesr@chromium.org <jamesr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-01-17 06:32:36 +0000 |
commit | 78d30120a3aebc0a8a7595bc0cd80b5d21cc1d51 (patch) | |
tree | f20a4a0947681a315f887860f5a6e6291ce9821c /content | |
parent | 5c73592c918b4ef0c6c700f0ad2f1421890ad7c2 (diff) | |
download | chromium_src-78d30120a3aebc0a8a7595bc0cd80b5d21cc1d51.zip chromium_src-78d30120a3aebc0a8a7595bc0cd80b5d21cc1d51.tar.gz chromium_src-78d30120a3aebc0a8a7595bc0cd80b5d21cc1d51.tar.bz2 |
Add cc:DrawQuad type for surfaces
This quad type just carries a surface ID to be resolved later. A quad of this type will always be replaced by the quads it represents (if any) before being passed to a cc:DirectRenderer for drawing.
BUG=334090
Review URL: https://codereview.chromium.org/127373002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@245438 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
-rw-r--r-- | content/common/cc_messages.cc | 9 | ||||
-rw-r--r-- | content/common/cc_messages.h | 6 | ||||
-rw-r--r-- | content/common/cc_messages_unittest.cc | 29 |
3 files changed, 42 insertions, 2 deletions
diff --git a/content/common/cc_messages.cc b/content/common/cc_messages.cc index b571886..fef8ebc 100644 --- a/content/common/cc_messages.cc +++ b/content/common/cc_messages.cc @@ -327,6 +327,9 @@ void ParamTraits<cc::RenderPass>::Write( case cc::DrawQuad::SOLID_COLOR: WriteParam(m, *cc::SolidColorDrawQuad::MaterialCast(quad)); break; + case cc::DrawQuad::SURFACE_CONTENT: + WriteParam(m, *cc::SurfaceDrawQuad::MaterialCast(quad)); + break; case cc::DrawQuad::TILED_CONTENT: WriteParam(m, *cc::TileDrawQuad::MaterialCast(quad)); break; @@ -441,6 +444,9 @@ bool ParamTraits<cc::RenderPass>::Read( case cc::DrawQuad::PICTURE_CONTENT: NOTREACHED(); return false; + case cc::DrawQuad::SURFACE_CONTENT: + draw_quad = ReadDrawQuad<cc::SurfaceDrawQuad>(m, iter); + break; case cc::DrawQuad::TEXTURE_CONTENT: draw_quad = ReadDrawQuad<cc::TextureDrawQuad>(m, iter); break; @@ -551,6 +557,9 @@ void ParamTraits<cc::RenderPass>::Log( case cc::DrawQuad::SOLID_COLOR: LogParam(*cc::SolidColorDrawQuad::MaterialCast(quad), l); break; + case cc::DrawQuad::SURFACE_CONTENT: + LogParam(*cc::SurfaceDrawQuad::MaterialCast(quad), l); + break; case cc::DrawQuad::TILED_CONTENT: LogParam(*cc::TileDrawQuad::MaterialCast(quad), l); break; diff --git a/content/common/cc_messages.h b/content/common/cc_messages.h index c9e72ba..d1a9129 100644 --- a/content/common/cc_messages.h +++ b/content/common/cc_messages.h @@ -18,6 +18,7 @@ #include "cc/quads/shared_quad_state.h" #include "cc/quads/solid_color_draw_quad.h" #include "cc/quads/stream_video_draw_quad.h" +#include "cc/quads/surface_draw_quad.h" #include "cc/quads/texture_draw_quad.h" #include "cc/quads/tile_draw_quad.h" #include "cc/quads/yuv_video_draw_quad.h" @@ -175,6 +176,11 @@ IPC_STRUCT_TRAITS_BEGIN(cc::StreamVideoDrawQuad) IPC_STRUCT_TRAITS_MEMBER(matrix) IPC_STRUCT_TRAITS_END() +IPC_STRUCT_TRAITS_BEGIN(cc::SurfaceDrawQuad) + IPC_STRUCT_TRAITS_PARENT(cc::DrawQuad) + IPC_STRUCT_TRAITS_MEMBER(surface_id) +IPC_STRUCT_TRAITS_END() + IPC_STRUCT_TRAITS_BEGIN(cc::TextureDrawQuad) IPC_STRUCT_TRAITS_PARENT(cc::DrawQuad) IPC_STRUCT_TRAITS_MEMBER(resource_id) diff --git a/content/common/cc_messages_unittest.cc b/content/common/cc_messages_unittest.cc index ccd41fc..eaa5a58 100644 --- a/content/common/cc_messages_unittest.cc +++ b/content/common/cc_messages_unittest.cc @@ -27,6 +27,7 @@ using cc::RenderPassDrawQuad; using cc::ResourceProvider; using cc::SharedQuadState; using cc::SolidColorDrawQuad; +using cc::SurfaceDrawQuad; using cc::TextureDrawQuad; using cc::TileDrawQuad; using cc::TransferableResource; @@ -105,6 +106,10 @@ class CCMessagesTest : public testing::Test { Compare(StreamVideoDrawQuad::MaterialCast(a), StreamVideoDrawQuad::MaterialCast(b)); break; + case DrawQuad::SURFACE_CONTENT: + Compare(SurfaceDrawQuad::MaterialCast(a), + SurfaceDrawQuad::MaterialCast(b)); + break; case DrawQuad::YUV_VIDEO_CONTENT: Compare(YUVVideoDrawQuad::MaterialCast(a), YUVVideoDrawQuad::MaterialCast(b)); @@ -159,6 +164,10 @@ class CCMessagesTest : public testing::Test { EXPECT_EQ(a->matrix, b->matrix); } + void Compare(const SurfaceDrawQuad* a, const SurfaceDrawQuad* b) { + EXPECT_EQ(a->surface_id, b->surface_id); + } + void Compare(const TextureDrawQuad* a, const TextureDrawQuad* b) { EXPECT_EQ(a->resource_id, b->resource_id); EXPECT_EQ(a->premultiplied_alpha, b->premultiplied_alpha); @@ -362,6 +371,17 @@ TEST_F(CCMessagesTest, AllQuads) { scoped_ptr<DrawQuad> streamvideo_cmp = streamvideo_in->Copy( streamvideo_in->shared_quad_state); + int arbitrary_surface_id = 3; + scoped_ptr<SurfaceDrawQuad> surface_in = SurfaceDrawQuad::Create(); + surface_in->SetAll(shared_state3_in.get(), + arbitrary_rect2, + arbitrary_rect2_inside_rect2, + arbitrary_rect1_inside_rect2, + arbitrary_bool1, + arbitrary_surface_id); + scoped_ptr<DrawQuad> surface_cmp = surface_in->Copy( + surface_in->shared_quad_state); + scoped_ptr<TextureDrawQuad> texture_in = TextureDrawQuad::Create(); texture_in->SetAll(shared_state3_in.get(), arbitrary_rect2, @@ -422,6 +442,7 @@ TEST_F(CCMessagesTest, AllQuads) { pass_in->shared_quad_state_list.push_back(shared_state3_in.Pass()); pass_in->quad_list.push_back(solidcolor_in.PassAs<DrawQuad>()); pass_in->quad_list.push_back(streamvideo_in.PassAs<DrawQuad>()); + pass_in->quad_list.push_back(surface_in.PassAs<DrawQuad>()); pass_in->quad_list.push_back(texture_in.PassAs<DrawQuad>()); pass_in->quad_list.push_back(tile_in.PassAs<DrawQuad>()); pass_in->quad_list.push_back(yuvvideo_in.PassAs<DrawQuad>()); @@ -442,6 +463,7 @@ TEST_F(CCMessagesTest, AllQuads) { pass_cmp->shared_quad_state_list.push_back(shared_state3_cmp.Pass()); pass_cmp->quad_list.push_back(solidcolor_cmp.PassAs<DrawQuad>()); pass_cmp->quad_list.push_back(streamvideo_cmp.PassAs<DrawQuad>()); + pass_cmp->quad_list.push_back(surface_cmp.PassAs<DrawQuad>()); pass_cmp->quad_list.push_back(texture_cmp.PassAs<DrawQuad>()); pass_cmp->quad_list.push_back(tile_cmp.PassAs<DrawQuad>()); pass_cmp->quad_list.push_back(yuvvideo_cmp.PassAs<DrawQuad>()); @@ -449,7 +471,7 @@ TEST_F(CCMessagesTest, AllQuads) { // Make sure the in and cmp RenderPasses match. Compare(pass_cmp.get(), pass_in.get()); ASSERT_EQ(3u, pass_in->shared_quad_state_list.size()); - ASSERT_EQ(9u, pass_in->quad_list.size()); + ASSERT_EQ(10u, pass_in->quad_list.size()); for (size_t i = 0; i < 3; ++i) { Compare(pass_cmp->shared_quad_state_list[i], pass_in->shared_quad_state_list[i]); @@ -481,7 +503,7 @@ TEST_F(CCMessagesTest, AllQuads) { frame_out.render_pass_list.begin()); Compare(pass_cmp.get(), pass_out.get()); ASSERT_EQ(3u, pass_out->shared_quad_state_list.size()); - ASSERT_EQ(9u, pass_out->quad_list.size()); + ASSERT_EQ(10u, pass_out->quad_list.size()); for (size_t i = 0; i < 3; ++i) { Compare(pass_cmp->shared_quad_state_list[i], pass_out->shared_quad_state_list[i]); @@ -697,6 +719,9 @@ TEST_F(CCMessagesTest, LargestQuadType) { case cc::DrawQuad::SOLID_COLOR: largest = std::max(largest, sizeof(cc::SolidColorDrawQuad)); break; + case cc::DrawQuad::SURFACE_CONTENT: + largest = std::max(largest, sizeof(cc::SurfaceDrawQuad)); + break; case cc::DrawQuad::TILED_CONTENT: largest = std::max(largest, sizeof(cc::TileDrawQuad)); break; |