blob: 7afaeaaac2d369e3feeba553dc7ae7ec965b57ed [file] [log] [blame]
[email protected]4934d362012-11-22 22:04:531// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "content/common/cc_messages.h"
6
7#include <string.h>
8
[email protected]032bfc42013-10-29 22:23:529#include <algorithm>
10
[email protected]7f0d825f2013-03-18 07:24:3011#include "cc/output/compositor_frame.h"
[email protected]cecc8342014-03-20 21:43:3912#include "content/public/common/common_param_traits.h"
[email protected]4934d362012-11-22 22:04:5313#include "ipc/ipc_message.h"
14#include "testing/gtest/include/gtest/gtest.h"
[email protected]645a47f22013-09-26 05:42:3215#include "third_party/khronos/GLES2/gl2ext.h"
[email protected]a1765672013-08-12 23:45:0216#include "third_party/skia/include/effects/SkBlurImageFilter.h"
[email protected]4934d362012-11-22 22:04:5317
[email protected]cecc8342014-03-20 21:43:3918#if defined(OS_POSIX)
19#include "base/file_descriptor_posix.h"
20#endif
21
[email protected]4934d362012-11-22 22:04:5322using cc::CheckerboardDrawQuad;
[email protected]bf189f62012-12-18 03:42:1123using cc::DelegatedFrameData;
[email protected]4934d362012-11-22 22:04:5324using cc::DebugBorderDrawQuad;
25using cc::DrawQuad;
[email protected]ae6b1a72013-06-25 18:49:2926using cc::FilterOperation;
27using cc::FilterOperations;
[email protected]4934d362012-11-22 22:04:5328using cc::IOSurfaceDrawQuad;
[email protected]9ee4d3a2013-03-27 17:43:1629using cc::PictureDrawQuad;
[email protected]4934d362012-11-22 22:04:5330using cc::RenderPass;
[email protected]0cd7d6f72014-08-22 14:50:5131using cc::RenderPassId;
[email protected]4934d362012-11-22 22:04:5332using cc::RenderPassDrawQuad;
33using cc::ResourceProvider;
34using cc::SharedQuadState;
[email protected]cecc8342014-03-20 21:43:3935using cc::SoftwareFrameData;
[email protected]4934d362012-11-22 22:04:5336using cc::SolidColorDrawQuad;
[email protected]78d30122014-01-17 06:32:3637using cc::SurfaceDrawQuad;
[email protected]4934d362012-11-22 22:04:5338using cc::TextureDrawQuad;
39using cc::TileDrawQuad;
[email protected]bca159072012-12-04 00:52:4440using cc::TransferableResource;
[email protected]4934d362012-11-22 22:04:5341using cc::StreamVideoDrawQuad;
[email protected]4934d362012-11-22 22:04:5342using cc::YUVVideoDrawQuad;
[email protected]c8686a02012-11-27 08:29:0043using gfx::Transform;
[email protected]4934d362012-11-22 22:04:5344
[email protected]bca159072012-12-04 00:52:4445namespace content {
46namespace {
47
[email protected]4934d362012-11-22 22:04:5348class CCMessagesTest : public testing::Test {
49 protected:
50 void Compare(const RenderPass* a, const RenderPass* b) {
51 EXPECT_EQ(a->id, b->id);
52 EXPECT_EQ(a->output_rect.ToString(), b->output_rect.ToString());
53 EXPECT_EQ(a->damage_rect.ToString(), b->damage_rect.ToString());
54 EXPECT_EQ(a->transform_to_root_target, b->transform_to_root_target);
55 EXPECT_EQ(a->has_transparent_background, b->has_transparent_background);
[email protected]4934d362012-11-22 22:04:5356 }
57
58 void Compare(const SharedQuadState* a, const SharedQuadState* b) {
59 EXPECT_EQ(a->content_to_target_transform, b->content_to_target_transform);
[email protected]f902bf92013-03-04 18:33:2760 EXPECT_EQ(a->content_bounds, b->content_bounds);
[email protected]4934d362012-11-22 22:04:5361 EXPECT_EQ(a->visible_content_rect, b->visible_content_rect);
[email protected]4934d362012-11-22 22:04:5362 EXPECT_EQ(a->clip_rect, b->clip_rect);
63 EXPECT_EQ(a->is_clipped, b->is_clipped);
64 EXPECT_EQ(a->opacity, b->opacity);
[email protected]7bbeaf4e2013-11-26 10:27:2265 EXPECT_EQ(a->blend_mode, b->blend_mode);
[email protected]a9d4d4f2014-06-19 06:49:2866 EXPECT_EQ(a->sorting_context_id, b->sorting_context_id);
[email protected]4934d362012-11-22 22:04:5367 }
68
69 void Compare(const DrawQuad* a, const DrawQuad* b) {
70 ASSERT_NE(DrawQuad::INVALID, a->material);
71 ASSERT_EQ(a->material, b->material);
72 EXPECT_EQ(a->rect.ToString(), b->rect.ToString());
73 EXPECT_EQ(a->opaque_rect.ToString(), b->opaque_rect.ToString());
74 EXPECT_EQ(a->visible_rect.ToString(), b->visible_rect.ToString());
75 EXPECT_EQ(a->needs_blending, b->needs_blending);
76
77 Compare(a->shared_quad_state, b->shared_quad_state);
78
79 switch (a->material) {
80 case DrawQuad::CHECKERBOARD:
81 Compare(CheckerboardDrawQuad::MaterialCast(a),
82 CheckerboardDrawQuad::MaterialCast(b));
83 break;
84 case DrawQuad::DEBUG_BORDER:
85 Compare(DebugBorderDrawQuad::MaterialCast(a),
86 DebugBorderDrawQuad::MaterialCast(b));
87 break;
88 case DrawQuad::IO_SURFACE_CONTENT:
89 Compare(IOSurfaceDrawQuad::MaterialCast(a),
90 IOSurfaceDrawQuad::MaterialCast(b));
91 break;
[email protected]9ee4d3a2013-03-27 17:43:1692 case DrawQuad::PICTURE_CONTENT:
93 Compare(PictureDrawQuad::MaterialCast(a),
94 PictureDrawQuad::MaterialCast(b));
95 break;
[email protected]4934d362012-11-22 22:04:5396 case DrawQuad::RENDER_PASS:
97 Compare(RenderPassDrawQuad::MaterialCast(a),
98 RenderPassDrawQuad::MaterialCast(b));
99 break;
100 case DrawQuad::TEXTURE_CONTENT:
101 Compare(TextureDrawQuad::MaterialCast(a),
102 TextureDrawQuad::MaterialCast(b));
103 break;
104 case DrawQuad::TILED_CONTENT:
105 Compare(TileDrawQuad::MaterialCast(a),
106 TileDrawQuad::MaterialCast(b));
107 break;
108 case DrawQuad::SOLID_COLOR:
109 Compare(SolidColorDrawQuad::MaterialCast(a),
110 SolidColorDrawQuad::MaterialCast(b));
111 break;
112 case DrawQuad::STREAM_VIDEO_CONTENT:
113 Compare(StreamVideoDrawQuad::MaterialCast(a),
114 StreamVideoDrawQuad::MaterialCast(b));
115 break;
[email protected]78d30122014-01-17 06:32:36116 case DrawQuad::SURFACE_CONTENT:
117 Compare(SurfaceDrawQuad::MaterialCast(a),
118 SurfaceDrawQuad::MaterialCast(b));
119 break;
[email protected]4934d362012-11-22 22:04:53120 case DrawQuad::YUV_VIDEO_CONTENT:
121 Compare(YUVVideoDrawQuad::MaterialCast(a),
122 YUVVideoDrawQuad::MaterialCast(b));
123 break;
124 case DrawQuad::INVALID:
125 break;
126 }
127 }
128
129 void Compare(const CheckerboardDrawQuad* a, const CheckerboardDrawQuad* b) {
130 EXPECT_EQ(a->color, b->color);
danakje1419ce2015-03-04 21:26:27131 EXPECT_EQ(a->scale, b->scale);
[email protected]4934d362012-11-22 22:04:53132 }
133
134 void Compare(const DebugBorderDrawQuad* a, const DebugBorderDrawQuad* b) {
135 EXPECT_EQ(a->color, b->color);
136 EXPECT_EQ(a->width, b->width);
137 }
138
139 void Compare(const IOSurfaceDrawQuad* a, const IOSurfaceDrawQuad* b) {
140 EXPECT_EQ(a->io_surface_size.ToString(), b->io_surface_size.ToString());
[email protected]b7cfc632013-04-10 04:44:49141 EXPECT_EQ(a->io_surface_resource_id, b->io_surface_resource_id);
[email protected]4934d362012-11-22 22:04:53142 EXPECT_EQ(a->orientation, b->orientation);
143 }
144
145 void Compare(const RenderPassDrawQuad* a, const RenderPassDrawQuad* b) {
[email protected]82f93fb2013-04-17 21:42:06146 EXPECT_EQ(a->render_pass_id, b->render_pass_id);
[email protected]4934d362012-11-22 22:04:53147 EXPECT_EQ(a->mask_resource_id, b->mask_resource_id);
ennef6f3fbba42014-10-16 18:16:49148 EXPECT_EQ(a->mask_uv_scale.ToString(), b->mask_uv_scale.ToString());
149 EXPECT_EQ(a->mask_texture_size.ToString(), b->mask_texture_size.ToString());
[email protected]1dc7943e2013-09-26 04:41:48150 EXPECT_EQ(a->filters.size(), b->filters.size());
151 for (size_t i = 0; i < a->filters.size(); ++i) {
152 if (a->filters.at(i).type() != cc::FilterOperation::REFERENCE) {
153 EXPECT_EQ(a->filters.at(i), b->filters.at(i));
154 } else {
155 EXPECT_EQ(b->filters.at(i).type(), cc::FilterOperation::REFERENCE);
156 EXPECT_EQ(a->filters.at(i).image_filter()->countInputs(),
157 b->filters.at(i).image_filter()->countInputs());
158 }
159 }
[email protected]7ac3d492014-08-08 21:25:32160 EXPECT_EQ(a->filters_scale, b->filters_scale);
[email protected]20062042012-12-21 22:16:36161 EXPECT_EQ(a->background_filters, b->background_filters);
[email protected]4934d362012-11-22 22:04:53162 }
163
164 void Compare(const SolidColorDrawQuad* a, const SolidColorDrawQuad* b) {
165 EXPECT_EQ(a->color, b->color);
[email protected]10a30b12013-05-02 16:42:11166 EXPECT_EQ(a->force_anti_aliasing_off, b->force_anti_aliasing_off);
[email protected]4934d362012-11-22 22:04:53167 }
168
169 void Compare(const StreamVideoDrawQuad* a, const StreamVideoDrawQuad* b) {
[email protected]b7cfc632013-04-10 04:44:49170 EXPECT_EQ(a->resource_id, b->resource_id);
[email protected]4934d362012-11-22 22:04:53171 EXPECT_EQ(a->matrix, b->matrix);
172 }
173
[email protected]78d30122014-01-17 06:32:36174 void Compare(const SurfaceDrawQuad* a, const SurfaceDrawQuad* b) {
175 EXPECT_EQ(a->surface_id, b->surface_id);
176 }
177
[email protected]4934d362012-11-22 22:04:53178 void Compare(const TextureDrawQuad* a, const TextureDrawQuad* b) {
179 EXPECT_EQ(a->resource_id, b->resource_id);
180 EXPECT_EQ(a->premultiplied_alpha, b->premultiplied_alpha);
[email protected]1fd555b2013-01-18 00:13:21181 EXPECT_EQ(a->uv_top_left, b->uv_top_left);
182 EXPECT_EQ(a->uv_bottom_right, b->uv_bottom_right);
[email protected]d18b4d62013-07-12 05:33:49183 EXPECT_EQ(a->background_color, b->background_color);
[email protected]61df9d82013-01-30 02:32:42184 EXPECT_EQ(a->vertex_opacity[0], b->vertex_opacity[0]);
185 EXPECT_EQ(a->vertex_opacity[1], b->vertex_opacity[1]);
186 EXPECT_EQ(a->vertex_opacity[2], b->vertex_opacity[2]);
187 EXPECT_EQ(a->vertex_opacity[3], b->vertex_opacity[3]);
[email protected]4934d362012-11-22 22:04:53188 EXPECT_EQ(a->flipped, b->flipped);
jackhou10c9af42014-12-04 05:24:44189 EXPECT_EQ(a->nearest_neighbor, b->nearest_neighbor);
[email protected]4934d362012-11-22 22:04:53190 }
191
192 void Compare(const TileDrawQuad* a, const TileDrawQuad* b) {
193 EXPECT_EQ(a->resource_id, b->resource_id);
194 EXPECT_EQ(a->tex_coord_rect, b->tex_coord_rect);
195 EXPECT_EQ(a->texture_size, b->texture_size);
196 EXPECT_EQ(a->swizzle_contents, b->swizzle_contents);
jackhou24229612014-12-13 23:41:00197 EXPECT_EQ(a->nearest_neighbor, b->nearest_neighbor);
[email protected]4934d362012-11-22 22:04:53198 }
199
200 void Compare(const YUVVideoDrawQuad* a, const YUVVideoDrawQuad* b) {
[email protected]95052aa2014-03-27 11:43:50201 EXPECT_EQ(a->tex_coord_rect, b->tex_coord_rect);
magjed7364ff92015-03-27 09:11:08202 EXPECT_EQ(a->ya_tex_size, b->ya_tex_size);
203 EXPECT_EQ(a->uv_tex_size, b->uv_tex_size);
[email protected]b7cfc632013-04-10 04:44:49204 EXPECT_EQ(a->y_plane_resource_id, b->y_plane_resource_id);
205 EXPECT_EQ(a->u_plane_resource_id, b->u_plane_resource_id);
206 EXPECT_EQ(a->v_plane_resource_id, b->v_plane_resource_id);
[email protected]0402b2382013-06-07 21:50:54207 EXPECT_EQ(a->a_plane_resource_id, b->a_plane_resource_id);
[email protected]82faf5e2014-05-03 02:25:58208 EXPECT_EQ(a->color_space, b->color_space);
[email protected]4934d362012-11-22 22:04:53209 }
[email protected]bca159072012-12-04 00:52:44210
211 void Compare(const TransferableResource& a, const TransferableResource& b) {
212 EXPECT_EQ(a.id, b.id);
213 EXPECT_EQ(a.format, b.format);
[email protected]80189292013-02-28 01:59:36214 EXPECT_EQ(a.filter, b.filter);
[email protected]bca159072012-12-04 00:52:44215 EXPECT_EQ(a.size.ToString(), b.size.ToString());
[email protected]df41e252014-02-03 23:39:50216 for (size_t i = 0; i < arraysize(a.mailbox_holder.mailbox.name); ++i) {
217 EXPECT_EQ(a.mailbox_holder.mailbox.name[i],
218 b.mailbox_holder.mailbox.name[i]);
219 }
220 EXPECT_EQ(a.mailbox_holder.texture_target, b.mailbox_holder.texture_target);
221 EXPECT_EQ(a.mailbox_holder.sync_point, b.mailbox_holder.sync_point);
[email protected]a8c63be22014-08-07 02:39:49222 EXPECT_EQ(a.allow_overlay, b.allow_overlay);
[email protected]bca159072012-12-04 00:52:44223 }
[email protected]4934d362012-11-22 22:04:53224};
225
226TEST_F(CCMessagesTest, AllQuads) {
[email protected]753bb252013-11-04 22:28:12227 IPC::Message msg(1, 2, IPC::Message::PRIORITY_NORMAL);
[email protected]4934d362012-11-22 22:04:53228
[email protected]c8686a02012-11-27 08:29:00229 Transform arbitrary_matrix;
230 arbitrary_matrix.Scale(3, 3);
231 arbitrary_matrix.Translate(-5, 20);
232 arbitrary_matrix.Rotate(15);
[email protected]4934d362012-11-22 22:04:53233 gfx::Rect arbitrary_rect1(-5, 9, 3, 15);
[email protected]8e1da692013-10-12 17:11:30234 gfx::Rect arbitrary_rect1_inside_rect1(-4, 12, 2, 8);
235 gfx::Rect arbitrary_rect2_inside_rect1(-5, 11, 1, 2);
[email protected]4934d362012-11-22 22:04:53236 gfx::Rect arbitrary_rect2(40, 23, 11, 7);
[email protected]8e1da692013-10-12 17:11:30237 gfx::Rect arbitrary_rect1_inside_rect2(44, 23, 4, 2);
238 gfx::Rect arbitrary_rect2_inside_rect2(41, 25, 3, 5);
[email protected]4934d362012-11-22 22:04:53239 gfx::Rect arbitrary_rect3(7, -53, 22, 19);
[email protected]8e1da692013-10-12 17:11:30240 gfx::Rect arbitrary_rect1_inside_rect3(10, -40, 6, 3);
241 gfx::Rect arbitrary_rect2_inside_rect3(12, -51, 5, 12);
[email protected]4934d362012-11-22 22:04:53242 gfx::Size arbitrary_size1(15, 19);
243 gfx::Size arbitrary_size2(3, 99);
244 gfx::Size arbitrary_size3(75, 1281);
245 gfx::RectF arbitrary_rectf1(4.2f, -922.1f, 15.6f, 29.5f);
246 gfx::SizeF arbitrary_sizef1(15.2f, 104.6f);
[email protected]61df9d82013-01-30 02:32:42247 gfx::PointF arbitrary_pointf1(31.4f, 15.9f);
248 gfx::PointF arbitrary_pointf2(26.5f, -35.8f);
[email protected]7ac3d492014-08-08 21:25:32249 gfx::Vector2dF arbitrary_vector2df1(16.2f, -85.1f);
ennef6f3fbba42014-10-16 18:16:49250 gfx::Vector2dF arbitrary_vector2df2(-8.3f, 0.47f);
[email protected]4934d362012-11-22 22:04:53251 float arbitrary_float1 = 0.7f;
252 float arbitrary_float2 = 0.3f;
253 float arbitrary_float3 = 0.9f;
[email protected]61df9d82013-01-30 02:32:42254 float arbitrary_float_array[4] = {3.5f, 6.2f, 9.3f, 12.3f};
[email protected]4934d362012-11-22 22:04:53255 bool arbitrary_bool1 = true;
256 bool arbitrary_bool2 = false;
[email protected]61df9d82013-01-30 02:32:42257 bool arbitrary_bool3 = true;
jackhou10c9af42014-12-04 05:24:44258 bool arbitrary_bool4 = true;
[email protected]a9d4d4f2014-06-19 06:49:28259 int arbitrary_context_id1 = 12;
260 int arbitrary_context_id2 = 57;
261 int arbitrary_context_id3 = -503;
[email protected]4934d362012-11-22 22:04:53262 int arbitrary_int = 5;
263 SkColor arbitrary_color = SkColorSetARGB(25, 36, 47, 58);
[email protected]7bbeaf4e2013-11-26 10:27:22264 SkXfermode::Mode arbitrary_blend_mode1 = SkXfermode::kScreen_Mode;
265 SkXfermode::Mode arbitrary_blend_mode2 = SkXfermode::kLighten_Mode;
266 SkXfermode::Mode arbitrary_blend_mode3 = SkXfermode::kOverlay_Mode;
[email protected]4934d362012-11-22 22:04:53267 IOSurfaceDrawQuad::Orientation arbitrary_orientation =
268 IOSurfaceDrawQuad::UNFLIPPED;
[email protected]0cd7d6f72014-08-22 14:50:51269 RenderPassId arbitrary_id(10, 14);
[email protected]b7cfc632013-04-10 04:44:49270 ResourceProvider::ResourceId arbitrary_resourceid1 = 55;
271 ResourceProvider::ResourceId arbitrary_resourceid2 = 47;
272 ResourceProvider::ResourceId arbitrary_resourceid3 = 23;
[email protected]0402b2382013-06-07 21:50:54273 ResourceProvider::ResourceId arbitrary_resourceid4 = 16;
[email protected]a1765672013-08-12 23:45:02274 SkScalar arbitrary_sigma = SkFloatToScalar(2.0f);
[email protected]82faf5e2014-05-03 02:25:58275 YUVVideoDrawQuad::ColorSpace arbitrary_color_space =
276 YUVVideoDrawQuad::REC_601;
[email protected]4934d362012-11-22 22:04:53277
[email protected]ae6b1a72013-06-25 18:49:29278 FilterOperations arbitrary_filters1;
279 arbitrary_filters1.Append(FilterOperation::CreateGrayscaleFilter(
[email protected]4934d362012-11-22 22:04:53280 arbitrary_float1));
[email protected]1dc7943e2013-09-26 04:41:48281 skia::RefPtr<SkImageFilter> arbitrary_filter = skia::AdoptRef(
[email protected]bb209bf2014-05-11 00:37:11282 SkBlurImageFilter::Create(arbitrary_sigma, arbitrary_sigma));
[email protected]1dc7943e2013-09-26 04:41:48283 arbitrary_filters1.Append(
284 cc::FilterOperation::CreateReferenceFilter(arbitrary_filter));
[email protected]4934d362012-11-22 22:04:53285
[email protected]ae6b1a72013-06-25 18:49:29286 FilterOperations arbitrary_filters2;
287 arbitrary_filters2.Append(FilterOperation::CreateBrightnessFilter(
[email protected]4934d362012-11-22 22:04:53288 arbitrary_float2));
289
[email protected]2b7f3892014-05-08 01:45:18290 scoped_ptr<RenderPass> pass_in = RenderPass::Create();
291 pass_in->SetAll(arbitrary_id,
292 arbitrary_rect1,
293 arbitrary_rect2,
294 arbitrary_matrix,
295 arbitrary_bool1);
296
297 SharedQuadState* shared_state1_in = pass_in->CreateAndAppendSharedQuadState();
[email protected]4934d362012-11-22 22:04:53298 shared_state1_in->SetAll(arbitrary_matrix,
[email protected]f902bf92013-03-04 18:33:27299 arbitrary_size1,
[email protected]4934d362012-11-22 22:04:53300 arbitrary_rect1,
301 arbitrary_rect2,
[email protected]4934d362012-11-22 22:04:53302 arbitrary_bool1,
[email protected]7bbeaf4e2013-11-26 10:27:22303 arbitrary_float1,
[email protected]a9d4d4f2014-06-19 06:49:28304 arbitrary_blend_mode1,
305 arbitrary_context_id1);
[email protected]2b7f3892014-05-08 01:45:18306
307 scoped_ptr<RenderPass> pass_cmp = RenderPass::Create();
308 pass_cmp->SetAll(arbitrary_id,
309 arbitrary_rect1,
310 arbitrary_rect2,
311 arbitrary_matrix,
312 arbitrary_bool1);
313
314 SharedQuadState* shared_state1_cmp =
315 pass_cmp->CreateAndAppendSharedQuadState();
316 shared_state1_cmp->CopyFrom(shared_state1_in);
[email protected]4934d362012-11-22 22:04:53317
[email protected]3b85fd92014-07-10 00:00:02318 CheckerboardDrawQuad* checkerboard_in =
319 pass_in->CreateAndAppendDrawQuad<CheckerboardDrawQuad>();
danakje1419ce2015-03-04 21:26:27320 checkerboard_in->SetAll(shared_state1_in, arbitrary_rect1,
[email protected]8e1da692013-10-12 17:11:30321 arbitrary_rect2_inside_rect1,
danakje1419ce2015-03-04 21:26:27322 arbitrary_rect1_inside_rect1, arbitrary_bool1,
323 arbitrary_color, arbitrary_float1);
[email protected]3b85fd92014-07-10 00:00:02324 pass_cmp->CopyFromAndAppendDrawQuad(checkerboard_in,
325 checkerboard_in->shared_quad_state);
[email protected]4934d362012-11-22 22:04:53326
[email protected]3b85fd92014-07-10 00:00:02327 DebugBorderDrawQuad* debugborder_in =
328 pass_in->CreateAndAppendDrawQuad<DebugBorderDrawQuad>();
[email protected]2b7f3892014-05-08 01:45:18329 debugborder_in->SetAll(shared_state1_in,
[email protected]4934d362012-11-22 22:04:53330 arbitrary_rect3,
[email protected]8e1da692013-10-12 17:11:30331 arbitrary_rect1_inside_rect3,
332 arbitrary_rect2_inside_rect3,
[email protected]4934d362012-11-22 22:04:53333 arbitrary_bool1,
334 arbitrary_color,
335 arbitrary_int);
[email protected]3b85fd92014-07-10 00:00:02336 pass_cmp->CopyFromAndAppendDrawQuad(debugborder_in,
337 debugborder_in->shared_quad_state);
[email protected]4934d362012-11-22 22:04:53338
[email protected]3b85fd92014-07-10 00:00:02339 IOSurfaceDrawQuad* iosurface_in =
340 pass_in->CreateAndAppendDrawQuad<IOSurfaceDrawQuad>();
[email protected]2b7f3892014-05-08 01:45:18341 iosurface_in->SetAll(shared_state1_in,
[email protected]4934d362012-11-22 22:04:53342 arbitrary_rect2,
[email protected]8e1da692013-10-12 17:11:30343 arbitrary_rect2_inside_rect2,
344 arbitrary_rect1_inside_rect2,
[email protected]4934d362012-11-22 22:04:53345 arbitrary_bool1,
346 arbitrary_size1,
[email protected]b7cfc632013-04-10 04:44:49347 arbitrary_resourceid3,
[email protected]4934d362012-11-22 22:04:53348 arbitrary_orientation);
[email protected]3b85fd92014-07-10 00:00:02349 pass_cmp->CopyFromAndAppendDrawQuad(iosurface_in,
350 iosurface_in->shared_quad_state);
[email protected]4934d362012-11-22 22:04:53351
[email protected]2b7f3892014-05-08 01:45:18352 SharedQuadState* shared_state2_in = pass_in->CreateAndAppendSharedQuadState();
[email protected]cbe94b7a2013-11-13 11:03:37353 shared_state2_in->SetAll(arbitrary_matrix,
354 arbitrary_size2,
355 arbitrary_rect2,
356 arbitrary_rect3,
357 arbitrary_bool1,
[email protected]7bbeaf4e2013-11-26 10:27:22358 arbitrary_float2,
[email protected]a9d4d4f2014-06-19 06:49:28359 arbitrary_blend_mode2,
360 arbitrary_context_id2);
[email protected]2b7f3892014-05-08 01:45:18361 SharedQuadState* shared_state2_cmp =
362 pass_cmp->CreateAndAppendSharedQuadState();
363 shared_state2_cmp->CopyFrom(shared_state2_in);
[email protected]cbe94b7a2013-11-13 11:03:37364
[email protected]3b85fd92014-07-10 00:00:02365 RenderPassDrawQuad* renderpass_in =
366 pass_in->CreateAndAppendDrawQuad<RenderPassDrawQuad>();
[email protected]2b7f3892014-05-08 01:45:18367 renderpass_in->SetAll(shared_state2_in,
[email protected]4934d362012-11-22 22:04:53368 arbitrary_rect1,
[email protected]8e1da692013-10-12 17:11:30369 arbitrary_rect2_inside_rect1,
370 arbitrary_rect1_inside_rect1,
[email protected]4934d362012-11-22 22:04:53371 arbitrary_bool1,
372 arbitrary_id,
[email protected]b7cfc632013-04-10 04:44:49373 arbitrary_resourceid2,
[email protected]7ac3d492014-08-08 21:25:32374 arbitrary_vector2df1,
ennef6f3fbba42014-10-16 18:16:49375 arbitrary_size1,
376 arbitrary_filters1,
377 arbitrary_vector2df2,
[email protected]20062042012-12-21 22:16:36378 arbitrary_filters2);
[email protected]3b85fd92014-07-10 00:00:02379 pass_cmp->CopyFromAndAppendRenderPassDrawQuad(
380 renderpass_in,
381 renderpass_in->shared_quad_state,
382 renderpass_in->render_pass_id);
[email protected]4934d362012-11-22 22:04:53383
[email protected]2b7f3892014-05-08 01:45:18384 SharedQuadState* shared_state3_in = pass_in->CreateAndAppendSharedQuadState();
[email protected]4934d362012-11-22 22:04:53385 shared_state3_in->SetAll(arbitrary_matrix,
[email protected]f902bf92013-03-04 18:33:27386 arbitrary_size3,
[email protected]4934d362012-11-22 22:04:53387 arbitrary_rect3,
388 arbitrary_rect1,
[email protected]4934d362012-11-22 22:04:53389 arbitrary_bool1,
[email protected]7bbeaf4e2013-11-26 10:27:22390 arbitrary_float3,
[email protected]a9d4d4f2014-06-19 06:49:28391 arbitrary_blend_mode3,
392 arbitrary_context_id3);
[email protected]2b7f3892014-05-08 01:45:18393 SharedQuadState* shared_state3_cmp =
394 pass_cmp->CreateAndAppendSharedQuadState();
395 shared_state3_cmp->CopyFrom(shared_state3_in);
[email protected]4934d362012-11-22 22:04:53396
[email protected]3b85fd92014-07-10 00:00:02397 SolidColorDrawQuad* solidcolor_in =
398 pass_in->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
[email protected]2b7f3892014-05-08 01:45:18399 solidcolor_in->SetAll(shared_state3_in,
[email protected]4934d362012-11-22 22:04:53400 arbitrary_rect3,
[email protected]8e1da692013-10-12 17:11:30401 arbitrary_rect1_inside_rect3,
402 arbitrary_rect2_inside_rect3,
[email protected]4934d362012-11-22 22:04:53403 arbitrary_bool1,
[email protected]10a30b12013-05-02 16:42:11404 arbitrary_color,
405 arbitrary_bool2);
[email protected]3b85fd92014-07-10 00:00:02406 pass_cmp->CopyFromAndAppendDrawQuad(solidcolor_in,
407 solidcolor_in->shared_quad_state);
[email protected]4934d362012-11-22 22:04:53408
[email protected]3b85fd92014-07-10 00:00:02409 StreamVideoDrawQuad* streamvideo_in =
410 pass_in->CreateAndAppendDrawQuad<StreamVideoDrawQuad>();
[email protected]2b7f3892014-05-08 01:45:18411 streamvideo_in->SetAll(shared_state3_in,
[email protected]4934d362012-11-22 22:04:53412 arbitrary_rect2,
[email protected]8e1da692013-10-12 17:11:30413 arbitrary_rect2_inside_rect2,
414 arbitrary_rect1_inside_rect2,
[email protected]4934d362012-11-22 22:04:53415 arbitrary_bool1,
[email protected]b7cfc632013-04-10 04:44:49416 arbitrary_resourceid2,
[email protected]4934d362012-11-22 22:04:53417 arbitrary_matrix);
[email protected]3b85fd92014-07-10 00:00:02418 pass_cmp->CopyFromAndAppendDrawQuad(streamvideo_in,
419 streamvideo_in->shared_quad_state);
[email protected]4934d362012-11-22 22:04:53420
[email protected]16a6af152014-06-13 04:20:16421 cc::SurfaceId arbitrary_surface_id(3);
[email protected]3b85fd92014-07-10 00:00:02422 SurfaceDrawQuad* surface_in =
423 pass_in->CreateAndAppendDrawQuad<SurfaceDrawQuad>();
[email protected]2b7f3892014-05-08 01:45:18424 surface_in->SetAll(shared_state3_in,
425 arbitrary_rect2,
426 arbitrary_rect2_inside_rect2,
427 arbitrary_rect1_inside_rect2,
428 arbitrary_bool1,
429 arbitrary_surface_id);
[email protected]3b85fd92014-07-10 00:00:02430 pass_cmp->CopyFromAndAppendDrawQuad(surface_in,
431 surface_in->shared_quad_state);
[email protected]78d30122014-01-17 06:32:36432
[email protected]3b85fd92014-07-10 00:00:02433 TextureDrawQuad* texture_in =
434 pass_in->CreateAndAppendDrawQuad<TextureDrawQuad>();
[email protected]2b7f3892014-05-08 01:45:18435 texture_in->SetAll(shared_state3_in,
[email protected]61df9d82013-01-30 02:32:42436 arbitrary_rect2,
[email protected]8e1da692013-10-12 17:11:30437 arbitrary_rect2_inside_rect2,
438 arbitrary_rect1_inside_rect2,
[email protected]61df9d82013-01-30 02:32:42439 arbitrary_bool1,
[email protected]b7cfc632013-04-10 04:44:49440 arbitrary_resourceid1,
[email protected]61df9d82013-01-30 02:32:42441 arbitrary_bool2,
442 arbitrary_pointf1,
443 arbitrary_pointf2,
[email protected]d18b4d62013-07-12 05:33:49444 arbitrary_color,
[email protected]61df9d82013-01-30 02:32:42445 arbitrary_float_array,
jackhou10c9af42014-12-04 05:24:44446 arbitrary_bool3,
447 arbitrary_bool4);
[email protected]3b85fd92014-07-10 00:00:02448 pass_cmp->CopyFromAndAppendDrawQuad(texture_in,
449 texture_in->shared_quad_state);
[email protected]61df9d82013-01-30 02:32:42450
[email protected]3b85fd92014-07-10 00:00:02451 TileDrawQuad* tile_in = pass_in->CreateAndAppendDrawQuad<TileDrawQuad>();
[email protected]2b7f3892014-05-08 01:45:18452 tile_in->SetAll(shared_state3_in,
[email protected]61df9d82013-01-30 02:32:42453 arbitrary_rect2,
[email protected]8e1da692013-10-12 17:11:30454 arbitrary_rect2_inside_rect2,
455 arbitrary_rect1_inside_rect2,
[email protected]61df9d82013-01-30 02:32:42456 arbitrary_bool1,
[email protected]b7cfc632013-04-10 04:44:49457 arbitrary_resourceid3,
[email protected]61df9d82013-01-30 02:32:42458 arbitrary_rectf1,
459 arbitrary_size1,
jackhou24229612014-12-13 23:41:00460 arbitrary_bool2,
461 arbitrary_bool3);
[email protected]3b85fd92014-07-10 00:00:02462 pass_cmp->CopyFromAndAppendDrawQuad(tile_in, tile_in->shared_quad_state);
[email protected]61df9d82013-01-30 02:32:42463
[email protected]3b85fd92014-07-10 00:00:02464 YUVVideoDrawQuad* yuvvideo_in =
465 pass_in->CreateAndAppendDrawQuad<YUVVideoDrawQuad>();
[email protected]2b7f3892014-05-08 01:45:18466 yuvvideo_in->SetAll(shared_state3_in,
[email protected]4934d362012-11-22 22:04:53467 arbitrary_rect1,
[email protected]8e1da692013-10-12 17:11:30468 arbitrary_rect2_inside_rect1,
469 arbitrary_rect1_inside_rect1,
[email protected]4934d362012-11-22 22:04:53470 arbitrary_bool1,
[email protected]95052aa2014-03-27 11:43:50471 arbitrary_rectf1,
ennea2a29702015-02-02 22:21:21472 arbitrary_size1,
magjed7364ff92015-03-27 09:11:08473 arbitrary_size2,
[email protected]b7cfc632013-04-10 04:44:49474 arbitrary_resourceid1,
475 arbitrary_resourceid2,
[email protected]0402b2382013-06-07 21:50:54476 arbitrary_resourceid3,
[email protected]82faf5e2014-05-03 02:25:58477 arbitrary_resourceid4,
478 arbitrary_color_space);
[email protected]3b85fd92014-07-10 00:00:02479 pass_cmp->CopyFromAndAppendDrawQuad(yuvvideo_in,
480 yuvvideo_in->shared_quad_state);
[email protected]4934d362012-11-22 22:04:53481
482 // Make sure the in and cmp RenderPasses match.
483 Compare(pass_cmp.get(), pass_in.get());
484 ASSERT_EQ(3u, pass_in->shared_quad_state_list.size());
[email protected]78d30122014-01-17 06:32:36485 ASSERT_EQ(10u, pass_in->quad_list.size());
weiliangc808f70f2014-10-03 22:53:15486 for (cc::SharedQuadStateList::ConstIterator
487 cmp_iterator = pass_cmp->shared_quad_state_list.begin(),
488 in_iterator = pass_in->shared_quad_state_list.begin();
489 in_iterator != pass_in->shared_quad_state_list.end();
490 ++cmp_iterator, ++in_iterator) {
weiliangc48805fce2014-10-29 20:30:12491 Compare(*cmp_iterator, *in_iterator);
[email protected]4934d362012-11-22 22:04:53492 }
weiliangc7eb7ee62014-10-07 00:04:40493 for (auto in_iter = pass_in->quad_list.cbegin(),
494 cmp_iter = pass_cmp->quad_list.cbegin();
495 in_iter != pass_in->quad_list.cend();
weiliangc032e929d2014-09-26 01:55:01496 ++in_iter, ++cmp_iter)
weiliangc48805fce2014-10-29 20:30:12497 Compare(*cmp_iter, *in_iter);
weiliangc032e929d2014-09-26 01:55:01498
[email protected]61df9d82013-01-30 02:32:42499 for (size_t i = 1; i < pass_in->quad_list.size(); ++i) {
[email protected]4934d362012-11-22 22:04:53500 bool same_shared_quad_state_cmp =
weiliangc032e929d2014-09-26 01:55:01501 pass_cmp->quad_list.ElementAt(i)->shared_quad_state ==
502 pass_cmp->quad_list.ElementAt(i - 1)->shared_quad_state;
[email protected]4934d362012-11-22 22:04:53503 bool same_shared_quad_state_in =
weiliangc032e929d2014-09-26 01:55:01504 pass_in->quad_list.ElementAt(i)->shared_quad_state ==
505 pass_in->quad_list.ElementAt(i - 1)->shared_quad_state;
[email protected]4934d362012-11-22 22:04:53506 EXPECT_EQ(same_shared_quad_state_cmp, same_shared_quad_state_in);
507 }
508
[email protected]bf189f62012-12-18 03:42:11509 DelegatedFrameData frame_in;
[email protected]ead39c52013-01-09 07:22:45510 frame_in.render_pass_list.push_back(pass_in.Pass());
[email protected]4934d362012-11-22 22:04:53511
[email protected]bf189f62012-12-18 03:42:11512 IPC::ParamTraits<DelegatedFrameData>::Write(&msg, frame_in);
[email protected]bca159072012-12-04 00:52:44513
[email protected]bf189f62012-12-18 03:42:11514 DelegatedFrameData frame_out;
[email protected]4934d362012-11-22 22:04:53515 PickleIterator iter(msg);
[email protected]bf189f62012-12-18 03:42:11516 EXPECT_TRUE(IPC::ParamTraits<DelegatedFrameData>::Read(&msg,
517 &iter, &frame_out));
[email protected]bca159072012-12-04 00:52:44518
[email protected]4934d362012-11-22 22:04:53519 // Make sure the out and cmp RenderPasses match.
[email protected]ead39c52013-01-09 07:22:45520 scoped_ptr<RenderPass> pass_out = frame_out.render_pass_list.take(
521 frame_out.render_pass_list.begin());
[email protected]4934d362012-11-22 22:04:53522 Compare(pass_cmp.get(), pass_out.get());
523 ASSERT_EQ(3u, pass_out->shared_quad_state_list.size());
[email protected]78d30122014-01-17 06:32:36524 ASSERT_EQ(10u, pass_out->quad_list.size());
weiliangc808f70f2014-10-03 22:53:15525 for (cc::SharedQuadStateList::ConstIterator
526 cmp_iterator = pass_cmp->shared_quad_state_list.begin(),
527 out_iterator = pass_out->shared_quad_state_list.begin();
528 out_iterator != pass_out->shared_quad_state_list.end();
529 ++cmp_iterator, ++out_iterator) {
weiliangc48805fce2014-10-29 20:30:12530 Compare(*cmp_iterator, *out_iterator);
[email protected]4934d362012-11-22 22:04:53531 }
weiliangc7eb7ee62014-10-07 00:04:40532 for (auto out_iter = pass_out->quad_list.cbegin(),
533 cmp_iter = pass_cmp->quad_list.cbegin();
534 out_iter != pass_out->quad_list.cend();
weiliangc032e929d2014-09-26 01:55:01535 ++out_iter, ++cmp_iter)
weiliangc48805fce2014-10-29 20:30:12536 Compare(*cmp_iter, *out_iter);
weiliangc032e929d2014-09-26 01:55:01537
[email protected]61df9d82013-01-30 02:32:42538 for (size_t i = 1; i < pass_out->quad_list.size(); ++i) {
[email protected]4934d362012-11-22 22:04:53539 bool same_shared_quad_state_cmp =
weiliangc032e929d2014-09-26 01:55:01540 pass_cmp->quad_list.ElementAt(i)->shared_quad_state ==
541 pass_cmp->quad_list.ElementAt(i - 1)->shared_quad_state;
[email protected]4934d362012-11-22 22:04:53542 bool same_shared_quad_state_out =
weiliangc032e929d2014-09-26 01:55:01543 pass_out->quad_list.ElementAt(i)->shared_quad_state ==
544 pass_out->quad_list.ElementAt(i - 1)->shared_quad_state;
[email protected]4934d362012-11-22 22:04:53545 EXPECT_EQ(same_shared_quad_state_cmp, same_shared_quad_state_out);
546 }
547}
[email protected]bca159072012-12-04 00:52:44548
[email protected]cbe94b7a2013-11-13 11:03:37549TEST_F(CCMessagesTest, UnusedSharedQuadStates) {
[email protected]cbe94b7a2013-11-13 11:03:37550 scoped_ptr<RenderPass> pass_in = RenderPass::Create();
[email protected]0cd7d6f72014-08-22 14:50:51551 pass_in->SetAll(RenderPassId(1, 1),
[email protected]cbe94b7a2013-11-13 11:03:37552 gfx::Rect(100, 100),
[email protected]b4ead7b2014-04-07 18:12:18553 gfx::Rect(),
[email protected]cbe94b7a2013-11-13 11:03:37554 gfx::Transform(),
[email protected]8590da32014-03-28 20:49:07555 false);
[email protected]cbe94b7a2013-11-13 11:03:37556
557 // The first SharedQuadState is used.
[email protected]2b7f3892014-05-08 01:45:18558 SharedQuadState* shared_state1_in = pass_in->CreateAndAppendSharedQuadState();
[email protected]7bbeaf4e2013-11-26 10:27:22559 shared_state1_in->SetAll(gfx::Transform(),
560 gfx::Size(1, 1),
561 gfx::Rect(),
562 gfx::Rect(),
563 false,
564 1.f,
[email protected]a9d4d4f2014-06-19 06:49:28565 SkXfermode::kSrcOver_Mode,
566 0);
[email protected]cbe94b7a2013-11-13 11:03:37567
[email protected]3b85fd92014-07-10 00:00:02568 CheckerboardDrawQuad* quad1 =
569 pass_in->CreateAndAppendDrawQuad<CheckerboardDrawQuad>();
danakje1419ce2015-03-04 21:26:27570 quad1->SetAll(shared_state1_in, gfx::Rect(10, 10), gfx::Rect(10, 10),
571 gfx::Rect(10, 10), false, SK_ColorRED, 1.f);
[email protected]cbe94b7a2013-11-13 11:03:37572
573 // The second and third SharedQuadStates are not used.
[email protected]2b7f3892014-05-08 01:45:18574 SharedQuadState* shared_state2_in = pass_in->CreateAndAppendSharedQuadState();
[email protected]7bbeaf4e2013-11-26 10:27:22575 shared_state2_in->SetAll(gfx::Transform(),
576 gfx::Size(2, 2),
577 gfx::Rect(),
578 gfx::Rect(),
579 false,
580 1.f,
[email protected]a9d4d4f2014-06-19 06:49:28581 SkXfermode::kSrcOver_Mode,
582 0);
[email protected]cbe94b7a2013-11-13 11:03:37583
[email protected]2b7f3892014-05-08 01:45:18584 SharedQuadState* shared_state3_in = pass_in->CreateAndAppendSharedQuadState();
[email protected]7bbeaf4e2013-11-26 10:27:22585 shared_state3_in->SetAll(gfx::Transform(),
586 gfx::Size(3, 3),
587 gfx::Rect(),
588 gfx::Rect(),
589 false,
590 1.f,
[email protected]a9d4d4f2014-06-19 06:49:28591 SkXfermode::kSrcOver_Mode,
592 0);
[email protected]cbe94b7a2013-11-13 11:03:37593
594 // The fourth SharedQuadState is used.
[email protected]2b7f3892014-05-08 01:45:18595 SharedQuadState* shared_state4_in = pass_in->CreateAndAppendSharedQuadState();
[email protected]7bbeaf4e2013-11-26 10:27:22596 shared_state4_in->SetAll(gfx::Transform(),
597 gfx::Size(4, 4),
598 gfx::Rect(),
599 gfx::Rect(),
600 false,
601 1.f,
[email protected]a9d4d4f2014-06-19 06:49:28602 SkXfermode::kSrcOver_Mode,
603 0);
[email protected]cbe94b7a2013-11-13 11:03:37604
[email protected]3b85fd92014-07-10 00:00:02605 CheckerboardDrawQuad* quad2 =
606 pass_in->CreateAndAppendDrawQuad<CheckerboardDrawQuad>();
danakje1419ce2015-03-04 21:26:27607 quad2->SetAll(shared_state4_in, gfx::Rect(10, 10), gfx::Rect(10, 10),
608 gfx::Rect(10, 10), false, SK_ColorRED, 1.f);
[email protected]cbe94b7a2013-11-13 11:03:37609
610 // The fifth is not used again.
[email protected]2b7f3892014-05-08 01:45:18611 SharedQuadState* shared_state5_in = pass_in->CreateAndAppendSharedQuadState();
[email protected]7bbeaf4e2013-11-26 10:27:22612 shared_state5_in->SetAll(gfx::Transform(),
613 gfx::Size(5, 5),
614 gfx::Rect(),
615 gfx::Rect(),
616 false,
617 1.f,
[email protected]a9d4d4f2014-06-19 06:49:28618 SkXfermode::kSrcOver_Mode,
619 0);
[email protected]cbe94b7a2013-11-13 11:03:37620
[email protected]cbe94b7a2013-11-13 11:03:37621 // 5 SharedQuadStates go in.
622 ASSERT_EQ(5u, pass_in->shared_quad_state_list.size());
623 ASSERT_EQ(2u, pass_in->quad_list.size());
624
625 DelegatedFrameData frame_in;
626 frame_in.render_pass_list.push_back(pass_in.Pass());
627
628 IPC::Message msg(1, 2, IPC::Message::PRIORITY_NORMAL);
629 IPC::ParamTraits<DelegatedFrameData>::Write(&msg, frame_in);
630
631 DelegatedFrameData frame_out;
632 PickleIterator iter(msg);
633 EXPECT_TRUE(
634 IPC::ParamTraits<DelegatedFrameData>::Read(&msg, &iter, &frame_out));
635
636 scoped_ptr<RenderPass> pass_out =
637 frame_out.render_pass_list.take(frame_out.render_pass_list.begin());
638
639 // 2 SharedQuadStates come out. The first and fourth SharedQuadStates were
640 // used by quads, and so serialized. Others were not.
641 ASSERT_EQ(2u, pass_out->shared_quad_state_list.size());
642 ASSERT_EQ(2u, pass_out->quad_list.size());
643
weiliangc808f70f2014-10-03 22:53:15644 EXPECT_EQ(
645 gfx::Size(1, 1).ToString(),
646 pass_out->shared_quad_state_list.ElementAt(0)->content_bounds.ToString());
647 EXPECT_EQ(
648 gfx::Size(4, 4).ToString(),
649 pass_out->shared_quad_state_list.ElementAt(1)->content_bounds.ToString());
[email protected]cbe94b7a2013-11-13 11:03:37650}
651
[email protected]bca159072012-12-04 00:52:44652TEST_F(CCMessagesTest, Resources) {
[email protected]753bb252013-11-04 22:28:12653 IPC::Message msg(1, 2, IPC::Message::PRIORITY_NORMAL);
[email protected]bca159072012-12-04 00:52:44654 gfx::Size arbitrary_size(757, 1281);
[email protected]09831f7f2013-02-27 03:32:15655 unsigned int arbitrary_uint1 = 71234838;
656 unsigned int arbitrary_uint2 = 53589793;
[email protected]bca159072012-12-04 00:52:44657
[email protected]e0a4d732014-02-15 00:23:26658 GLbyte arbitrary_mailbox1[GL_MAILBOX_SIZE_CHROMIUM] = {
659 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2,
660 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4,
661 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4};
[email protected]bca159072012-12-04 00:52:44662
[email protected]e0a4d732014-02-15 00:23:26663 GLbyte arbitrary_mailbox2[GL_MAILBOX_SIZE_CHROMIUM] = {
664 0, 9, 8, 7, 6, 5, 4, 3, 2, 1, 9, 7, 5, 3, 1, 2, 4, 6, 8, 0, 0, 9,
665 8, 7, 6, 5, 4, 3, 2, 1, 9, 7, 5, 3, 1, 2, 4, 6, 8, 0, 0, 9, 8, 7,
666 6, 5, 4, 3, 2, 1, 9, 7, 5, 3, 1, 2, 4, 6, 8, 0, 0, 9, 8, 7};
[email protected]bca159072012-12-04 00:52:44667
668 TransferableResource arbitrary_resource1;
669 arbitrary_resource1.id = 2178312;
[email protected]27a41fe2013-09-19 05:05:14670 arbitrary_resource1.format = cc::RGBA_8888;
[email protected]80189292013-02-28 01:59:36671 arbitrary_resource1.filter = 53;
[email protected]bca159072012-12-04 00:52:44672 arbitrary_resource1.size = gfx::Size(37189, 123123);
[email protected]df41e252014-02-03 23:39:50673 arbitrary_resource1.mailbox_holder.mailbox.SetName(arbitrary_mailbox1);
674 arbitrary_resource1.mailbox_holder.texture_target = GL_TEXTURE_2D;
675 arbitrary_resource1.mailbox_holder.sync_point = arbitrary_uint1;
[email protected]a8c63be22014-08-07 02:39:49676 arbitrary_resource1.allow_overlay = true;
[email protected]bca159072012-12-04 00:52:44677
678 TransferableResource arbitrary_resource2;
679 arbitrary_resource2.id = 789132;
[email protected]27a41fe2013-09-19 05:05:14680 arbitrary_resource2.format = cc::RGBA_4444;
[email protected]645a47f22013-09-26 05:42:32681 arbitrary_resource2.filter = 47;
[email protected]bca159072012-12-04 00:52:44682 arbitrary_resource2.size = gfx::Size(89123, 23789);
[email protected]df41e252014-02-03 23:39:50683 arbitrary_resource2.mailbox_holder.mailbox.SetName(arbitrary_mailbox2);
684 arbitrary_resource2.mailbox_holder.texture_target = GL_TEXTURE_EXTERNAL_OES;
685 arbitrary_resource2.mailbox_holder.sync_point = arbitrary_uint2;
[email protected]a8c63be22014-08-07 02:39:49686 arbitrary_resource2.allow_overlay = false;
[email protected]bca159072012-12-04 00:52:44687
[email protected]cb7d6492013-10-03 02:40:04688 scoped_ptr<RenderPass> renderpass_in = RenderPass::Create();
689 renderpass_in->SetNew(
[email protected]0cd7d6f72014-08-22 14:50:51690 RenderPassId(1, 1), gfx::Rect(), gfx::Rect(), gfx::Transform());
[email protected]cb7d6492013-10-03 02:40:04691
[email protected]bf189f62012-12-18 03:42:11692 DelegatedFrameData frame_in;
[email protected]09831f7f2013-02-27 03:32:15693 frame_in.resource_list.push_back(arbitrary_resource1);
694 frame_in.resource_list.push_back(arbitrary_resource2);
[email protected]cb7d6492013-10-03 02:40:04695 frame_in.render_pass_list.push_back(renderpass_in.Pass());
[email protected]bca159072012-12-04 00:52:44696
[email protected]bf189f62012-12-18 03:42:11697 IPC::ParamTraits<DelegatedFrameData>::Write(&msg, frame_in);
[email protected]bca159072012-12-04 00:52:44698
[email protected]bf189f62012-12-18 03:42:11699 DelegatedFrameData frame_out;
[email protected]bca159072012-12-04 00:52:44700 PickleIterator iter(msg);
[email protected]bf189f62012-12-18 03:42:11701 EXPECT_TRUE(IPC::ParamTraits<DelegatedFrameData>::Read(&msg,
702 &iter, &frame_out));
[email protected]bca159072012-12-04 00:52:44703
[email protected]09831f7f2013-02-27 03:32:15704 ASSERT_EQ(2u, frame_out.resource_list.size());
705 Compare(arbitrary_resource1, frame_out.resource_list[0]);
706 Compare(arbitrary_resource2, frame_out.resource_list[1]);
[email protected]bca159072012-12-04 00:52:44707}
708
[email protected]cecc8342014-03-20 21:43:39709TEST_F(CCMessagesTest, SoftwareFrameData) {
710 cc::SoftwareFrameData frame_in;
711 frame_in.id = 3;
712 frame_in.size = gfx::Size(40, 20);
713 frame_in.damage_rect = gfx::Rect(5, 18, 31, 44);
[email protected]f1970082014-04-09 04:29:56714 frame_in.bitmap_id = cc::SharedBitmap::GenerateId();
[email protected]cecc8342014-03-20 21:43:39715
716 // Write the frame.
717 IPC::Message msg(1, 2, IPC::Message::PRIORITY_NORMAL);
718 IPC::ParamTraits<cc::SoftwareFrameData>::Write(&msg, frame_in);
719
720 // Read the frame.
721 cc::SoftwareFrameData frame_out;
722 PickleIterator iter(msg);
723 EXPECT_TRUE(
724 IPC::ParamTraits<SoftwareFrameData>::Read(&msg, &iter, &frame_out));
725 EXPECT_EQ(frame_in.id, frame_out.id);
726 EXPECT_EQ(frame_in.size.ToString(), frame_out.size.ToString());
727 EXPECT_EQ(frame_in.damage_rect.ToString(), frame_out.damage_rect.ToString());
[email protected]f1970082014-04-09 04:29:56728 EXPECT_EQ(frame_in.bitmap_id, frame_out.bitmap_id);
[email protected]cecc8342014-03-20 21:43:39729}
730
731TEST_F(CCMessagesTest, SoftwareFrameDataMaxInt) {
732 SoftwareFrameData frame_in;
733 frame_in.id = 3;
734 frame_in.size = gfx::Size(40, 20);
735 frame_in.damage_rect = gfx::Rect(5, 18, 31, 44);
[email protected]f1970082014-04-09 04:29:56736 frame_in.bitmap_id = cc::SharedBitmap::GenerateId();
[email protected]cecc8342014-03-20 21:43:39737
738 // Write the SoftwareFrameData by hand, make sure it works.
739 {
740 IPC::Message msg(1, 2, IPC::Message::PRIORITY_NORMAL);
741 IPC::WriteParam(&msg, frame_in.id);
742 IPC::WriteParam(&msg, frame_in.size);
743 IPC::WriteParam(&msg, frame_in.damage_rect);
[email protected]f1970082014-04-09 04:29:56744 IPC::WriteParam(&msg, frame_in.bitmap_id);
[email protected]cecc8342014-03-20 21:43:39745 SoftwareFrameData frame_out;
746 PickleIterator iter(msg);
747 EXPECT_TRUE(
748 IPC::ParamTraits<SoftwareFrameData>::Read(&msg, &iter, &frame_out));
749 }
750
751 // The size of the frame may overflow when multiplied together.
752 int max = std::numeric_limits<int>::max();
753 frame_in.size = gfx::Size(max, max);
754
755 // If size_t is larger than int, then int*int*4 can always fit in size_t.
756 bool expect_read = sizeof(size_t) >= sizeof(int) * 2;
757
758 // Write the SoftwareFrameData with the MaxInt size, if it causes overflow it
759 // should fail.
760 {
761 IPC::Message msg(1, 2, IPC::Message::PRIORITY_NORMAL);
762 IPC::WriteParam(&msg, frame_in.id);
763 IPC::WriteParam(&msg, frame_in.size);
764 IPC::WriteParam(&msg, frame_in.damage_rect);
[email protected]f1970082014-04-09 04:29:56765 IPC::WriteParam(&msg, frame_in.bitmap_id);
[email protected]cecc8342014-03-20 21:43:39766 SoftwareFrameData frame_out;
767 PickleIterator iter(msg);
768 EXPECT_EQ(
769 expect_read,
770 IPC::ParamTraits<SoftwareFrameData>::Read(&msg, &iter, &frame_out));
771 }
772}
773
[email protected]bca159072012-12-04 00:52:44774} // namespace
775} // namespace content