blob: c66546716ba47c5f25aca15426f192f22e530bd2 [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]7f0d825f2013-03-18 07:24:309#include "cc/output/compositor_frame.h"
[email protected]4934d362012-11-22 22:04:5310#include "ipc/ipc_message.h"
11#include "testing/gtest/include/gtest/gtest.h"
12
13using cc::CheckerboardDrawQuad;
[email protected]bf189f62012-12-18 03:42:1114using cc::DelegatedFrameData;
[email protected]4934d362012-11-22 22:04:5315using cc::DebugBorderDrawQuad;
16using cc::DrawQuad;
17using cc::IOSurfaceDrawQuad;
[email protected]9ee4d3a2013-03-27 17:43:1618using cc::PictureDrawQuad;
[email protected]4934d362012-11-22 22:04:5319using cc::RenderPass;
20using cc::RenderPassDrawQuad;
21using cc::ResourceProvider;
22using cc::SharedQuadState;
23using cc::SolidColorDrawQuad;
24using cc::TextureDrawQuad;
25using cc::TileDrawQuad;
[email protected]bca159072012-12-04 00:52:4426using cc::TransferableResource;
[email protected]4934d362012-11-22 22:04:5327using cc::StreamVideoDrawQuad;
28using cc::VideoLayerImpl;
29using cc::YUVVideoDrawQuad;
[email protected]c8686a02012-11-27 08:29:0030using gfx::Transform;
[email protected]4934d362012-11-22 22:04:5331using WebKit::WebFilterOperation;
32using WebKit::WebFilterOperations;
[email protected]4934d362012-11-22 22:04:5333
[email protected]bca159072012-12-04 00:52:4434namespace content {
35namespace {
36
[email protected]4934d362012-11-22 22:04:5337class CCMessagesTest : public testing::Test {
38 protected:
39 void Compare(const RenderPass* a, const RenderPass* b) {
40 EXPECT_EQ(a->id, b->id);
41 EXPECT_EQ(a->output_rect.ToString(), b->output_rect.ToString());
42 EXPECT_EQ(a->damage_rect.ToString(), b->damage_rect.ToString());
43 EXPECT_EQ(a->transform_to_root_target, b->transform_to_root_target);
44 EXPECT_EQ(a->has_transparent_background, b->has_transparent_background);
45 EXPECT_EQ(a->has_occlusion_from_outside_target_surface,
46 b->has_occlusion_from_outside_target_surface);
[email protected]4934d362012-11-22 22:04:5347 }
48
49 void Compare(const SharedQuadState* a, const SharedQuadState* b) {
50 EXPECT_EQ(a->content_to_target_transform, b->content_to_target_transform);
[email protected]f902bf92013-03-04 18:33:2751 EXPECT_EQ(a->content_bounds, b->content_bounds);
[email protected]4934d362012-11-22 22:04:5352 EXPECT_EQ(a->visible_content_rect, b->visible_content_rect);
[email protected]4934d362012-11-22 22:04:5353 EXPECT_EQ(a->clip_rect, b->clip_rect);
54 EXPECT_EQ(a->is_clipped, b->is_clipped);
55 EXPECT_EQ(a->opacity, b->opacity);
56 }
57
58 void Compare(const DrawQuad* a, const DrawQuad* b) {
59 ASSERT_NE(DrawQuad::INVALID, a->material);
60 ASSERT_EQ(a->material, b->material);
61 EXPECT_EQ(a->rect.ToString(), b->rect.ToString());
62 EXPECT_EQ(a->opaque_rect.ToString(), b->opaque_rect.ToString());
63 EXPECT_EQ(a->visible_rect.ToString(), b->visible_rect.ToString());
64 EXPECT_EQ(a->needs_blending, b->needs_blending);
65
66 Compare(a->shared_quad_state, b->shared_quad_state);
67
68 switch (a->material) {
69 case DrawQuad::CHECKERBOARD:
70 Compare(CheckerboardDrawQuad::MaterialCast(a),
71 CheckerboardDrawQuad::MaterialCast(b));
72 break;
73 case DrawQuad::DEBUG_BORDER:
74 Compare(DebugBorderDrawQuad::MaterialCast(a),
75 DebugBorderDrawQuad::MaterialCast(b));
76 break;
77 case DrawQuad::IO_SURFACE_CONTENT:
78 Compare(IOSurfaceDrawQuad::MaterialCast(a),
79 IOSurfaceDrawQuad::MaterialCast(b));
80 break;
[email protected]9ee4d3a2013-03-27 17:43:1681 case DrawQuad::PICTURE_CONTENT:
82 Compare(PictureDrawQuad::MaterialCast(a),
83 PictureDrawQuad::MaterialCast(b));
84 break;
[email protected]4934d362012-11-22 22:04:5385 case DrawQuad::RENDER_PASS:
86 Compare(RenderPassDrawQuad::MaterialCast(a),
87 RenderPassDrawQuad::MaterialCast(b));
88 break;
89 case DrawQuad::TEXTURE_CONTENT:
90 Compare(TextureDrawQuad::MaterialCast(a),
91 TextureDrawQuad::MaterialCast(b));
92 break;
93 case DrawQuad::TILED_CONTENT:
94 Compare(TileDrawQuad::MaterialCast(a),
95 TileDrawQuad::MaterialCast(b));
96 break;
97 case DrawQuad::SOLID_COLOR:
98 Compare(SolidColorDrawQuad::MaterialCast(a),
99 SolidColorDrawQuad::MaterialCast(b));
100 break;
101 case DrawQuad::STREAM_VIDEO_CONTENT:
102 Compare(StreamVideoDrawQuad::MaterialCast(a),
103 StreamVideoDrawQuad::MaterialCast(b));
104 break;
105 case DrawQuad::YUV_VIDEO_CONTENT:
106 Compare(YUVVideoDrawQuad::MaterialCast(a),
107 YUVVideoDrawQuad::MaterialCast(b));
108 break;
109 case DrawQuad::INVALID:
110 break;
111 }
112 }
113
114 void Compare(const CheckerboardDrawQuad* a, const CheckerboardDrawQuad* b) {
115 EXPECT_EQ(a->color, b->color);
116 }
117
118 void Compare(const DebugBorderDrawQuad* a, const DebugBorderDrawQuad* b) {
119 EXPECT_EQ(a->color, b->color);
120 EXPECT_EQ(a->width, b->width);
121 }
122
123 void Compare(const IOSurfaceDrawQuad* a, const IOSurfaceDrawQuad* b) {
124 EXPECT_EQ(a->io_surface_size.ToString(), b->io_surface_size.ToString());
125 EXPECT_EQ(a->io_surface_texture_id, b->io_surface_texture_id);
126 EXPECT_EQ(a->orientation, b->orientation);
127 }
128
129 void Compare(const RenderPassDrawQuad* a, const RenderPassDrawQuad* b) {
130 EXPECT_EQ(a->is_replica, b->is_replica);
131 EXPECT_EQ(a->mask_resource_id, b->mask_resource_id);
132 EXPECT_EQ(a->contents_changed_since_last_frame,
133 b->contents_changed_since_last_frame);
[email protected]458af1e2012-12-13 05:12:18134 EXPECT_EQ(a->mask_uv_rect.ToString(), b->mask_uv_rect.ToString());
[email protected]20062042012-12-21 22:16:36135 EXPECT_EQ(a->filters, b->filters);
136 EXPECT_EQ(a->filter, b->filter);
137 EXPECT_EQ(a->background_filters, b->background_filters);
[email protected]4934d362012-11-22 22:04:53138 }
139
140 void Compare(const SolidColorDrawQuad* a, const SolidColorDrawQuad* b) {
141 EXPECT_EQ(a->color, b->color);
142 }
143
144 void Compare(const StreamVideoDrawQuad* a, const StreamVideoDrawQuad* b) {
145 EXPECT_EQ(a->texture_id, b->texture_id);
146 EXPECT_EQ(a->matrix, b->matrix);
147 }
148
149 void Compare(const TextureDrawQuad* a, const TextureDrawQuad* b) {
150 EXPECT_EQ(a->resource_id, b->resource_id);
151 EXPECT_EQ(a->premultiplied_alpha, b->premultiplied_alpha);
[email protected]1fd555b2013-01-18 00:13:21152 EXPECT_EQ(a->uv_top_left, b->uv_top_left);
153 EXPECT_EQ(a->uv_bottom_right, b->uv_bottom_right);
[email protected]61df9d82013-01-30 02:32:42154 EXPECT_EQ(a->vertex_opacity[0], b->vertex_opacity[0]);
155 EXPECT_EQ(a->vertex_opacity[1], b->vertex_opacity[1]);
156 EXPECT_EQ(a->vertex_opacity[2], b->vertex_opacity[2]);
157 EXPECT_EQ(a->vertex_opacity[3], b->vertex_opacity[3]);
[email protected]4934d362012-11-22 22:04:53158 EXPECT_EQ(a->flipped, b->flipped);
159 }
160
161 void Compare(const TileDrawQuad* a, const TileDrawQuad* b) {
162 EXPECT_EQ(a->resource_id, b->resource_id);
163 EXPECT_EQ(a->tex_coord_rect, b->tex_coord_rect);
164 EXPECT_EQ(a->texture_size, b->texture_size);
165 EXPECT_EQ(a->swizzle_contents, b->swizzle_contents);
[email protected]4934d362012-11-22 22:04:53166 }
167
168 void Compare(const YUVVideoDrawQuad* a, const YUVVideoDrawQuad* b) {
169 EXPECT_EQ(a->tex_scale, b->tex_scale);
[email protected]4af49d542013-03-15 22:18:47170 EXPECT_EQ(a->y_plane.resource_id, b->y_plane.resource_id);
[email protected]4934d362012-11-22 22:04:53171 EXPECT_EQ(a->y_plane.size.ToString(), b->y_plane.size.ToString());
172 EXPECT_EQ(a->y_plane.format, b->y_plane.format);
[email protected]4af49d542013-03-15 22:18:47173 EXPECT_EQ(a->u_plane.resource_id, b->u_plane.resource_id);
[email protected]4934d362012-11-22 22:04:53174 EXPECT_EQ(a->u_plane.size.ToString(), b->u_plane.size.ToString());
175 EXPECT_EQ(a->u_plane.format, b->u_plane.format);
[email protected]4af49d542013-03-15 22:18:47176 EXPECT_EQ(a->v_plane.resource_id, b->v_plane.resource_id);
[email protected]4934d362012-11-22 22:04:53177 EXPECT_EQ(a->v_plane.size.ToString(), b->v_plane.size.ToString());
178 EXPECT_EQ(a->v_plane.format, b->v_plane.format);
179 }
[email protected]bca159072012-12-04 00:52:44180
181 void Compare(const TransferableResource& a, const TransferableResource& b) {
182 EXPECT_EQ(a.id, b.id);
[email protected]09831f7f2013-02-27 03:32:15183 EXPECT_EQ(a.sync_point, b.sync_point);
[email protected]bca159072012-12-04 00:52:44184 EXPECT_EQ(a.format, b.format);
[email protected]80189292013-02-28 01:59:36185 EXPECT_EQ(a.filter, b.filter);
[email protected]bca159072012-12-04 00:52:44186 EXPECT_EQ(a.size.ToString(), b.size.ToString());
187 for (size_t i = 0; i < arraysize(a.mailbox.name); ++i)
188 EXPECT_EQ(a.mailbox.name[i], b.mailbox.name[i]);
189 }
[email protected]4934d362012-11-22 22:04:53190};
191
192TEST_F(CCMessagesTest, AllQuads) {
193 IPC::Message msg(1, 2, IPC::Message::PRIORITY_NORMAL);
194
[email protected]c8686a02012-11-27 08:29:00195 Transform arbitrary_matrix;
196 arbitrary_matrix.Scale(3, 3);
197 arbitrary_matrix.Translate(-5, 20);
198 arbitrary_matrix.Rotate(15);
[email protected]4934d362012-11-22 22:04:53199 gfx::Rect arbitrary_rect1(-5, 9, 3, 15);
200 gfx::Rect arbitrary_rect2(40, 23, 11, 7);
201 gfx::Rect arbitrary_rect3(7, -53, 22, 19);
202 gfx::Size arbitrary_size1(15, 19);
203 gfx::Size arbitrary_size2(3, 99);
204 gfx::Size arbitrary_size3(75, 1281);
205 gfx::RectF arbitrary_rectf1(4.2f, -922.1f, 15.6f, 29.5f);
206 gfx::SizeF arbitrary_sizef1(15.2f, 104.6f);
[email protected]61df9d82013-01-30 02:32:42207 gfx::PointF arbitrary_pointf1(31.4f, 15.9f);
208 gfx::PointF arbitrary_pointf2(26.5f, -35.8f);
[email protected]4934d362012-11-22 22:04:53209 float arbitrary_float1 = 0.7f;
210 float arbitrary_float2 = 0.3f;
211 float arbitrary_float3 = 0.9f;
[email protected]61df9d82013-01-30 02:32:42212 float arbitrary_float_array[4] = {3.5f, 6.2f, 9.3f, 12.3f};
[email protected]4934d362012-11-22 22:04:53213 bool arbitrary_bool1 = true;
214 bool arbitrary_bool2 = false;
[email protected]61df9d82013-01-30 02:32:42215 bool arbitrary_bool3 = true;
[email protected]4934d362012-11-22 22:04:53216 int arbitrary_int = 5;
217 SkColor arbitrary_color = SkColorSetARGB(25, 36, 47, 58);
218 IOSurfaceDrawQuad::Orientation arbitrary_orientation =
219 IOSurfaceDrawQuad::UNFLIPPED;
220 RenderPass::Id arbitrary_id(10, 14);
221 ResourceProvider::ResourceId arbitrary_resourceid = 55;
222
223 VideoLayerImpl::FramePlane arbitrary_plane1;
[email protected]4af49d542013-03-15 22:18:47224 arbitrary_plane1.resource_id = arbitrary_resourceid;
[email protected]4934d362012-11-22 22:04:53225 arbitrary_plane1.size = arbitrary_size1;
226 arbitrary_plane1.format = arbitrary_int;
227
228 VideoLayerImpl::FramePlane arbitrary_plane2;
[email protected]4af49d542013-03-15 22:18:47229 arbitrary_plane2.resource_id = arbitrary_resourceid;
[email protected]4934d362012-11-22 22:04:53230 arbitrary_plane2.size = arbitrary_size2;
231 arbitrary_plane2.format = arbitrary_int;
232
233 VideoLayerImpl::FramePlane arbitrary_plane3;
[email protected]4af49d542013-03-15 22:18:47234 arbitrary_plane3.resource_id = arbitrary_resourceid;
[email protected]4934d362012-11-22 22:04:53235 arbitrary_plane3.size = arbitrary_size3;
236 arbitrary_plane3.format = arbitrary_int;
237
238 WebFilterOperations arbitrary_filters1;
239 arbitrary_filters1.append(WebFilterOperation::createGrayscaleFilter(
240 arbitrary_float1));
241
242 WebFilterOperations arbitrary_filters2;
243 arbitrary_filters2.append(WebFilterOperation::createBrightnessFilter(
244 arbitrary_float2));
245
[email protected]1940c4e2012-12-04 05:08:15246 // TODO(danakj): filter is not serialized.
247 skia::RefPtr<SkImageFilter> arbitrary_filter;
248
[email protected]4934d362012-11-22 22:04:53249 scoped_ptr<SharedQuadState> shared_state1_in = SharedQuadState::Create();
250 shared_state1_in->SetAll(arbitrary_matrix,
[email protected]f902bf92013-03-04 18:33:27251 arbitrary_size1,
[email protected]4934d362012-11-22 22:04:53252 arbitrary_rect1,
253 arbitrary_rect2,
[email protected]4934d362012-11-22 22:04:53254 arbitrary_bool1,
255 arbitrary_float1);
256 scoped_ptr<SharedQuadState> shared_state1_cmp = shared_state1_in->Copy();
257
258 scoped_ptr<CheckerboardDrawQuad> checkerboard_in =
259 CheckerboardDrawQuad::Create();
260 checkerboard_in->SetAll(shared_state1_in.get(),
261 arbitrary_rect1,
262 arbitrary_rect2,
263 arbitrary_rect3,
264 arbitrary_bool1,
265 arbitrary_color);
266 scoped_ptr<DrawQuad> checkerboard_cmp = checkerboard_in->Copy(
267 checkerboard_in->shared_quad_state);
268
269 scoped_ptr<DebugBorderDrawQuad> debugborder_in =
270 DebugBorderDrawQuad::Create();
271 debugborder_in->SetAll(shared_state1_in.get(),
272 arbitrary_rect3,
273 arbitrary_rect1,
274 arbitrary_rect2,
275 arbitrary_bool1,
276 arbitrary_color,
277 arbitrary_int);
278 scoped_ptr<DrawQuad> debugborder_cmp = debugborder_in->Copy(
279 debugborder_in->shared_quad_state);
280
281 scoped_ptr<IOSurfaceDrawQuad> iosurface_in =
282 IOSurfaceDrawQuad::Create();
283 iosurface_in->SetAll(shared_state1_in.get(),
284 arbitrary_rect2,
285 arbitrary_rect3,
286 arbitrary_rect1,
287 arbitrary_bool1,
288 arbitrary_size1,
289 arbitrary_int,
290 arbitrary_orientation);
291 scoped_ptr<DrawQuad> iosurface_cmp = iosurface_in->Copy(
292 iosurface_in->shared_quad_state);
293
294 scoped_ptr<RenderPassDrawQuad> renderpass_in =
295 RenderPassDrawQuad::Create();
296 renderpass_in->SetAll(shared_state1_in.get(),
297 arbitrary_rect1,
298 arbitrary_rect2,
299 arbitrary_rect3,
300 arbitrary_bool1,
301 arbitrary_id,
302 arbitrary_bool2,
303 arbitrary_resourceid,
304 arbitrary_rect1,
[email protected]20062042012-12-21 22:16:36305 arbitrary_rectf1,
306 arbitrary_filters1,
307 arbitrary_filter, // TODO(piman): not serialized.
308 arbitrary_filters2);
[email protected]4934d362012-11-22 22:04:53309 scoped_ptr<RenderPassDrawQuad> renderpass_cmp = renderpass_in->Copy(
310 renderpass_in->shared_quad_state, renderpass_in->render_pass_id);
311
312 scoped_ptr<SharedQuadState> shared_state2_in = SharedQuadState::Create();
313 shared_state2_in->SetAll(arbitrary_matrix,
[email protected]f902bf92013-03-04 18:33:27314 arbitrary_size2,
[email protected]4934d362012-11-22 22:04:53315 arbitrary_rect2,
316 arbitrary_rect3,
[email protected]4934d362012-11-22 22:04:53317 arbitrary_bool1,
318 arbitrary_float2);
319 scoped_ptr<SharedQuadState> shared_state2_cmp = shared_state2_in->Copy();
320
321 scoped_ptr<SharedQuadState> shared_state3_in = SharedQuadState::Create();
322 shared_state3_in->SetAll(arbitrary_matrix,
[email protected]f902bf92013-03-04 18:33:27323 arbitrary_size3,
[email protected]4934d362012-11-22 22:04:53324 arbitrary_rect3,
325 arbitrary_rect1,
[email protected]4934d362012-11-22 22:04:53326 arbitrary_bool1,
327 arbitrary_float3);
328 scoped_ptr<SharedQuadState> shared_state3_cmp = shared_state3_in->Copy();
329
330 scoped_ptr<SolidColorDrawQuad> solidcolor_in =
331 SolidColorDrawQuad::Create();
332 solidcolor_in->SetAll(shared_state1_in.get(),
333 arbitrary_rect3,
334 arbitrary_rect1,
335 arbitrary_rect2,
336 arbitrary_bool1,
337 arbitrary_color);
338 scoped_ptr<DrawQuad> solidcolor_cmp = solidcolor_in->Copy(
339 solidcolor_in->shared_quad_state);
340
341 scoped_ptr<StreamVideoDrawQuad> streamvideo_in =
342 StreamVideoDrawQuad::Create();
343 streamvideo_in->SetAll(shared_state1_in.get(),
344 arbitrary_rect2,
345 arbitrary_rect3,
346 arbitrary_rect1,
347 arbitrary_bool1,
348 arbitrary_int,
349 arbitrary_matrix);
350 scoped_ptr<DrawQuad> streamvideo_cmp = streamvideo_in->Copy(
351 streamvideo_in->shared_quad_state);
352
[email protected]61df9d82013-01-30 02:32:42353 scoped_ptr<TextureDrawQuad> texture_in = TextureDrawQuad::Create();
354 texture_in->SetAll(shared_state1_in.get(),
355 arbitrary_rect2,
356 arbitrary_rect3,
357 arbitrary_rect1,
358 arbitrary_bool1,
359 arbitrary_resourceid,
360 arbitrary_bool2,
361 arbitrary_pointf1,
362 arbitrary_pointf2,
363 arbitrary_float_array,
364 arbitrary_bool3);
365 scoped_ptr<DrawQuad> texture_cmp = texture_in->Copy(
366 texture_in->shared_quad_state);
367
368 scoped_ptr<TileDrawQuad> tile_in = TileDrawQuad::Create();
369 tile_in->SetAll(shared_state1_in.get(),
370 arbitrary_rect2,
371 arbitrary_rect3,
372 arbitrary_rect1,
373 arbitrary_bool1,
374 arbitrary_resourceid,
375 arbitrary_rectf1,
376 arbitrary_size1,
[email protected]f902bf92013-03-04 18:33:27377 arbitrary_bool2);
[email protected]61df9d82013-01-30 02:32:42378 scoped_ptr<DrawQuad> tile_cmp = tile_in->Copy(
379 tile_in->shared_quad_state);
380
[email protected]4934d362012-11-22 22:04:53381 scoped_ptr<YUVVideoDrawQuad> yuvvideo_in =
382 YUVVideoDrawQuad::Create();
383 yuvvideo_in->SetAll(shared_state1_in.get(),
384 arbitrary_rect1,
385 arbitrary_rect2,
386 arbitrary_rect3,
387 arbitrary_bool1,
388 arbitrary_sizef1,
389 arbitrary_plane1,
390 arbitrary_plane2,
391 arbitrary_plane3);
392 scoped_ptr<DrawQuad> yuvvideo_cmp = yuvvideo_in->Copy(
393 yuvvideo_in->shared_quad_state);
394
395 scoped_ptr<RenderPass> pass_in = RenderPass::Create();
396 pass_in->SetAll(arbitrary_id,
397 arbitrary_rect1,
398 arbitrary_rectf1,
399 arbitrary_matrix,
400 arbitrary_bool1,
[email protected]20062042012-12-21 22:16:36401 arbitrary_bool2);
[email protected]4934d362012-11-22 22:04:53402
[email protected]ead39c52013-01-09 07:22:45403 pass_in->shared_quad_state_list.push_back(shared_state1_in.Pass());
404 pass_in->quad_list.push_back(checkerboard_in.PassAs<DrawQuad>());
405 pass_in->quad_list.push_back(debugborder_in.PassAs<DrawQuad>());
406 pass_in->quad_list.push_back(iosurface_in.PassAs<DrawQuad>());
407 pass_in->quad_list.push_back(renderpass_in.PassAs<DrawQuad>());
408 pass_in->shared_quad_state_list.push_back(shared_state2_in.Pass());
409 pass_in->shared_quad_state_list.push_back(shared_state3_in.Pass());
410 pass_in->quad_list.push_back(solidcolor_in.PassAs<DrawQuad>());
411 pass_in->quad_list.push_back(streamvideo_in.PassAs<DrawQuad>());
[email protected]61df9d82013-01-30 02:32:42412 pass_in->quad_list.push_back(texture_in.PassAs<DrawQuad>());
413 pass_in->quad_list.push_back(tile_in.PassAs<DrawQuad>());
[email protected]ead39c52013-01-09 07:22:45414 pass_in->quad_list.push_back(yuvvideo_in.PassAs<DrawQuad>());
[email protected]4934d362012-11-22 22:04:53415
416 scoped_ptr<RenderPass> pass_cmp = RenderPass::Create();
417 pass_cmp->SetAll(arbitrary_id,
418 arbitrary_rect1,
419 arbitrary_rectf1,
420 arbitrary_matrix,
421 arbitrary_bool1,
[email protected]20062042012-12-21 22:16:36422 arbitrary_bool2);
[email protected]4934d362012-11-22 22:04:53423
[email protected]ead39c52013-01-09 07:22:45424 pass_cmp->shared_quad_state_list.push_back(shared_state1_cmp.Pass());
425 pass_cmp->quad_list.push_back(checkerboard_cmp.PassAs<DrawQuad>());
426 pass_cmp->quad_list.push_back(debugborder_cmp.PassAs<DrawQuad>());
427 pass_cmp->quad_list.push_back(iosurface_cmp.PassAs<DrawQuad>());
428 pass_cmp->quad_list.push_back(renderpass_cmp.PassAs<DrawQuad>());
429 pass_cmp->shared_quad_state_list.push_back(shared_state2_cmp.Pass());
430 pass_cmp->shared_quad_state_list.push_back(shared_state3_cmp.Pass());
431 pass_cmp->quad_list.push_back(solidcolor_cmp.PassAs<DrawQuad>());
432 pass_cmp->quad_list.push_back(streamvideo_cmp.PassAs<DrawQuad>());
[email protected]61df9d82013-01-30 02:32:42433 pass_cmp->quad_list.push_back(texture_cmp.PassAs<DrawQuad>());
434 pass_cmp->quad_list.push_back(tile_cmp.PassAs<DrawQuad>());
[email protected]ead39c52013-01-09 07:22:45435 pass_cmp->quad_list.push_back(yuvvideo_cmp.PassAs<DrawQuad>());
[email protected]4934d362012-11-22 22:04:53436
437 // Make sure the in and cmp RenderPasses match.
438 Compare(pass_cmp.get(), pass_in.get());
439 ASSERT_EQ(3u, pass_in->shared_quad_state_list.size());
[email protected]61df9d82013-01-30 02:32:42440 ASSERT_EQ(9u, pass_in->quad_list.size());
[email protected]4934d362012-11-22 22:04:53441 for (size_t i = 0; i < 3; ++i) {
442 Compare(pass_cmp->shared_quad_state_list[i],
443 pass_in->shared_quad_state_list[i]);
444 }
[email protected]61df9d82013-01-30 02:32:42445 for (size_t i = 0; i < pass_in->quad_list.size(); ++i)
[email protected]4934d362012-11-22 22:04:53446 Compare(pass_cmp->quad_list[i], pass_in->quad_list[i]);
[email protected]61df9d82013-01-30 02:32:42447 for (size_t i = 1; i < pass_in->quad_list.size(); ++i) {
[email protected]4934d362012-11-22 22:04:53448 bool same_shared_quad_state_cmp =
449 pass_cmp->quad_list[i]->shared_quad_state ==
450 pass_cmp->quad_list[i - 1]->shared_quad_state;
451 bool same_shared_quad_state_in =
452 pass_in->quad_list[i]->shared_quad_state ==
453 pass_in->quad_list[i - 1]->shared_quad_state;
454 EXPECT_EQ(same_shared_quad_state_cmp, same_shared_quad_state_in);
455 }
456
[email protected]bf189f62012-12-18 03:42:11457 DelegatedFrameData frame_in;
[email protected]ead39c52013-01-09 07:22:45458 frame_in.render_pass_list.push_back(pass_in.Pass());
[email protected]4934d362012-11-22 22:04:53459
[email protected]bf189f62012-12-18 03:42:11460 IPC::ParamTraits<DelegatedFrameData>::Write(&msg, frame_in);
[email protected]bca159072012-12-04 00:52:44461
[email protected]bf189f62012-12-18 03:42:11462 DelegatedFrameData frame_out;
[email protected]4934d362012-11-22 22:04:53463 PickleIterator iter(msg);
[email protected]bf189f62012-12-18 03:42:11464 EXPECT_TRUE(IPC::ParamTraits<DelegatedFrameData>::Read(&msg,
465 &iter, &frame_out));
[email protected]bca159072012-12-04 00:52:44466
[email protected]4934d362012-11-22 22:04:53467 // Make sure the out and cmp RenderPasses match.
[email protected]ead39c52013-01-09 07:22:45468 scoped_ptr<RenderPass> pass_out = frame_out.render_pass_list.take(
469 frame_out.render_pass_list.begin());
[email protected]4934d362012-11-22 22:04:53470 Compare(pass_cmp.get(), pass_out.get());
471 ASSERT_EQ(3u, pass_out->shared_quad_state_list.size());
[email protected]61df9d82013-01-30 02:32:42472 ASSERT_EQ(9u, pass_out->quad_list.size());
[email protected]4934d362012-11-22 22:04:53473 for (size_t i = 0; i < 3; ++i) {
474 Compare(pass_cmp->shared_quad_state_list[i],
475 pass_out->shared_quad_state_list[i]);
476 }
[email protected]61df9d82013-01-30 02:32:42477 for (size_t i = 0; i < pass_out->quad_list.size(); ++i)
[email protected]4934d362012-11-22 22:04:53478 Compare(pass_cmp->quad_list[i], pass_out->quad_list[i]);
[email protected]61df9d82013-01-30 02:32:42479 for (size_t i = 1; i < pass_out->quad_list.size(); ++i) {
[email protected]4934d362012-11-22 22:04:53480 bool same_shared_quad_state_cmp =
481 pass_cmp->quad_list[i]->shared_quad_state ==
482 pass_cmp->quad_list[i - 1]->shared_quad_state;
483 bool same_shared_quad_state_out =
484 pass_out->quad_list[i]->shared_quad_state ==
485 pass_out->quad_list[i - 1]->shared_quad_state;
486 EXPECT_EQ(same_shared_quad_state_cmp, same_shared_quad_state_out);
487 }
488}
[email protected]bca159072012-12-04 00:52:44489
490TEST_F(CCMessagesTest, Resources) {
491 IPC::Message msg(1, 2, IPC::Message::PRIORITY_NORMAL);
492 gfx::Size arbitrary_size(757, 1281);
[email protected]09831f7f2013-02-27 03:32:15493 unsigned int arbitrary_uint1 = 71234838;
494 unsigned int arbitrary_uint2 = 53589793;
[email protected]bca159072012-12-04 00:52:44495
496 GLbyte arbitrary_mailbox1[64] = {
497 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0,
498 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0,
499 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0,
500 1, 2, 3, 4
501 };
502
503 GLbyte arbitrary_mailbox2[64] = {
504 0, 9, 8, 7, 6, 5, 4, 3, 2, 1, 9, 7, 5, 3, 1, 2, 4, 6, 8, 0,
505 0, 9, 8, 7, 6, 5, 4, 3, 2, 1, 9, 7, 5, 3, 1, 2, 4, 6, 8, 0,
506 0, 9, 8, 7, 6, 5, 4, 3, 2, 1, 9, 7, 5, 3, 1, 2, 4, 6, 8, 0,
507 0, 9, 8, 7
508 };
509
510 TransferableResource arbitrary_resource1;
511 arbitrary_resource1.id = 2178312;
[email protected]09831f7f2013-02-27 03:32:15512 arbitrary_resource1.sync_point = arbitrary_uint1;
[email protected]bca159072012-12-04 00:52:44513 arbitrary_resource1.format = 7;
[email protected]80189292013-02-28 01:59:36514 arbitrary_resource1.filter = 53;
[email protected]bca159072012-12-04 00:52:44515 arbitrary_resource1.size = gfx::Size(37189, 123123);
[email protected]1aca0092013-03-04 22:46:03516 arbitrary_resource1.mailbox.SetName(arbitrary_mailbox1);
[email protected]bca159072012-12-04 00:52:44517
518 TransferableResource arbitrary_resource2;
519 arbitrary_resource2.id = 789132;
[email protected]09831f7f2013-02-27 03:32:15520 arbitrary_resource1.sync_point = arbitrary_uint2;
[email protected]bca159072012-12-04 00:52:44521 arbitrary_resource2.format = 30;
[email protected]80189292013-02-28 01:59:36522 arbitrary_resource1.filter = 47;
[email protected]bca159072012-12-04 00:52:44523 arbitrary_resource2.size = gfx::Size(89123, 23789);
[email protected]1aca0092013-03-04 22:46:03524 arbitrary_resource2.mailbox.SetName(arbitrary_mailbox2);
[email protected]bca159072012-12-04 00:52:44525
[email protected]bf189f62012-12-18 03:42:11526 DelegatedFrameData frame_in;
[email protected]09831f7f2013-02-27 03:32:15527 frame_in.resource_list.push_back(arbitrary_resource1);
528 frame_in.resource_list.push_back(arbitrary_resource2);
[email protected]bca159072012-12-04 00:52:44529
[email protected]bf189f62012-12-18 03:42:11530 IPC::ParamTraits<DelegatedFrameData>::Write(&msg, frame_in);
[email protected]bca159072012-12-04 00:52:44531
[email protected]bf189f62012-12-18 03:42:11532 DelegatedFrameData frame_out;
[email protected]bca159072012-12-04 00:52:44533 PickleIterator iter(msg);
[email protected]bf189f62012-12-18 03:42:11534 EXPECT_TRUE(IPC::ParamTraits<DelegatedFrameData>::Read(&msg,
535 &iter, &frame_out));
[email protected]bca159072012-12-04 00:52:44536
[email protected]09831f7f2013-02-27 03:32:15537 ASSERT_EQ(2u, frame_out.resource_list.size());
538 Compare(arbitrary_resource1, frame_out.resource_list[0]);
539 Compare(arbitrary_resource2, frame_out.resource_list[1]);
[email protected]bca159072012-12-04 00:52:44540}
541
542} // namespace
543} // namespace content