summaryrefslogtreecommitdiffstats
path: root/content
diff options
context:
space:
mode:
authorjamesr@chromium.org <jamesr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-01-17 06:32:36 +0000
committerjamesr@chromium.org <jamesr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-01-17 06:32:36 +0000
commit78d30120a3aebc0a8a7595bc0cd80b5d21cc1d51 (patch)
treef20a4a0947681a315f887860f5a6e6291ce9821c /content
parent5c73592c918b4ef0c6c700f0ad2f1421890ad7c2 (diff)
downloadchromium_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.cc9
-rw-r--r--content/common/cc_messages.h6
-rw-r--r--content/common/cc_messages_unittest.cc29
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;