diff options
Diffstat (limited to 'chromium/content/common/cc_messages_unittest.cc')
-rw-r--r-- | chromium/content/common/cc_messages_unittest.cc | 274 |
1 files changed, 190 insertions, 84 deletions
diff --git a/chromium/content/common/cc_messages_unittest.cc b/chromium/content/common/cc_messages_unittest.cc index ccd41fc9070..d0ceb691820 100644 --- a/chromium/content/common/cc_messages_unittest.cc +++ b/chromium/content/common/cc_messages_unittest.cc @@ -9,11 +9,16 @@ #include <algorithm> #include "cc/output/compositor_frame.h" +#include "content/public/common/common_param_traits.h" #include "ipc/ipc_message.h" #include "testing/gtest/include/gtest/gtest.h" #include "third_party/khronos/GLES2/gl2ext.h" #include "third_party/skia/include/effects/SkBlurImageFilter.h" +#if defined(OS_POSIX) +#include "base/file_descriptor_posix.h" +#endif + using cc::CheckerboardDrawQuad; using cc::DelegatedFrameData; using cc::DebugBorderDrawQuad; @@ -26,7 +31,9 @@ using cc::RenderPass; using cc::RenderPassDrawQuad; using cc::ResourceProvider; using cc::SharedQuadState; +using cc::SoftwareFrameData; using cc::SolidColorDrawQuad; +using cc::SurfaceDrawQuad; using cc::TextureDrawQuad; using cc::TileDrawQuad; using cc::TransferableResource; @@ -56,6 +63,7 @@ class CCMessagesTest : public testing::Test { EXPECT_EQ(a->is_clipped, b->is_clipped); EXPECT_EQ(a->opacity, b->opacity); EXPECT_EQ(a->blend_mode, b->blend_mode); + EXPECT_EQ(a->sorting_context_id, b->sorting_context_id); } void Compare(const DrawQuad* a, const DrawQuad* b) { @@ -105,6 +113,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 +171,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); @@ -180,22 +196,25 @@ class CCMessagesTest : public testing::Test { } void Compare(const YUVVideoDrawQuad* a, const YUVVideoDrawQuad* b) { - EXPECT_EQ(a->tex_scale, b->tex_scale); + EXPECT_EQ(a->tex_coord_rect, b->tex_coord_rect); EXPECT_EQ(a->y_plane_resource_id, b->y_plane_resource_id); EXPECT_EQ(a->u_plane_resource_id, b->u_plane_resource_id); EXPECT_EQ(a->v_plane_resource_id, b->v_plane_resource_id); EXPECT_EQ(a->a_plane_resource_id, b->a_plane_resource_id); + EXPECT_EQ(a->color_space, b->color_space); } void Compare(const TransferableResource& a, const TransferableResource& b) { EXPECT_EQ(a.id, b.id); - EXPECT_EQ(a.sync_point, b.sync_point); EXPECT_EQ(a.format, b.format); - EXPECT_EQ(a.target, b.target); EXPECT_EQ(a.filter, b.filter); EXPECT_EQ(a.size.ToString(), b.size.ToString()); - for (size_t i = 0; i < arraysize(a.mailbox.name); ++i) - EXPECT_EQ(a.mailbox.name[i], b.mailbox.name[i]); + for (size_t i = 0; i < arraysize(a.mailbox_holder.mailbox.name); ++i) { + EXPECT_EQ(a.mailbox_holder.mailbox.name[i], + b.mailbox_holder.mailbox.name[i]); + } + EXPECT_EQ(a.mailbox_holder.texture_target, b.mailbox_holder.texture_target); + EXPECT_EQ(a.mailbox_holder.sync_point, b.mailbox_holder.sync_point); } }; @@ -229,6 +248,9 @@ TEST_F(CCMessagesTest, AllQuads) { bool arbitrary_bool1 = true; bool arbitrary_bool2 = false; bool arbitrary_bool3 = true; + int arbitrary_context_id1 = 12; + int arbitrary_context_id2 = 57; + int arbitrary_context_id3 = -503; int arbitrary_int = 5; SkColor arbitrary_color = SkColorSetARGB(25, 36, 47, 58); SkXfermode::Mode arbitrary_blend_mode1 = SkXfermode::kScreen_Mode; @@ -242,12 +264,14 @@ TEST_F(CCMessagesTest, AllQuads) { ResourceProvider::ResourceId arbitrary_resourceid3 = 23; ResourceProvider::ResourceId arbitrary_resourceid4 = 16; SkScalar arbitrary_sigma = SkFloatToScalar(2.0f); + YUVVideoDrawQuad::ColorSpace arbitrary_color_space = + YUVVideoDrawQuad::REC_601; FilterOperations arbitrary_filters1; arbitrary_filters1.Append(FilterOperation::CreateGrayscaleFilter( arbitrary_float1)); skia::RefPtr<SkImageFilter> arbitrary_filter = skia::AdoptRef( - new SkBlurImageFilter(arbitrary_sigma, arbitrary_sigma)); + SkBlurImageFilter::Create(arbitrary_sigma, arbitrary_sigma)); arbitrary_filters1.Append( cc::FilterOperation::CreateReferenceFilter(arbitrary_filter)); @@ -255,19 +279,37 @@ TEST_F(CCMessagesTest, AllQuads) { arbitrary_filters2.Append(FilterOperation::CreateBrightnessFilter( arbitrary_float2)); - scoped_ptr<SharedQuadState> shared_state1_in = SharedQuadState::Create(); + scoped_ptr<RenderPass> pass_in = RenderPass::Create(); + pass_in->SetAll(arbitrary_id, + arbitrary_rect1, + arbitrary_rect2, + arbitrary_matrix, + arbitrary_bool1); + + SharedQuadState* shared_state1_in = pass_in->CreateAndAppendSharedQuadState(); shared_state1_in->SetAll(arbitrary_matrix, arbitrary_size1, arbitrary_rect1, arbitrary_rect2, arbitrary_bool1, arbitrary_float1, - arbitrary_blend_mode1); - scoped_ptr<SharedQuadState> shared_state1_cmp = shared_state1_in->Copy(); + arbitrary_blend_mode1, + arbitrary_context_id1); + + scoped_ptr<RenderPass> pass_cmp = RenderPass::Create(); + pass_cmp->SetAll(arbitrary_id, + arbitrary_rect1, + arbitrary_rect2, + arbitrary_matrix, + arbitrary_bool1); + + SharedQuadState* shared_state1_cmp = + pass_cmp->CreateAndAppendSharedQuadState(); + shared_state1_cmp->CopyFrom(shared_state1_in); scoped_ptr<CheckerboardDrawQuad> checkerboard_in = CheckerboardDrawQuad::Create(); - checkerboard_in->SetAll(shared_state1_in.get(), + checkerboard_in->SetAll(shared_state1_in, arbitrary_rect1, arbitrary_rect2_inside_rect1, arbitrary_rect1_inside_rect1, @@ -278,7 +320,7 @@ TEST_F(CCMessagesTest, AllQuads) { scoped_ptr<DebugBorderDrawQuad> debugborder_in = DebugBorderDrawQuad::Create(); - debugborder_in->SetAll(shared_state1_in.get(), + debugborder_in->SetAll(shared_state1_in, arbitrary_rect3, arbitrary_rect1_inside_rect3, arbitrary_rect2_inside_rect3, @@ -290,7 +332,7 @@ TEST_F(CCMessagesTest, AllQuads) { scoped_ptr<IOSurfaceDrawQuad> iosurface_in = IOSurfaceDrawQuad::Create(); - iosurface_in->SetAll(shared_state1_in.get(), + iosurface_in->SetAll(shared_state1_in, arbitrary_rect2, arbitrary_rect2_inside_rect2, arbitrary_rect1_inside_rect2, @@ -301,19 +343,22 @@ TEST_F(CCMessagesTest, AllQuads) { scoped_ptr<DrawQuad> iosurface_cmp = iosurface_in->Copy( iosurface_in->shared_quad_state); - scoped_ptr<SharedQuadState> shared_state2_in = SharedQuadState::Create(); + SharedQuadState* shared_state2_in = pass_in->CreateAndAppendSharedQuadState(); shared_state2_in->SetAll(arbitrary_matrix, arbitrary_size2, arbitrary_rect2, arbitrary_rect3, arbitrary_bool1, arbitrary_float2, - arbitrary_blend_mode2); - scoped_ptr<SharedQuadState> shared_state2_cmp = shared_state2_in->Copy(); + arbitrary_blend_mode2, + arbitrary_context_id2); + SharedQuadState* shared_state2_cmp = + pass_cmp->CreateAndAppendSharedQuadState(); + shared_state2_cmp->CopyFrom(shared_state2_in); scoped_ptr<RenderPassDrawQuad> renderpass_in = RenderPassDrawQuad::Create(); - renderpass_in->SetAll(shared_state2_in.get(), + renderpass_in->SetAll(shared_state2_in, arbitrary_rect1, arbitrary_rect2_inside_rect1, arbitrary_rect1_inside_rect1, @@ -328,19 +373,22 @@ TEST_F(CCMessagesTest, AllQuads) { scoped_ptr<RenderPassDrawQuad> renderpass_cmp = renderpass_in->Copy( renderpass_in->shared_quad_state, renderpass_in->render_pass_id); - scoped_ptr<SharedQuadState> shared_state3_in = SharedQuadState::Create(); + SharedQuadState* shared_state3_in = pass_in->CreateAndAppendSharedQuadState(); shared_state3_in->SetAll(arbitrary_matrix, arbitrary_size3, arbitrary_rect3, arbitrary_rect1, arbitrary_bool1, arbitrary_float3, - arbitrary_blend_mode3); - scoped_ptr<SharedQuadState> shared_state3_cmp = shared_state3_in->Copy(); + arbitrary_blend_mode3, + arbitrary_context_id3); + SharedQuadState* shared_state3_cmp = + pass_cmp->CreateAndAppendSharedQuadState(); + shared_state3_cmp->CopyFrom(shared_state3_in); scoped_ptr<SolidColorDrawQuad> solidcolor_in = SolidColorDrawQuad::Create(); - solidcolor_in->SetAll(shared_state3_in.get(), + solidcolor_in->SetAll(shared_state3_in, arbitrary_rect3, arbitrary_rect1_inside_rect3, arbitrary_rect2_inside_rect3, @@ -352,7 +400,7 @@ TEST_F(CCMessagesTest, AllQuads) { scoped_ptr<StreamVideoDrawQuad> streamvideo_in = StreamVideoDrawQuad::Create(); - streamvideo_in->SetAll(shared_state3_in.get(), + streamvideo_in->SetAll(shared_state3_in, arbitrary_rect2, arbitrary_rect2_inside_rect2, arbitrary_rect1_inside_rect2, @@ -362,8 +410,19 @@ TEST_F(CCMessagesTest, AllQuads) { scoped_ptr<DrawQuad> streamvideo_cmp = streamvideo_in->Copy( streamvideo_in->shared_quad_state); + cc::SurfaceId arbitrary_surface_id(3); + scoped_ptr<SurfaceDrawQuad> surface_in = SurfaceDrawQuad::Create(); + surface_in->SetAll(shared_state3_in, + 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(), + texture_in->SetAll(shared_state3_in, arbitrary_rect2, arbitrary_rect2_inside_rect2, arbitrary_rect1_inside_rect2, @@ -379,7 +438,7 @@ TEST_F(CCMessagesTest, AllQuads) { texture_in->shared_quad_state); scoped_ptr<TileDrawQuad> tile_in = TileDrawQuad::Create(); - tile_in->SetAll(shared_state3_in.get(), + tile_in->SetAll(shared_state3_in, arbitrary_rect2, arbitrary_rect2_inside_rect2, arbitrary_rect1_inside_rect2, @@ -393,55 +452,39 @@ TEST_F(CCMessagesTest, AllQuads) { scoped_ptr<YUVVideoDrawQuad> yuvvideo_in = YUVVideoDrawQuad::Create(); - yuvvideo_in->SetAll(shared_state3_in.get(), + yuvvideo_in->SetAll(shared_state3_in, arbitrary_rect1, arbitrary_rect2_inside_rect1, arbitrary_rect1_inside_rect1, arbitrary_bool1, - arbitrary_sizef1, + arbitrary_rectf1, arbitrary_resourceid1, arbitrary_resourceid2, arbitrary_resourceid3, - arbitrary_resourceid4); + arbitrary_resourceid4, + arbitrary_color_space); scoped_ptr<DrawQuad> yuvvideo_cmp = yuvvideo_in->Copy( yuvvideo_in->shared_quad_state); - scoped_ptr<RenderPass> pass_in = RenderPass::Create(); - pass_in->SetAll(arbitrary_id, - arbitrary_rect1, - arbitrary_rectf1, - arbitrary_matrix, - arbitrary_bool1); - - pass_in->shared_quad_state_list.push_back(shared_state1_in.Pass()); pass_in->quad_list.push_back(checkerboard_in.PassAs<DrawQuad>()); pass_in->quad_list.push_back(debugborder_in.PassAs<DrawQuad>()); pass_in->quad_list.push_back(iosurface_in.PassAs<DrawQuad>()); pass_in->quad_list.push_back(renderpass_in.PassAs<DrawQuad>()); - pass_in->shared_quad_state_list.push_back(shared_state2_in.Pass()); - 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>()); - scoped_ptr<RenderPass> pass_cmp = RenderPass::Create(); - pass_cmp->SetAll(arbitrary_id, - arbitrary_rect1, - arbitrary_rectf1, - arbitrary_matrix, - arbitrary_bool1); - pass_cmp->shared_quad_state_list.push_back(shared_state1_cmp.Pass()); pass_cmp->quad_list.push_back(checkerboard_cmp.PassAs<DrawQuad>()); pass_cmp->quad_list.push_back(debugborder_cmp.PassAs<DrawQuad>()); pass_cmp->quad_list.push_back(iosurface_cmp.PassAs<DrawQuad>()); pass_cmp->quad_list.push_back(renderpass_cmp.PassAs<DrawQuad>()); - pass_cmp->shared_quad_state_list.push_back(shared_state2_cmp.Pass()); - 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 +492,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 +524,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]); @@ -505,22 +548,23 @@ TEST_F(CCMessagesTest, UnusedSharedQuadStates) { scoped_ptr<RenderPass> pass_in = RenderPass::Create(); pass_in->SetAll(RenderPass::Id(1, 1), gfx::Rect(100, 100), - gfx::RectF(), + gfx::Rect(), gfx::Transform(), false); // The first SharedQuadState is used. - scoped_ptr<SharedQuadState> shared_state1_in = SharedQuadState::Create(); + SharedQuadState* shared_state1_in = pass_in->CreateAndAppendSharedQuadState(); shared_state1_in->SetAll(gfx::Transform(), gfx::Size(1, 1), gfx::Rect(), gfx::Rect(), false, 1.f, - SkXfermode::kSrcOver_Mode); + SkXfermode::kSrcOver_Mode, + 0); quad = CheckerboardDrawQuad::Create(); - quad->SetAll(shared_state1_in.get(), + quad->SetAll(shared_state1_in, gfx::Rect(10, 10), gfx::Rect(10, 10), gfx::Rect(10, 10), @@ -529,36 +573,39 @@ TEST_F(CCMessagesTest, UnusedSharedQuadStates) { pass_in->quad_list.push_back(quad.PassAs<DrawQuad>()); // The second and third SharedQuadStates are not used. - scoped_ptr<SharedQuadState> shared_state2_in = SharedQuadState::Create(); + SharedQuadState* shared_state2_in = pass_in->CreateAndAppendSharedQuadState(); shared_state2_in->SetAll(gfx::Transform(), gfx::Size(2, 2), gfx::Rect(), gfx::Rect(), false, 1.f, - SkXfermode::kSrcOver_Mode); + SkXfermode::kSrcOver_Mode, + 0); - scoped_ptr<SharedQuadState> shared_state3_in = SharedQuadState::Create(); + SharedQuadState* shared_state3_in = pass_in->CreateAndAppendSharedQuadState(); shared_state3_in->SetAll(gfx::Transform(), gfx::Size(3, 3), gfx::Rect(), gfx::Rect(), false, 1.f, - SkXfermode::kSrcOver_Mode); + SkXfermode::kSrcOver_Mode, + 0); // The fourth SharedQuadState is used. - scoped_ptr<SharedQuadState> shared_state4_in = SharedQuadState::Create(); + SharedQuadState* shared_state4_in = pass_in->CreateAndAppendSharedQuadState(); shared_state4_in->SetAll(gfx::Transform(), gfx::Size(4, 4), gfx::Rect(), gfx::Rect(), false, 1.f, - SkXfermode::kSrcOver_Mode); + SkXfermode::kSrcOver_Mode, + 0); quad = CheckerboardDrawQuad::Create(); - quad->SetAll(shared_state4_in.get(), + quad->SetAll(shared_state4_in, gfx::Rect(10, 10), gfx::Rect(10, 10), gfx::Rect(10, 10), @@ -567,20 +614,15 @@ TEST_F(CCMessagesTest, UnusedSharedQuadStates) { pass_in->quad_list.push_back(quad.PassAs<DrawQuad>()); // The fifth is not used again. - scoped_ptr<SharedQuadState> shared_state5_in = SharedQuadState::Create(); + SharedQuadState* shared_state5_in = pass_in->CreateAndAppendSharedQuadState(); shared_state5_in->SetAll(gfx::Transform(), gfx::Size(5, 5), gfx::Rect(), gfx::Rect(), false, 1.f, - SkXfermode::kSrcOver_Mode); - - pass_in->shared_quad_state_list.push_back(shared_state1_in.Pass()); - pass_in->shared_quad_state_list.push_back(shared_state2_in.Pass()); - pass_in->shared_quad_state_list.push_back(shared_state3_in.Pass()); - pass_in->shared_quad_state_list.push_back(shared_state4_in.Pass()); - pass_in->shared_quad_state_list.push_back(shared_state5_in.Pass()); + SkXfermode::kSrcOver_Mode, + 0); // 5 SharedQuadStates go in. ASSERT_EQ(5u, pass_in->shared_quad_state_list.size()); @@ -617,37 +659,33 @@ TEST_F(CCMessagesTest, Resources) { unsigned int arbitrary_uint1 = 71234838; unsigned int arbitrary_uint2 = 53589793; - GLbyte arbitrary_mailbox1[64] = { - 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, - 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, - 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, - 1, 2, 3, 4 - }; + GLbyte arbitrary_mailbox1[GL_MAILBOX_SIZE_CHROMIUM] = { + 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, + 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4}; - GLbyte arbitrary_mailbox2[64] = { - 0, 9, 8, 7, 6, 5, 4, 3, 2, 1, 9, 7, 5, 3, 1, 2, 4, 6, 8, 0, - 0, 9, 8, 7, 6, 5, 4, 3, 2, 1, 9, 7, 5, 3, 1, 2, 4, 6, 8, 0, - 0, 9, 8, 7, 6, 5, 4, 3, 2, 1, 9, 7, 5, 3, 1, 2, 4, 6, 8, 0, - 0, 9, 8, 7 - }; + GLbyte arbitrary_mailbox2[GL_MAILBOX_SIZE_CHROMIUM] = { + 0, 9, 8, 7, 6, 5, 4, 3, 2, 1, 9, 7, 5, 3, 1, 2, 4, 6, 8, 0, 0, 9, + 8, 7, 6, 5, 4, 3, 2, 1, 9, 7, 5, 3, 1, 2, 4, 6, 8, 0, 0, 9, 8, 7, + 6, 5, 4, 3, 2, 1, 9, 7, 5, 3, 1, 2, 4, 6, 8, 0, 0, 9, 8, 7}; TransferableResource arbitrary_resource1; arbitrary_resource1.id = 2178312; - arbitrary_resource1.sync_point = arbitrary_uint1; arbitrary_resource1.format = cc::RGBA_8888; - arbitrary_resource1.target = GL_TEXTURE_2D; arbitrary_resource1.filter = 53; arbitrary_resource1.size = gfx::Size(37189, 123123); - arbitrary_resource1.mailbox.SetName(arbitrary_mailbox1); + arbitrary_resource1.mailbox_holder.mailbox.SetName(arbitrary_mailbox1); + arbitrary_resource1.mailbox_holder.texture_target = GL_TEXTURE_2D; + arbitrary_resource1.mailbox_holder.sync_point = arbitrary_uint1; TransferableResource arbitrary_resource2; arbitrary_resource2.id = 789132; - arbitrary_resource2.sync_point = arbitrary_uint2; arbitrary_resource2.format = cc::RGBA_4444; - arbitrary_resource2.target = GL_TEXTURE_EXTERNAL_OES; arbitrary_resource2.filter = 47; arbitrary_resource2.size = gfx::Size(89123, 23789); - arbitrary_resource2.mailbox.SetName(arbitrary_mailbox2); + arbitrary_resource2.mailbox_holder.mailbox.SetName(arbitrary_mailbox2); + arbitrary_resource2.mailbox_holder.texture_target = GL_TEXTURE_EXTERNAL_OES; + arbitrary_resource2.mailbox_holder.sync_point = arbitrary_uint2; scoped_ptr<RenderPass> renderpass_in = RenderPass::Create(); renderpass_in->SetNew( @@ -697,6 +735,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; @@ -719,5 +760,70 @@ TEST_F(CCMessagesTest, LargestQuadType) { EXPECT_EQ(sizeof(RenderPassDrawQuad), largest); } +TEST_F(CCMessagesTest, SoftwareFrameData) { + cc::SoftwareFrameData frame_in; + frame_in.id = 3; + frame_in.size = gfx::Size(40, 20); + frame_in.damage_rect = gfx::Rect(5, 18, 31, 44); + frame_in.bitmap_id = cc::SharedBitmap::GenerateId(); + + // Write the frame. + IPC::Message msg(1, 2, IPC::Message::PRIORITY_NORMAL); + IPC::ParamTraits<cc::SoftwareFrameData>::Write(&msg, frame_in); + + // Read the frame. + cc::SoftwareFrameData frame_out; + PickleIterator iter(msg); + EXPECT_TRUE( + IPC::ParamTraits<SoftwareFrameData>::Read(&msg, &iter, &frame_out)); + EXPECT_EQ(frame_in.id, frame_out.id); + EXPECT_EQ(frame_in.size.ToString(), frame_out.size.ToString()); + EXPECT_EQ(frame_in.damage_rect.ToString(), frame_out.damage_rect.ToString()); + EXPECT_EQ(frame_in.bitmap_id, frame_out.bitmap_id); +} + +TEST_F(CCMessagesTest, SoftwareFrameDataMaxInt) { + SoftwareFrameData frame_in; + frame_in.id = 3; + frame_in.size = gfx::Size(40, 20); + frame_in.damage_rect = gfx::Rect(5, 18, 31, 44); + frame_in.bitmap_id = cc::SharedBitmap::GenerateId(); + + // Write the SoftwareFrameData by hand, make sure it works. + { + IPC::Message msg(1, 2, IPC::Message::PRIORITY_NORMAL); + IPC::WriteParam(&msg, frame_in.id); + IPC::WriteParam(&msg, frame_in.size); + IPC::WriteParam(&msg, frame_in.damage_rect); + IPC::WriteParam(&msg, frame_in.bitmap_id); + SoftwareFrameData frame_out; + PickleIterator iter(msg); + EXPECT_TRUE( + IPC::ParamTraits<SoftwareFrameData>::Read(&msg, &iter, &frame_out)); + } + + // The size of the frame may overflow when multiplied together. + int max = std::numeric_limits<int>::max(); + frame_in.size = gfx::Size(max, max); + + // If size_t is larger than int, then int*int*4 can always fit in size_t. + bool expect_read = sizeof(size_t) >= sizeof(int) * 2; + + // Write the SoftwareFrameData with the MaxInt size, if it causes overflow it + // should fail. + { + IPC::Message msg(1, 2, IPC::Message::PRIORITY_NORMAL); + IPC::WriteParam(&msg, frame_in.id); + IPC::WriteParam(&msg, frame_in.size); + IPC::WriteParam(&msg, frame_in.damage_rect); + IPC::WriteParam(&msg, frame_in.bitmap_id); + SoftwareFrameData frame_out; + PickleIterator iter(msg); + EXPECT_EQ( + expect_read, + IPC::ParamTraits<SoftwareFrameData>::Read(&msg, &iter, &frame_out)); + } +} + } // namespace } // namespace content |