blob: 69a5f253ca54610e5d3dd69e607ddf0f5fe846eb [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]bca159072012-12-04 00:52:449#include "cc/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;
18using cc::RenderPass;
19using cc::RenderPassDrawQuad;
20using cc::ResourceProvider;
21using cc::SharedQuadState;
22using cc::SolidColorDrawQuad;
23using cc::TextureDrawQuad;
24using cc::TileDrawQuad;
[email protected]bca159072012-12-04 00:52:4425using cc::TransferableResource;
[email protected]4934d362012-11-22 22:04:5326using cc::StreamVideoDrawQuad;
27using cc::VideoLayerImpl;
28using cc::YUVVideoDrawQuad;
[email protected]c8686a02012-11-27 08:29:0029using gfx::Transform;
[email protected]4934d362012-11-22 22:04:5330using WebKit::WebFilterOperation;
31using WebKit::WebFilterOperations;
[email protected]4934d362012-11-22 22:04:5332
[email protected]bca159072012-12-04 00:52:4433namespace content {
34namespace {
35
[email protected]4934d362012-11-22 22:04:5336class CCMessagesTest : public testing::Test {
37 protected:
38 void Compare(const RenderPass* a, const RenderPass* b) {
39 EXPECT_EQ(a->id, b->id);
40 EXPECT_EQ(a->output_rect.ToString(), b->output_rect.ToString());
41 EXPECT_EQ(a->damage_rect.ToString(), b->damage_rect.ToString());
42 EXPECT_EQ(a->transform_to_root_target, b->transform_to_root_target);
43 EXPECT_EQ(a->has_transparent_background, b->has_transparent_background);
44 EXPECT_EQ(a->has_occlusion_from_outside_target_surface,
45 b->has_occlusion_from_outside_target_surface);
[email protected]4934d362012-11-22 22:04:5346 }
47
48 void Compare(const SharedQuadState* a, const SharedQuadState* b) {
49 EXPECT_EQ(a->content_to_target_transform, b->content_to_target_transform);
50 EXPECT_EQ(a->visible_content_rect, b->visible_content_rect);
[email protected]4934d362012-11-22 22:04:5351 EXPECT_EQ(a->clip_rect, b->clip_rect);
52 EXPECT_EQ(a->is_clipped, b->is_clipped);
53 EXPECT_EQ(a->opacity, b->opacity);
54 }
55
56 void Compare(const DrawQuad* a, const DrawQuad* b) {
57 ASSERT_NE(DrawQuad::INVALID, a->material);
58 ASSERT_EQ(a->material, b->material);
59 EXPECT_EQ(a->rect.ToString(), b->rect.ToString());
60 EXPECT_EQ(a->opaque_rect.ToString(), b->opaque_rect.ToString());
61 EXPECT_EQ(a->visible_rect.ToString(), b->visible_rect.ToString());
62 EXPECT_EQ(a->needs_blending, b->needs_blending);
63
64 Compare(a->shared_quad_state, b->shared_quad_state);
65
66 switch (a->material) {
67 case DrawQuad::CHECKERBOARD:
68 Compare(CheckerboardDrawQuad::MaterialCast(a),
69 CheckerboardDrawQuad::MaterialCast(b));
70 break;
71 case DrawQuad::DEBUG_BORDER:
72 Compare(DebugBorderDrawQuad::MaterialCast(a),
73 DebugBorderDrawQuad::MaterialCast(b));
74 break;
75 case DrawQuad::IO_SURFACE_CONTENT:
76 Compare(IOSurfaceDrawQuad::MaterialCast(a),
77 IOSurfaceDrawQuad::MaterialCast(b));
78 break;
79 case DrawQuad::RENDER_PASS:
80 Compare(RenderPassDrawQuad::MaterialCast(a),
81 RenderPassDrawQuad::MaterialCast(b));
82 break;
83 case DrawQuad::TEXTURE_CONTENT:
84 Compare(TextureDrawQuad::MaterialCast(a),
85 TextureDrawQuad::MaterialCast(b));
86 break;
87 case DrawQuad::TILED_CONTENT:
88 Compare(TileDrawQuad::MaterialCast(a),
89 TileDrawQuad::MaterialCast(b));
90 break;
91 case DrawQuad::SOLID_COLOR:
92 Compare(SolidColorDrawQuad::MaterialCast(a),
93 SolidColorDrawQuad::MaterialCast(b));
94 break;
95 case DrawQuad::STREAM_VIDEO_CONTENT:
96 Compare(StreamVideoDrawQuad::MaterialCast(a),
97 StreamVideoDrawQuad::MaterialCast(b));
98 break;
99 case DrawQuad::YUV_VIDEO_CONTENT:
100 Compare(YUVVideoDrawQuad::MaterialCast(a),
101 YUVVideoDrawQuad::MaterialCast(b));
102 break;
103 case DrawQuad::INVALID:
104 break;
105 }
106 }
107
108 void Compare(const CheckerboardDrawQuad* a, const CheckerboardDrawQuad* b) {
109 EXPECT_EQ(a->color, b->color);
110 }
111
112 void Compare(const DebugBorderDrawQuad* a, const DebugBorderDrawQuad* b) {
113 EXPECT_EQ(a->color, b->color);
114 EXPECT_EQ(a->width, b->width);
115 }
116
117 void Compare(const IOSurfaceDrawQuad* a, const IOSurfaceDrawQuad* b) {
118 EXPECT_EQ(a->io_surface_size.ToString(), b->io_surface_size.ToString());
119 EXPECT_EQ(a->io_surface_texture_id, b->io_surface_texture_id);
120 EXPECT_EQ(a->orientation, b->orientation);
121 }
122
123 void Compare(const RenderPassDrawQuad* a, const RenderPassDrawQuad* b) {
124 EXPECT_EQ(a->is_replica, b->is_replica);
125 EXPECT_EQ(a->mask_resource_id, b->mask_resource_id);
126 EXPECT_EQ(a->contents_changed_since_last_frame,
127 b->contents_changed_since_last_frame);
[email protected]458af1e2012-12-13 05:12:18128 EXPECT_EQ(a->mask_uv_rect.ToString(), b->mask_uv_rect.ToString());
[email protected]20062042012-12-21 22:16:36129 EXPECT_EQ(a->filters, b->filters);
130 EXPECT_EQ(a->filter, b->filter);
131 EXPECT_EQ(a->background_filters, b->background_filters);
[email protected]4934d362012-11-22 22:04:53132 }
133
134 void Compare(const SolidColorDrawQuad* a, const SolidColorDrawQuad* b) {
135 EXPECT_EQ(a->color, b->color);
136 }
137
138 void Compare(const StreamVideoDrawQuad* a, const StreamVideoDrawQuad* b) {
139 EXPECT_EQ(a->texture_id, b->texture_id);
140 EXPECT_EQ(a->matrix, b->matrix);
141 }
142
143 void Compare(const TextureDrawQuad* a, const TextureDrawQuad* b) {
144 EXPECT_EQ(a->resource_id, b->resource_id);
145 EXPECT_EQ(a->premultiplied_alpha, b->premultiplied_alpha);
[email protected]1fd555b2013-01-18 00:13:21146 EXPECT_EQ(a->uv_top_left, b->uv_top_left);
147 EXPECT_EQ(a->uv_bottom_right, b->uv_bottom_right);
[email protected]61df9d82013-01-30 02:32:42148 EXPECT_EQ(a->vertex_opacity[0], b->vertex_opacity[0]);
149 EXPECT_EQ(a->vertex_opacity[1], b->vertex_opacity[1]);
150 EXPECT_EQ(a->vertex_opacity[2], b->vertex_opacity[2]);
151 EXPECT_EQ(a->vertex_opacity[3], b->vertex_opacity[3]);
[email protected]4934d362012-11-22 22:04:53152 EXPECT_EQ(a->flipped, b->flipped);
153 }
154
155 void Compare(const TileDrawQuad* a, const TileDrawQuad* b) {
156 EXPECT_EQ(a->resource_id, b->resource_id);
157 EXPECT_EQ(a->tex_coord_rect, b->tex_coord_rect);
158 EXPECT_EQ(a->texture_size, b->texture_size);
159 EXPECT_EQ(a->swizzle_contents, b->swizzle_contents);
160 EXPECT_EQ(a->left_edge_aa, b->left_edge_aa);
161 EXPECT_EQ(a->top_edge_aa, b->top_edge_aa);
162 EXPECT_EQ(a->right_edge_aa, b->right_edge_aa);
163 EXPECT_EQ(a->bottom_edge_aa, b->bottom_edge_aa);
164 }
165
166 void Compare(const YUVVideoDrawQuad* a, const YUVVideoDrawQuad* b) {
167 EXPECT_EQ(a->tex_scale, b->tex_scale);
168 EXPECT_EQ(a->y_plane.resourceId, b->y_plane.resourceId);
169 EXPECT_EQ(a->y_plane.size.ToString(), b->y_plane.size.ToString());
170 EXPECT_EQ(a->y_plane.format, b->y_plane.format);
171 EXPECT_EQ(a->u_plane.resourceId, b->u_plane.resourceId);
172 EXPECT_EQ(a->u_plane.size.ToString(), b->u_plane.size.ToString());
173 EXPECT_EQ(a->u_plane.format, b->u_plane.format);
174 EXPECT_EQ(a->v_plane.resourceId, b->v_plane.resourceId);
175 EXPECT_EQ(a->v_plane.size.ToString(), b->v_plane.size.ToString());
176 EXPECT_EQ(a->v_plane.format, b->v_plane.format);
177 }
[email protected]bca159072012-12-04 00:52:44178
179 void Compare(const TransferableResource& a, const TransferableResource& b) {
180 EXPECT_EQ(a.id, b.id);
181 EXPECT_EQ(a.format, b.format);
182 EXPECT_EQ(a.size.ToString(), b.size.ToString());
183 for (size_t i = 0; i < arraysize(a.mailbox.name); ++i)
184 EXPECT_EQ(a.mailbox.name[i], b.mailbox.name[i]);
185 }
[email protected]4934d362012-11-22 22:04:53186};
187
188TEST_F(CCMessagesTest, AllQuads) {
189 IPC::Message msg(1, 2, IPC::Message::PRIORITY_NORMAL);
190
[email protected]c8686a02012-11-27 08:29:00191 Transform arbitrary_matrix;
192 arbitrary_matrix.Scale(3, 3);
193 arbitrary_matrix.Translate(-5, 20);
194 arbitrary_matrix.Rotate(15);
[email protected]4934d362012-11-22 22:04:53195 gfx::Rect arbitrary_rect1(-5, 9, 3, 15);
196 gfx::Rect arbitrary_rect2(40, 23, 11, 7);
197 gfx::Rect arbitrary_rect3(7, -53, 22, 19);
198 gfx::Size arbitrary_size1(15, 19);
199 gfx::Size arbitrary_size2(3, 99);
200 gfx::Size arbitrary_size3(75, 1281);
201 gfx::RectF arbitrary_rectf1(4.2f, -922.1f, 15.6f, 29.5f);
202 gfx::SizeF arbitrary_sizef1(15.2f, 104.6f);
[email protected]61df9d82013-01-30 02:32:42203 gfx::PointF arbitrary_pointf1(31.4f, 15.9f);
204 gfx::PointF arbitrary_pointf2(26.5f, -35.8f);
[email protected]4934d362012-11-22 22:04:53205 float arbitrary_float1 = 0.7f;
206 float arbitrary_float2 = 0.3f;
207 float arbitrary_float3 = 0.9f;
[email protected]61df9d82013-01-30 02:32:42208 float arbitrary_float_array[4] = {3.5f, 6.2f, 9.3f, 12.3f};
[email protected]4934d362012-11-22 22:04:53209 bool arbitrary_bool1 = true;
210 bool arbitrary_bool2 = false;
[email protected]61df9d82013-01-30 02:32:42211 bool arbitrary_bool3 = true;
212 bool arbitrary_bool4 = true;
213 bool arbitrary_bool5 = false;
214 bool arbitrary_bool6 = true;
[email protected]4934d362012-11-22 22:04:53215 int arbitrary_int = 5;
216 SkColor arbitrary_color = SkColorSetARGB(25, 36, 47, 58);
217 IOSurfaceDrawQuad::Orientation arbitrary_orientation =
218 IOSurfaceDrawQuad::UNFLIPPED;
219 RenderPass::Id arbitrary_id(10, 14);
220 ResourceProvider::ResourceId arbitrary_resourceid = 55;
221
222 VideoLayerImpl::FramePlane arbitrary_plane1;
223 arbitrary_plane1.resourceId = arbitrary_resourceid;
224 arbitrary_plane1.size = arbitrary_size1;
225 arbitrary_plane1.format = arbitrary_int;
226
227 VideoLayerImpl::FramePlane arbitrary_plane2;
228 arbitrary_plane2.resourceId = arbitrary_resourceid;
229 arbitrary_plane2.size = arbitrary_size2;
230 arbitrary_plane2.format = arbitrary_int;
231
232 VideoLayerImpl::FramePlane arbitrary_plane3;
233 arbitrary_plane3.resourceId = arbitrary_resourceid;
234 arbitrary_plane3.size = arbitrary_size3;
235 arbitrary_plane3.format = arbitrary_int;
236
237 WebFilterOperations arbitrary_filters1;
238 arbitrary_filters1.append(WebFilterOperation::createGrayscaleFilter(
239 arbitrary_float1));
240
241 WebFilterOperations arbitrary_filters2;
242 arbitrary_filters2.append(WebFilterOperation::createBrightnessFilter(
243 arbitrary_float2));
244
[email protected]1940c4e2012-12-04 05:08:15245 // TODO(danakj): filter is not serialized.
246 skia::RefPtr<SkImageFilter> arbitrary_filter;
247
[email protected]4934d362012-11-22 22:04:53248 scoped_ptr<SharedQuadState> shared_state1_in = SharedQuadState::Create();
249 shared_state1_in->SetAll(arbitrary_matrix,
250 arbitrary_rect1,
251 arbitrary_rect2,
[email protected]4934d362012-11-22 22:04:53252 arbitrary_bool1,
253 arbitrary_float1);
254 scoped_ptr<SharedQuadState> shared_state1_cmp = shared_state1_in->Copy();
255
256 scoped_ptr<CheckerboardDrawQuad> checkerboard_in =
257 CheckerboardDrawQuad::Create();
258 checkerboard_in->SetAll(shared_state1_in.get(),
259 arbitrary_rect1,
260 arbitrary_rect2,
261 arbitrary_rect3,
262 arbitrary_bool1,
263 arbitrary_color);
264 scoped_ptr<DrawQuad> checkerboard_cmp = checkerboard_in->Copy(
265 checkerboard_in->shared_quad_state);
266
267 scoped_ptr<DebugBorderDrawQuad> debugborder_in =
268 DebugBorderDrawQuad::Create();
269 debugborder_in->SetAll(shared_state1_in.get(),
270 arbitrary_rect3,
271 arbitrary_rect1,
272 arbitrary_rect2,
273 arbitrary_bool1,
274 arbitrary_color,
275 arbitrary_int);
276 scoped_ptr<DrawQuad> debugborder_cmp = debugborder_in->Copy(
277 debugborder_in->shared_quad_state);
278
279 scoped_ptr<IOSurfaceDrawQuad> iosurface_in =
280 IOSurfaceDrawQuad::Create();
281 iosurface_in->SetAll(shared_state1_in.get(),
282 arbitrary_rect2,
283 arbitrary_rect3,
284 arbitrary_rect1,
285 arbitrary_bool1,
286 arbitrary_size1,
287 arbitrary_int,
288 arbitrary_orientation);
289 scoped_ptr<DrawQuad> iosurface_cmp = iosurface_in->Copy(
290 iosurface_in->shared_quad_state);
291
292 scoped_ptr<RenderPassDrawQuad> renderpass_in =
293 RenderPassDrawQuad::Create();
294 renderpass_in->SetAll(shared_state1_in.get(),
295 arbitrary_rect1,
296 arbitrary_rect2,
297 arbitrary_rect3,
298 arbitrary_bool1,
299 arbitrary_id,
300 arbitrary_bool2,
301 arbitrary_resourceid,
302 arbitrary_rect1,
[email protected]20062042012-12-21 22:16:36303 arbitrary_rectf1,
304 arbitrary_filters1,
305 arbitrary_filter, // TODO(piman): not serialized.
306 arbitrary_filters2);
[email protected]4934d362012-11-22 22:04:53307 scoped_ptr<RenderPassDrawQuad> renderpass_cmp = renderpass_in->Copy(
308 renderpass_in->shared_quad_state, renderpass_in->render_pass_id);
309
310 scoped_ptr<SharedQuadState> shared_state2_in = SharedQuadState::Create();
311 shared_state2_in->SetAll(arbitrary_matrix,
312 arbitrary_rect2,
313 arbitrary_rect3,
[email protected]4934d362012-11-22 22:04:53314 arbitrary_bool1,
315 arbitrary_float2);
316 scoped_ptr<SharedQuadState> shared_state2_cmp = shared_state2_in->Copy();
317
318 scoped_ptr<SharedQuadState> shared_state3_in = SharedQuadState::Create();
319 shared_state3_in->SetAll(arbitrary_matrix,
320 arbitrary_rect3,
321 arbitrary_rect1,
[email protected]4934d362012-11-22 22:04:53322 arbitrary_bool1,
323 arbitrary_float3);
324 scoped_ptr<SharedQuadState> shared_state3_cmp = shared_state3_in->Copy();
325
326 scoped_ptr<SolidColorDrawQuad> solidcolor_in =
327 SolidColorDrawQuad::Create();
328 solidcolor_in->SetAll(shared_state1_in.get(),
329 arbitrary_rect3,
330 arbitrary_rect1,
331 arbitrary_rect2,
332 arbitrary_bool1,
333 arbitrary_color);
334 scoped_ptr<DrawQuad> solidcolor_cmp = solidcolor_in->Copy(
335 solidcolor_in->shared_quad_state);
336
337 scoped_ptr<StreamVideoDrawQuad> streamvideo_in =
338 StreamVideoDrawQuad::Create();
339 streamvideo_in->SetAll(shared_state1_in.get(),
340 arbitrary_rect2,
341 arbitrary_rect3,
342 arbitrary_rect1,
343 arbitrary_bool1,
344 arbitrary_int,
345 arbitrary_matrix);
346 scoped_ptr<DrawQuad> streamvideo_cmp = streamvideo_in->Copy(
347 streamvideo_in->shared_quad_state);
348
[email protected]61df9d82013-01-30 02:32:42349 scoped_ptr<TextureDrawQuad> texture_in = TextureDrawQuad::Create();
350 texture_in->SetAll(shared_state1_in.get(),
351 arbitrary_rect2,
352 arbitrary_rect3,
353 arbitrary_rect1,
354 arbitrary_bool1,
355 arbitrary_resourceid,
356 arbitrary_bool2,
357 arbitrary_pointf1,
358 arbitrary_pointf2,
359 arbitrary_float_array,
360 arbitrary_bool3);
361 scoped_ptr<DrawQuad> texture_cmp = texture_in->Copy(
362 texture_in->shared_quad_state);
363
364 scoped_ptr<TileDrawQuad> tile_in = TileDrawQuad::Create();
365 tile_in->SetAll(shared_state1_in.get(),
366 arbitrary_rect2,
367 arbitrary_rect3,
368 arbitrary_rect1,
369 arbitrary_bool1,
370 arbitrary_resourceid,
371 arbitrary_rectf1,
372 arbitrary_size1,
373 arbitrary_bool2,
374 arbitrary_bool3,
375 arbitrary_bool4,
376 arbitrary_bool5,
377 arbitrary_bool6);
378 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]bca159072012-12-04 00:52:44458 frame_in.size = arbitrary_size1;
[email protected]ead39c52013-01-09 07:22:45459 frame_in.render_pass_list.push_back(pass_in.Pass());
[email protected]4934d362012-11-22 22:04:53460
[email protected]bf189f62012-12-18 03:42:11461 IPC::ParamTraits<DelegatedFrameData>::Write(&msg, frame_in);
[email protected]bca159072012-12-04 00:52:44462
[email protected]bf189f62012-12-18 03:42:11463 DelegatedFrameData frame_out;
[email protected]4934d362012-11-22 22:04:53464 PickleIterator iter(msg);
[email protected]bf189f62012-12-18 03:42:11465 EXPECT_TRUE(IPC::ParamTraits<DelegatedFrameData>::Read(&msg,
466 &iter, &frame_out));
[email protected]bca159072012-12-04 00:52:44467
468 EXPECT_EQ(arbitrary_size1, frame_out.size);
[email protected]4934d362012-11-22 22:04:53469
470 // Make sure the out and cmp RenderPasses match.
[email protected]ead39c52013-01-09 07:22:45471 scoped_ptr<RenderPass> pass_out = frame_out.render_pass_list.take(
472 frame_out.render_pass_list.begin());
[email protected]4934d362012-11-22 22:04:53473 Compare(pass_cmp.get(), pass_out.get());
474 ASSERT_EQ(3u, pass_out->shared_quad_state_list.size());
[email protected]61df9d82013-01-30 02:32:42475 ASSERT_EQ(9u, pass_out->quad_list.size());
[email protected]4934d362012-11-22 22:04:53476 for (size_t i = 0; i < 3; ++i) {
477 Compare(pass_cmp->shared_quad_state_list[i],
478 pass_out->shared_quad_state_list[i]);
479 }
[email protected]61df9d82013-01-30 02:32:42480 for (size_t i = 0; i < pass_out->quad_list.size(); ++i)
[email protected]4934d362012-11-22 22:04:53481 Compare(pass_cmp->quad_list[i], pass_out->quad_list[i]);
[email protected]61df9d82013-01-30 02:32:42482 for (size_t i = 1; i < pass_out->quad_list.size(); ++i) {
[email protected]4934d362012-11-22 22:04:53483 bool same_shared_quad_state_cmp =
484 pass_cmp->quad_list[i]->shared_quad_state ==
485 pass_cmp->quad_list[i - 1]->shared_quad_state;
486 bool same_shared_quad_state_out =
487 pass_out->quad_list[i]->shared_quad_state ==
488 pass_out->quad_list[i - 1]->shared_quad_state;
489 EXPECT_EQ(same_shared_quad_state_cmp, same_shared_quad_state_out);
490 }
491}
[email protected]bca159072012-12-04 00:52:44492
493TEST_F(CCMessagesTest, Resources) {
494 IPC::Message msg(1, 2, IPC::Message::PRIORITY_NORMAL);
495 gfx::Size arbitrary_size(757, 1281);
496 unsigned int arbitrary_uint = 71234838;
497
498 GLbyte arbitrary_mailbox1[64] = {
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, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0,
501 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0,
502 1, 2, 3, 4
503 };
504
505 GLbyte arbitrary_mailbox2[64] = {
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, 6, 5, 4, 3, 2, 1, 9, 7, 5, 3, 1, 2, 4, 6, 8, 0,
508 0, 9, 8, 7, 6, 5, 4, 3, 2, 1, 9, 7, 5, 3, 1, 2, 4, 6, 8, 0,
509 0, 9, 8, 7
510 };
511
512 TransferableResource arbitrary_resource1;
513 arbitrary_resource1.id = 2178312;
514 arbitrary_resource1.format = 7;
515 arbitrary_resource1.size = gfx::Size(37189, 123123);
516 arbitrary_resource1.mailbox.setName(arbitrary_mailbox1);
517
518 TransferableResource arbitrary_resource2;
519 arbitrary_resource2.id = 789132;
520 arbitrary_resource2.format = 30;
521 arbitrary_resource2.size = gfx::Size(89123, 23789);
522 arbitrary_resource2.mailbox.setName(arbitrary_mailbox2);
523
[email protected]bf189f62012-12-18 03:42:11524 DelegatedFrameData frame_in;
[email protected]bca159072012-12-04 00:52:44525 frame_in.size = arbitrary_size;
526
527 frame_in.resource_list.sync_point = arbitrary_uint;
528 frame_in.resource_list.resources.push_back(arbitrary_resource1);
529 frame_in.resource_list.resources.push_back(arbitrary_resource2);
530
[email protected]bf189f62012-12-18 03:42:11531 IPC::ParamTraits<DelegatedFrameData>::Write(&msg, frame_in);
[email protected]bca159072012-12-04 00:52:44532
[email protected]bf189f62012-12-18 03:42:11533 DelegatedFrameData frame_out;
[email protected]bca159072012-12-04 00:52:44534 PickleIterator iter(msg);
[email protected]bf189f62012-12-18 03:42:11535 EXPECT_TRUE(IPC::ParamTraits<DelegatedFrameData>::Read(&msg,
536 &iter, &frame_out));
[email protected]bca159072012-12-04 00:52:44537
538 EXPECT_EQ(arbitrary_size.ToString(), frame_out.size.ToString());
539 EXPECT_EQ(arbitrary_uint, frame_out.resource_list.sync_point);
540
541 EXPECT_EQ(2u, frame_out.resource_list.resources.size());
542 Compare(arbitrary_resource1, frame_out.resource_list.resources[0]);
543 Compare(arbitrary_resource2, frame_out.resource_list.resources[1]);
544}
545
546} // namespace
547} // namespace content