blob: 853175bfaa70d458d4539688f7ebc4f4ff540b9e [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]4934d362012-11-22 22:04:5312#include "ipc/ipc_message.h"
13#include "testing/gtest/include/gtest/gtest.h"
[email protected]645a47f22013-09-26 05:42:3214#include "third_party/khronos/GLES2/gl2ext.h"
[email protected]a1765672013-08-12 23:45:0215#include "third_party/skia/include/effects/SkBlurImageFilter.h"
[email protected]4934d362012-11-22 22:04:5316
17using cc::CheckerboardDrawQuad;
[email protected]bf189f62012-12-18 03:42:1118using cc::DelegatedFrameData;
[email protected]4934d362012-11-22 22:04:5319using cc::DebugBorderDrawQuad;
20using cc::DrawQuad;
[email protected]ae6b1a72013-06-25 18:49:2921using cc::FilterOperation;
22using cc::FilterOperations;
[email protected]4934d362012-11-22 22:04:5323using cc::IOSurfaceDrawQuad;
[email protected]9ee4d3a2013-03-27 17:43:1624using cc::PictureDrawQuad;
[email protected]4934d362012-11-22 22:04:5325using cc::RenderPass;
26using cc::RenderPassDrawQuad;
27using cc::ResourceProvider;
28using cc::SharedQuadState;
29using cc::SolidColorDrawQuad;
30using cc::TextureDrawQuad;
31using cc::TileDrawQuad;
[email protected]bca159072012-12-04 00:52:4432using cc::TransferableResource;
[email protected]4934d362012-11-22 22:04:5333using cc::StreamVideoDrawQuad;
34using cc::VideoLayerImpl;
35using cc::YUVVideoDrawQuad;
[email protected]c8686a02012-11-27 08:29:0036using gfx::Transform;
[email protected]4934d362012-11-22 22:04:5337
[email protected]bca159072012-12-04 00:52:4438namespace content {
39namespace {
40
[email protected]4934d362012-11-22 22:04:5341class CCMessagesTest : public testing::Test {
42 protected:
43 void Compare(const RenderPass* a, const RenderPass* b) {
44 EXPECT_EQ(a->id, b->id);
45 EXPECT_EQ(a->output_rect.ToString(), b->output_rect.ToString());
46 EXPECT_EQ(a->damage_rect.ToString(), b->damage_rect.ToString());
47 EXPECT_EQ(a->transform_to_root_target, b->transform_to_root_target);
48 EXPECT_EQ(a->has_transparent_background, b->has_transparent_background);
[email protected]4934d362012-11-22 22:04:5349 }
50
51 void Compare(const SharedQuadState* a, const SharedQuadState* b) {
52 EXPECT_EQ(a->content_to_target_transform, b->content_to_target_transform);
[email protected]f902bf92013-03-04 18:33:2753 EXPECT_EQ(a->content_bounds, b->content_bounds);
[email protected]4934d362012-11-22 22:04:5354 EXPECT_EQ(a->visible_content_rect, b->visible_content_rect);
[email protected]4934d362012-11-22 22:04:5355 EXPECT_EQ(a->clip_rect, b->clip_rect);
56 EXPECT_EQ(a->is_clipped, b->is_clipped);
57 EXPECT_EQ(a->opacity, b->opacity);
58 }
59
60 void Compare(const DrawQuad* a, const DrawQuad* b) {
61 ASSERT_NE(DrawQuad::INVALID, a->material);
62 ASSERT_EQ(a->material, b->material);
63 EXPECT_EQ(a->rect.ToString(), b->rect.ToString());
64 EXPECT_EQ(a->opaque_rect.ToString(), b->opaque_rect.ToString());
65 EXPECT_EQ(a->visible_rect.ToString(), b->visible_rect.ToString());
66 EXPECT_EQ(a->needs_blending, b->needs_blending);
67
68 Compare(a->shared_quad_state, b->shared_quad_state);
69
70 switch (a->material) {
71 case DrawQuad::CHECKERBOARD:
72 Compare(CheckerboardDrawQuad::MaterialCast(a),
73 CheckerboardDrawQuad::MaterialCast(b));
74 break;
75 case DrawQuad::DEBUG_BORDER:
76 Compare(DebugBorderDrawQuad::MaterialCast(a),
77 DebugBorderDrawQuad::MaterialCast(b));
78 break;
79 case DrawQuad::IO_SURFACE_CONTENT:
80 Compare(IOSurfaceDrawQuad::MaterialCast(a),
81 IOSurfaceDrawQuad::MaterialCast(b));
82 break;
[email protected]9ee4d3a2013-03-27 17:43:1683 case DrawQuad::PICTURE_CONTENT:
84 Compare(PictureDrawQuad::MaterialCast(a),
85 PictureDrawQuad::MaterialCast(b));
86 break;
[email protected]4934d362012-11-22 22:04:5387 case DrawQuad::RENDER_PASS:
88 Compare(RenderPassDrawQuad::MaterialCast(a),
89 RenderPassDrawQuad::MaterialCast(b));
90 break;
91 case DrawQuad::TEXTURE_CONTENT:
92 Compare(TextureDrawQuad::MaterialCast(a),
93 TextureDrawQuad::MaterialCast(b));
94 break;
95 case DrawQuad::TILED_CONTENT:
96 Compare(TileDrawQuad::MaterialCast(a),
97 TileDrawQuad::MaterialCast(b));
98 break;
99 case DrawQuad::SOLID_COLOR:
100 Compare(SolidColorDrawQuad::MaterialCast(a),
101 SolidColorDrawQuad::MaterialCast(b));
102 break;
103 case DrawQuad::STREAM_VIDEO_CONTENT:
104 Compare(StreamVideoDrawQuad::MaterialCast(a),
105 StreamVideoDrawQuad::MaterialCast(b));
106 break;
107 case DrawQuad::YUV_VIDEO_CONTENT:
108 Compare(YUVVideoDrawQuad::MaterialCast(a),
109 YUVVideoDrawQuad::MaterialCast(b));
110 break;
111 case DrawQuad::INVALID:
112 break;
113 }
114 }
115
116 void Compare(const CheckerboardDrawQuad* a, const CheckerboardDrawQuad* b) {
117 EXPECT_EQ(a->color, b->color);
118 }
119
120 void Compare(const DebugBorderDrawQuad* a, const DebugBorderDrawQuad* b) {
121 EXPECT_EQ(a->color, b->color);
122 EXPECT_EQ(a->width, b->width);
123 }
124
125 void Compare(const IOSurfaceDrawQuad* a, const IOSurfaceDrawQuad* b) {
126 EXPECT_EQ(a->io_surface_size.ToString(), b->io_surface_size.ToString());
[email protected]b7cfc632013-04-10 04:44:49127 EXPECT_EQ(a->io_surface_resource_id, b->io_surface_resource_id);
[email protected]4934d362012-11-22 22:04:53128 EXPECT_EQ(a->orientation, b->orientation);
129 }
130
131 void Compare(const RenderPassDrawQuad* a, const RenderPassDrawQuad* b) {
[email protected]82f93fb2013-04-17 21:42:06132 EXPECT_EQ(a->render_pass_id, b->render_pass_id);
[email protected]4934d362012-11-22 22:04:53133 EXPECT_EQ(a->is_replica, b->is_replica);
134 EXPECT_EQ(a->mask_resource_id, b->mask_resource_id);
135 EXPECT_EQ(a->contents_changed_since_last_frame,
136 b->contents_changed_since_last_frame);
[email protected]458af1e2012-12-13 05:12:18137 EXPECT_EQ(a->mask_uv_rect.ToString(), b->mask_uv_rect.ToString());
[email protected]1dc7943e2013-09-26 04:41:48138 EXPECT_EQ(a->filters.size(), b->filters.size());
139 for (size_t i = 0; i < a->filters.size(); ++i) {
140 if (a->filters.at(i).type() != cc::FilterOperation::REFERENCE) {
141 EXPECT_EQ(a->filters.at(i), b->filters.at(i));
142 } else {
143 EXPECT_EQ(b->filters.at(i).type(), cc::FilterOperation::REFERENCE);
144 EXPECT_EQ(a->filters.at(i).image_filter()->countInputs(),
145 b->filters.at(i).image_filter()->countInputs());
146 }
147 }
[email protected]20062042012-12-21 22:16:36148 EXPECT_EQ(a->background_filters, b->background_filters);
[email protected]4934d362012-11-22 22:04:53149 }
150
151 void Compare(const SolidColorDrawQuad* a, const SolidColorDrawQuad* b) {
152 EXPECT_EQ(a->color, b->color);
[email protected]10a30b12013-05-02 16:42:11153 EXPECT_EQ(a->force_anti_aliasing_off, b->force_anti_aliasing_off);
[email protected]4934d362012-11-22 22:04:53154 }
155
156 void Compare(const StreamVideoDrawQuad* a, const StreamVideoDrawQuad* b) {
[email protected]b7cfc632013-04-10 04:44:49157 EXPECT_EQ(a->resource_id, b->resource_id);
[email protected]4934d362012-11-22 22:04:53158 EXPECT_EQ(a->matrix, b->matrix);
159 }
160
161 void Compare(const TextureDrawQuad* a, const TextureDrawQuad* b) {
162 EXPECT_EQ(a->resource_id, b->resource_id);
163 EXPECT_EQ(a->premultiplied_alpha, b->premultiplied_alpha);
[email protected]1fd555b2013-01-18 00:13:21164 EXPECT_EQ(a->uv_top_left, b->uv_top_left);
165 EXPECT_EQ(a->uv_bottom_right, b->uv_bottom_right);
[email protected]d18b4d62013-07-12 05:33:49166 EXPECT_EQ(a->background_color, b->background_color);
[email protected]61df9d82013-01-30 02:32:42167 EXPECT_EQ(a->vertex_opacity[0], b->vertex_opacity[0]);
168 EXPECT_EQ(a->vertex_opacity[1], b->vertex_opacity[1]);
169 EXPECT_EQ(a->vertex_opacity[2], b->vertex_opacity[2]);
170 EXPECT_EQ(a->vertex_opacity[3], b->vertex_opacity[3]);
[email protected]4934d362012-11-22 22:04:53171 EXPECT_EQ(a->flipped, b->flipped);
172 }
173
174 void Compare(const TileDrawQuad* a, const TileDrawQuad* b) {
175 EXPECT_EQ(a->resource_id, b->resource_id);
176 EXPECT_EQ(a->tex_coord_rect, b->tex_coord_rect);
177 EXPECT_EQ(a->texture_size, b->texture_size);
178 EXPECT_EQ(a->swizzle_contents, b->swizzle_contents);
[email protected]4934d362012-11-22 22:04:53179 }
180
181 void Compare(const YUVVideoDrawQuad* a, const YUVVideoDrawQuad* b) {
182 EXPECT_EQ(a->tex_scale, b->tex_scale);
[email protected]b7cfc632013-04-10 04:44:49183 EXPECT_EQ(a->y_plane_resource_id, b->y_plane_resource_id);
184 EXPECT_EQ(a->u_plane_resource_id, b->u_plane_resource_id);
185 EXPECT_EQ(a->v_plane_resource_id, b->v_plane_resource_id);
[email protected]0402b2382013-06-07 21:50:54186 EXPECT_EQ(a->a_plane_resource_id, b->a_plane_resource_id);
[email protected]4934d362012-11-22 22:04:53187 }
[email protected]bca159072012-12-04 00:52:44188
189 void Compare(const TransferableResource& a, const TransferableResource& b) {
190 EXPECT_EQ(a.id, b.id);
[email protected]09831f7f2013-02-27 03:32:15191 EXPECT_EQ(a.sync_point, b.sync_point);
[email protected]bca159072012-12-04 00:52:44192 EXPECT_EQ(a.format, b.format);
[email protected]645a47f22013-09-26 05:42:32193 EXPECT_EQ(a.target, b.target);
[email protected]80189292013-02-28 01:59:36194 EXPECT_EQ(a.filter, b.filter);
[email protected]bca159072012-12-04 00:52:44195 EXPECT_EQ(a.size.ToString(), b.size.ToString());
196 for (size_t i = 0; i < arraysize(a.mailbox.name); ++i)
197 EXPECT_EQ(a.mailbox.name[i], b.mailbox.name[i]);
198 }
[email protected]4934d362012-11-22 22:04:53199};
200
201TEST_F(CCMessagesTest, AllQuads) {
[email protected]753bb252013-11-04 22:28:12202 IPC::Message msg(1, 2, IPC::Message::PRIORITY_NORMAL);
[email protected]4934d362012-11-22 22:04:53203
[email protected]c8686a02012-11-27 08:29:00204 Transform arbitrary_matrix;
205 arbitrary_matrix.Scale(3, 3);
206 arbitrary_matrix.Translate(-5, 20);
207 arbitrary_matrix.Rotate(15);
[email protected]4934d362012-11-22 22:04:53208 gfx::Rect arbitrary_rect1(-5, 9, 3, 15);
[email protected]8e1da692013-10-12 17:11:30209 gfx::Rect arbitrary_rect1_inside_rect1(-4, 12, 2, 8);
210 gfx::Rect arbitrary_rect2_inside_rect1(-5, 11, 1, 2);
[email protected]4934d362012-11-22 22:04:53211 gfx::Rect arbitrary_rect2(40, 23, 11, 7);
[email protected]8e1da692013-10-12 17:11:30212 gfx::Rect arbitrary_rect1_inside_rect2(44, 23, 4, 2);
213 gfx::Rect arbitrary_rect2_inside_rect2(41, 25, 3, 5);
[email protected]4934d362012-11-22 22:04:53214 gfx::Rect arbitrary_rect3(7, -53, 22, 19);
[email protected]8e1da692013-10-12 17:11:30215 gfx::Rect arbitrary_rect1_inside_rect3(10, -40, 6, 3);
216 gfx::Rect arbitrary_rect2_inside_rect3(12, -51, 5, 12);
[email protected]4934d362012-11-22 22:04:53217 gfx::Size arbitrary_size1(15, 19);
218 gfx::Size arbitrary_size2(3, 99);
219 gfx::Size arbitrary_size3(75, 1281);
220 gfx::RectF arbitrary_rectf1(4.2f, -922.1f, 15.6f, 29.5f);
221 gfx::SizeF arbitrary_sizef1(15.2f, 104.6f);
[email protected]61df9d82013-01-30 02:32:42222 gfx::PointF arbitrary_pointf1(31.4f, 15.9f);
223 gfx::PointF arbitrary_pointf2(26.5f, -35.8f);
[email protected]4934d362012-11-22 22:04:53224 float arbitrary_float1 = 0.7f;
225 float arbitrary_float2 = 0.3f;
226 float arbitrary_float3 = 0.9f;
[email protected]61df9d82013-01-30 02:32:42227 float arbitrary_float_array[4] = {3.5f, 6.2f, 9.3f, 12.3f};
[email protected]4934d362012-11-22 22:04:53228 bool arbitrary_bool1 = true;
229 bool arbitrary_bool2 = false;
[email protected]61df9d82013-01-30 02:32:42230 bool arbitrary_bool3 = true;
[email protected]4934d362012-11-22 22:04:53231 int arbitrary_int = 5;
232 SkColor arbitrary_color = SkColorSetARGB(25, 36, 47, 58);
233 IOSurfaceDrawQuad::Orientation arbitrary_orientation =
234 IOSurfaceDrawQuad::UNFLIPPED;
235 RenderPass::Id arbitrary_id(10, 14);
[email protected]b7cfc632013-04-10 04:44:49236 ResourceProvider::ResourceId arbitrary_resourceid1 = 55;
237 ResourceProvider::ResourceId arbitrary_resourceid2 = 47;
238 ResourceProvider::ResourceId arbitrary_resourceid3 = 23;
[email protected]0402b2382013-06-07 21:50:54239 ResourceProvider::ResourceId arbitrary_resourceid4 = 16;
[email protected]a1765672013-08-12 23:45:02240 SkScalar arbitrary_sigma = SkFloatToScalar(2.0f);
[email protected]4934d362012-11-22 22:04:53241
[email protected]ae6b1a72013-06-25 18:49:29242 FilterOperations arbitrary_filters1;
243 arbitrary_filters1.Append(FilterOperation::CreateGrayscaleFilter(
[email protected]4934d362012-11-22 22:04:53244 arbitrary_float1));
[email protected]1dc7943e2013-09-26 04:41:48245 skia::RefPtr<SkImageFilter> arbitrary_filter = skia::AdoptRef(
246 new SkBlurImageFilter(arbitrary_sigma, arbitrary_sigma));
247 arbitrary_filters1.Append(
248 cc::FilterOperation::CreateReferenceFilter(arbitrary_filter));
[email protected]4934d362012-11-22 22:04:53249
[email protected]ae6b1a72013-06-25 18:49:29250 FilterOperations arbitrary_filters2;
251 arbitrary_filters2.Append(FilterOperation::CreateBrightnessFilter(
[email protected]4934d362012-11-22 22:04:53252 arbitrary_float2));
253
254 scoped_ptr<SharedQuadState> shared_state1_in = SharedQuadState::Create();
255 shared_state1_in->SetAll(arbitrary_matrix,
[email protected]f902bf92013-03-04 18:33:27256 arbitrary_size1,
[email protected]4934d362012-11-22 22:04:53257 arbitrary_rect1,
258 arbitrary_rect2,
[email protected]4934d362012-11-22 22:04:53259 arbitrary_bool1,
260 arbitrary_float1);
261 scoped_ptr<SharedQuadState> shared_state1_cmp = shared_state1_in->Copy();
262
263 scoped_ptr<CheckerboardDrawQuad> checkerboard_in =
264 CheckerboardDrawQuad::Create();
265 checkerboard_in->SetAll(shared_state1_in.get(),
266 arbitrary_rect1,
[email protected]8e1da692013-10-12 17:11:30267 arbitrary_rect2_inside_rect1,
268 arbitrary_rect1_inside_rect1,
[email protected]4934d362012-11-22 22:04:53269 arbitrary_bool1,
270 arbitrary_color);
271 scoped_ptr<DrawQuad> checkerboard_cmp = checkerboard_in->Copy(
272 checkerboard_in->shared_quad_state);
273
274 scoped_ptr<DebugBorderDrawQuad> debugborder_in =
275 DebugBorderDrawQuad::Create();
276 debugborder_in->SetAll(shared_state1_in.get(),
277 arbitrary_rect3,
[email protected]8e1da692013-10-12 17:11:30278 arbitrary_rect1_inside_rect3,
279 arbitrary_rect2_inside_rect3,
[email protected]4934d362012-11-22 22:04:53280 arbitrary_bool1,
281 arbitrary_color,
282 arbitrary_int);
283 scoped_ptr<DrawQuad> debugborder_cmp = debugborder_in->Copy(
284 debugborder_in->shared_quad_state);
285
286 scoped_ptr<IOSurfaceDrawQuad> iosurface_in =
287 IOSurfaceDrawQuad::Create();
288 iosurface_in->SetAll(shared_state1_in.get(),
289 arbitrary_rect2,
[email protected]8e1da692013-10-12 17:11:30290 arbitrary_rect2_inside_rect2,
291 arbitrary_rect1_inside_rect2,
[email protected]4934d362012-11-22 22:04:53292 arbitrary_bool1,
293 arbitrary_size1,
[email protected]b7cfc632013-04-10 04:44:49294 arbitrary_resourceid3,
[email protected]4934d362012-11-22 22:04:53295 arbitrary_orientation);
296 scoped_ptr<DrawQuad> iosurface_cmp = iosurface_in->Copy(
297 iosurface_in->shared_quad_state);
298
299 scoped_ptr<RenderPassDrawQuad> renderpass_in =
300 RenderPassDrawQuad::Create();
301 renderpass_in->SetAll(shared_state1_in.get(),
302 arbitrary_rect1,
[email protected]8e1da692013-10-12 17:11:30303 arbitrary_rect2_inside_rect1,
304 arbitrary_rect1_inside_rect1,
[email protected]4934d362012-11-22 22:04:53305 arbitrary_bool1,
306 arbitrary_id,
307 arbitrary_bool2,
[email protected]b7cfc632013-04-10 04:44:49308 arbitrary_resourceid2,
[email protected]4934d362012-11-22 22:04:53309 arbitrary_rect1,
[email protected]20062042012-12-21 22:16:36310 arbitrary_rectf1,
311 arbitrary_filters1,
[email protected]20062042012-12-21 22:16:36312 arbitrary_filters2);
[email protected]4934d362012-11-22 22:04:53313 scoped_ptr<RenderPassDrawQuad> renderpass_cmp = renderpass_in->Copy(
314 renderpass_in->shared_quad_state, renderpass_in->render_pass_id);
315
316 scoped_ptr<SharedQuadState> shared_state2_in = SharedQuadState::Create();
317 shared_state2_in->SetAll(arbitrary_matrix,
[email protected]f902bf92013-03-04 18:33:27318 arbitrary_size2,
[email protected]4934d362012-11-22 22:04:53319 arbitrary_rect2,
320 arbitrary_rect3,
[email protected]4934d362012-11-22 22:04:53321 arbitrary_bool1,
322 arbitrary_float2);
323 scoped_ptr<SharedQuadState> shared_state2_cmp = shared_state2_in->Copy();
324
325 scoped_ptr<SharedQuadState> shared_state3_in = SharedQuadState::Create();
326 shared_state3_in->SetAll(arbitrary_matrix,
[email protected]f902bf92013-03-04 18:33:27327 arbitrary_size3,
[email protected]4934d362012-11-22 22:04:53328 arbitrary_rect3,
329 arbitrary_rect1,
[email protected]4934d362012-11-22 22:04:53330 arbitrary_bool1,
331 arbitrary_float3);
332 scoped_ptr<SharedQuadState> shared_state3_cmp = shared_state3_in->Copy();
333
334 scoped_ptr<SolidColorDrawQuad> solidcolor_in =
335 SolidColorDrawQuad::Create();
336 solidcolor_in->SetAll(shared_state1_in.get(),
337 arbitrary_rect3,
[email protected]8e1da692013-10-12 17:11:30338 arbitrary_rect1_inside_rect3,
339 arbitrary_rect2_inside_rect3,
[email protected]4934d362012-11-22 22:04:53340 arbitrary_bool1,
[email protected]10a30b12013-05-02 16:42:11341 arbitrary_color,
342 arbitrary_bool2);
[email protected]4934d362012-11-22 22:04:53343 scoped_ptr<DrawQuad> solidcolor_cmp = solidcolor_in->Copy(
344 solidcolor_in->shared_quad_state);
345
346 scoped_ptr<StreamVideoDrawQuad> streamvideo_in =
347 StreamVideoDrawQuad::Create();
348 streamvideo_in->SetAll(shared_state1_in.get(),
349 arbitrary_rect2,
[email protected]8e1da692013-10-12 17:11:30350 arbitrary_rect2_inside_rect2,
351 arbitrary_rect1_inside_rect2,
[email protected]4934d362012-11-22 22:04:53352 arbitrary_bool1,
[email protected]b7cfc632013-04-10 04:44:49353 arbitrary_resourceid2,
[email protected]4934d362012-11-22 22:04:53354 arbitrary_matrix);
355 scoped_ptr<DrawQuad> streamvideo_cmp = streamvideo_in->Copy(
356 streamvideo_in->shared_quad_state);
357
[email protected]61df9d82013-01-30 02:32:42358 scoped_ptr<TextureDrawQuad> texture_in = TextureDrawQuad::Create();
359 texture_in->SetAll(shared_state1_in.get(),
360 arbitrary_rect2,
[email protected]8e1da692013-10-12 17:11:30361 arbitrary_rect2_inside_rect2,
362 arbitrary_rect1_inside_rect2,
[email protected]61df9d82013-01-30 02:32:42363 arbitrary_bool1,
[email protected]b7cfc632013-04-10 04:44:49364 arbitrary_resourceid1,
[email protected]61df9d82013-01-30 02:32:42365 arbitrary_bool2,
366 arbitrary_pointf1,
367 arbitrary_pointf2,
[email protected]d18b4d62013-07-12 05:33:49368 arbitrary_color,
[email protected]61df9d82013-01-30 02:32:42369 arbitrary_float_array,
370 arbitrary_bool3);
371 scoped_ptr<DrawQuad> texture_cmp = texture_in->Copy(
372 texture_in->shared_quad_state);
373
374 scoped_ptr<TileDrawQuad> tile_in = TileDrawQuad::Create();
375 tile_in->SetAll(shared_state1_in.get(),
376 arbitrary_rect2,
[email protected]8e1da692013-10-12 17:11:30377 arbitrary_rect2_inside_rect2,
378 arbitrary_rect1_inside_rect2,
[email protected]61df9d82013-01-30 02:32:42379 arbitrary_bool1,
[email protected]b7cfc632013-04-10 04:44:49380 arbitrary_resourceid3,
[email protected]61df9d82013-01-30 02:32:42381 arbitrary_rectf1,
382 arbitrary_size1,
[email protected]f902bf92013-03-04 18:33:27383 arbitrary_bool2);
[email protected]61df9d82013-01-30 02:32:42384 scoped_ptr<DrawQuad> tile_cmp = tile_in->Copy(
385 tile_in->shared_quad_state);
386
[email protected]4934d362012-11-22 22:04:53387 scoped_ptr<YUVVideoDrawQuad> yuvvideo_in =
388 YUVVideoDrawQuad::Create();
389 yuvvideo_in->SetAll(shared_state1_in.get(),
390 arbitrary_rect1,
[email protected]8e1da692013-10-12 17:11:30391 arbitrary_rect2_inside_rect1,
392 arbitrary_rect1_inside_rect1,
[email protected]4934d362012-11-22 22:04:53393 arbitrary_bool1,
394 arbitrary_sizef1,
[email protected]b7cfc632013-04-10 04:44:49395 arbitrary_resourceid1,
396 arbitrary_resourceid2,
[email protected]0402b2382013-06-07 21:50:54397 arbitrary_resourceid3,
398 arbitrary_resourceid4);
[email protected]4934d362012-11-22 22:04:53399 scoped_ptr<DrawQuad> yuvvideo_cmp = yuvvideo_in->Copy(
400 yuvvideo_in->shared_quad_state);
401
402 scoped_ptr<RenderPass> pass_in = RenderPass::Create();
403 pass_in->SetAll(arbitrary_id,
404 arbitrary_rect1,
405 arbitrary_rectf1,
406 arbitrary_matrix,
[email protected]fbc293322013-10-01 05:07:15407 arbitrary_bool1);
[email protected]4934d362012-11-22 22:04:53408
[email protected]ead39c52013-01-09 07:22:45409 pass_in->shared_quad_state_list.push_back(shared_state1_in.Pass());
410 pass_in->quad_list.push_back(checkerboard_in.PassAs<DrawQuad>());
411 pass_in->quad_list.push_back(debugborder_in.PassAs<DrawQuad>());
412 pass_in->quad_list.push_back(iosurface_in.PassAs<DrawQuad>());
413 pass_in->quad_list.push_back(renderpass_in.PassAs<DrawQuad>());
414 pass_in->shared_quad_state_list.push_back(shared_state2_in.Pass());
415 pass_in->shared_quad_state_list.push_back(shared_state3_in.Pass());
416 pass_in->quad_list.push_back(solidcolor_in.PassAs<DrawQuad>());
417 pass_in->quad_list.push_back(streamvideo_in.PassAs<DrawQuad>());
[email protected]61df9d82013-01-30 02:32:42418 pass_in->quad_list.push_back(texture_in.PassAs<DrawQuad>());
419 pass_in->quad_list.push_back(tile_in.PassAs<DrawQuad>());
[email protected]ead39c52013-01-09 07:22:45420 pass_in->quad_list.push_back(yuvvideo_in.PassAs<DrawQuad>());
[email protected]4934d362012-11-22 22:04:53421
422 scoped_ptr<RenderPass> pass_cmp = RenderPass::Create();
423 pass_cmp->SetAll(arbitrary_id,
424 arbitrary_rect1,
425 arbitrary_rectf1,
426 arbitrary_matrix,
[email protected]fbc293322013-10-01 05:07:15427 arbitrary_bool1);
[email protected]4934d362012-11-22 22:04:53428
[email protected]ead39c52013-01-09 07:22:45429 pass_cmp->shared_quad_state_list.push_back(shared_state1_cmp.Pass());
430 pass_cmp->quad_list.push_back(checkerboard_cmp.PassAs<DrawQuad>());
431 pass_cmp->quad_list.push_back(debugborder_cmp.PassAs<DrawQuad>());
432 pass_cmp->quad_list.push_back(iosurface_cmp.PassAs<DrawQuad>());
433 pass_cmp->quad_list.push_back(renderpass_cmp.PassAs<DrawQuad>());
434 pass_cmp->shared_quad_state_list.push_back(shared_state2_cmp.Pass());
435 pass_cmp->shared_quad_state_list.push_back(shared_state3_cmp.Pass());
436 pass_cmp->quad_list.push_back(solidcolor_cmp.PassAs<DrawQuad>());
437 pass_cmp->quad_list.push_back(streamvideo_cmp.PassAs<DrawQuad>());
[email protected]61df9d82013-01-30 02:32:42438 pass_cmp->quad_list.push_back(texture_cmp.PassAs<DrawQuad>());
439 pass_cmp->quad_list.push_back(tile_cmp.PassAs<DrawQuad>());
[email protected]ead39c52013-01-09 07:22:45440 pass_cmp->quad_list.push_back(yuvvideo_cmp.PassAs<DrawQuad>());
[email protected]4934d362012-11-22 22:04:53441
442 // Make sure the in and cmp RenderPasses match.
443 Compare(pass_cmp.get(), pass_in.get());
444 ASSERT_EQ(3u, pass_in->shared_quad_state_list.size());
[email protected]61df9d82013-01-30 02:32:42445 ASSERT_EQ(9u, pass_in->quad_list.size());
[email protected]4934d362012-11-22 22:04:53446 for (size_t i = 0; i < 3; ++i) {
447 Compare(pass_cmp->shared_quad_state_list[i],
448 pass_in->shared_quad_state_list[i]);
449 }
[email protected]61df9d82013-01-30 02:32:42450 for (size_t i = 0; i < pass_in->quad_list.size(); ++i)
[email protected]4934d362012-11-22 22:04:53451 Compare(pass_cmp->quad_list[i], pass_in->quad_list[i]);
[email protected]61df9d82013-01-30 02:32:42452 for (size_t i = 1; i < pass_in->quad_list.size(); ++i) {
[email protected]4934d362012-11-22 22:04:53453 bool same_shared_quad_state_cmp =
454 pass_cmp->quad_list[i]->shared_quad_state ==
455 pass_cmp->quad_list[i - 1]->shared_quad_state;
456 bool same_shared_quad_state_in =
457 pass_in->quad_list[i]->shared_quad_state ==
458 pass_in->quad_list[i - 1]->shared_quad_state;
459 EXPECT_EQ(same_shared_quad_state_cmp, same_shared_quad_state_in);
460 }
461
[email protected]bf189f62012-12-18 03:42:11462 DelegatedFrameData frame_in;
[email protected]ead39c52013-01-09 07:22:45463 frame_in.render_pass_list.push_back(pass_in.Pass());
[email protected]4934d362012-11-22 22:04:53464
[email protected]bf189f62012-12-18 03:42:11465 IPC::ParamTraits<DelegatedFrameData>::Write(&msg, frame_in);
[email protected]bca159072012-12-04 00:52:44466
[email protected]bf189f62012-12-18 03:42:11467 DelegatedFrameData frame_out;
[email protected]4934d362012-11-22 22:04:53468 PickleIterator iter(msg);
[email protected]bf189f62012-12-18 03:42:11469 EXPECT_TRUE(IPC::ParamTraits<DelegatedFrameData>::Read(&msg,
470 &iter, &frame_out));
[email protected]bca159072012-12-04 00:52:44471
[email protected]4934d362012-11-22 22:04:53472 // Make sure the out and cmp RenderPasses match.
[email protected]ead39c52013-01-09 07:22:45473 scoped_ptr<RenderPass> pass_out = frame_out.render_pass_list.take(
474 frame_out.render_pass_list.begin());
[email protected]4934d362012-11-22 22:04:53475 Compare(pass_cmp.get(), pass_out.get());
476 ASSERT_EQ(3u, pass_out->shared_quad_state_list.size());
[email protected]61df9d82013-01-30 02:32:42477 ASSERT_EQ(9u, pass_out->quad_list.size());
[email protected]4934d362012-11-22 22:04:53478 for (size_t i = 0; i < 3; ++i) {
479 Compare(pass_cmp->shared_quad_state_list[i],
480 pass_out->shared_quad_state_list[i]);
481 }
[email protected]61df9d82013-01-30 02:32:42482 for (size_t i = 0; i < pass_out->quad_list.size(); ++i)
[email protected]4934d362012-11-22 22:04:53483 Compare(pass_cmp->quad_list[i], pass_out->quad_list[i]);
[email protected]61df9d82013-01-30 02:32:42484 for (size_t i = 1; i < pass_out->quad_list.size(); ++i) {
[email protected]4934d362012-11-22 22:04:53485 bool same_shared_quad_state_cmp =
486 pass_cmp->quad_list[i]->shared_quad_state ==
487 pass_cmp->quad_list[i - 1]->shared_quad_state;
488 bool same_shared_quad_state_out =
489 pass_out->quad_list[i]->shared_quad_state ==
490 pass_out->quad_list[i - 1]->shared_quad_state;
491 EXPECT_EQ(same_shared_quad_state_cmp, same_shared_quad_state_out);
492 }
493}
[email protected]bca159072012-12-04 00:52:44494
495TEST_F(CCMessagesTest, Resources) {
[email protected]753bb252013-11-04 22:28:12496 IPC::Message msg(1, 2, IPC::Message::PRIORITY_NORMAL);
[email protected]bca159072012-12-04 00:52:44497 gfx::Size arbitrary_size(757, 1281);
[email protected]09831f7f2013-02-27 03:32:15498 unsigned int arbitrary_uint1 = 71234838;
499 unsigned int arbitrary_uint2 = 53589793;
[email protected]bca159072012-12-04 00:52:44500
501 GLbyte arbitrary_mailbox1[64] = {
502 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0,
503 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0,
504 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0,
505 1, 2, 3, 4
506 };
507
508 GLbyte arbitrary_mailbox2[64] = {
509 0, 9, 8, 7, 6, 5, 4, 3, 2, 1, 9, 7, 5, 3, 1, 2, 4, 6, 8, 0,
510 0, 9, 8, 7, 6, 5, 4, 3, 2, 1, 9, 7, 5, 3, 1, 2, 4, 6, 8, 0,
511 0, 9, 8, 7, 6, 5, 4, 3, 2, 1, 9, 7, 5, 3, 1, 2, 4, 6, 8, 0,
512 0, 9, 8, 7
513 };
514
515 TransferableResource arbitrary_resource1;
516 arbitrary_resource1.id = 2178312;
[email protected]09831f7f2013-02-27 03:32:15517 arbitrary_resource1.sync_point = arbitrary_uint1;
[email protected]27a41fe2013-09-19 05:05:14518 arbitrary_resource1.format = cc::RGBA_8888;
[email protected]645a47f22013-09-26 05:42:32519 arbitrary_resource1.target = GL_TEXTURE_2D;
[email protected]80189292013-02-28 01:59:36520 arbitrary_resource1.filter = 53;
[email protected]bca159072012-12-04 00:52:44521 arbitrary_resource1.size = gfx::Size(37189, 123123);
[email protected]1aca0092013-03-04 22:46:03522 arbitrary_resource1.mailbox.SetName(arbitrary_mailbox1);
[email protected]bca159072012-12-04 00:52:44523
524 TransferableResource arbitrary_resource2;
525 arbitrary_resource2.id = 789132;
[email protected]645a47f22013-09-26 05:42:32526 arbitrary_resource2.sync_point = arbitrary_uint2;
[email protected]27a41fe2013-09-19 05:05:14527 arbitrary_resource2.format = cc::RGBA_4444;
[email protected]645a47f22013-09-26 05:42:32528 arbitrary_resource2.target = GL_TEXTURE_EXTERNAL_OES;
529 arbitrary_resource2.filter = 47;
[email protected]bca159072012-12-04 00:52:44530 arbitrary_resource2.size = gfx::Size(89123, 23789);
[email protected]1aca0092013-03-04 22:46:03531 arbitrary_resource2.mailbox.SetName(arbitrary_mailbox2);
[email protected]bca159072012-12-04 00:52:44532
[email protected]cb7d6492013-10-03 02:40:04533 scoped_ptr<RenderPass> renderpass_in = RenderPass::Create();
534 renderpass_in->SetNew(
535 RenderPass::Id(1, 1), gfx::Rect(), gfx::Rect(), gfx::Transform());
536
[email protected]bf189f62012-12-18 03:42:11537 DelegatedFrameData frame_in;
[email protected]09831f7f2013-02-27 03:32:15538 frame_in.resource_list.push_back(arbitrary_resource1);
539 frame_in.resource_list.push_back(arbitrary_resource2);
[email protected]cb7d6492013-10-03 02:40:04540 frame_in.render_pass_list.push_back(renderpass_in.Pass());
[email protected]bca159072012-12-04 00:52:44541
[email protected]bf189f62012-12-18 03:42:11542 IPC::ParamTraits<DelegatedFrameData>::Write(&msg, frame_in);
[email protected]bca159072012-12-04 00:52:44543
[email protected]bf189f62012-12-18 03:42:11544 DelegatedFrameData frame_out;
[email protected]bca159072012-12-04 00:52:44545 PickleIterator iter(msg);
[email protected]bf189f62012-12-18 03:42:11546 EXPECT_TRUE(IPC::ParamTraits<DelegatedFrameData>::Read(&msg,
547 &iter, &frame_out));
[email protected]bca159072012-12-04 00:52:44548
[email protected]09831f7f2013-02-27 03:32:15549 ASSERT_EQ(2u, frame_out.resource_list.size());
550 Compare(arbitrary_resource1, frame_out.resource_list[0]);
551 Compare(arbitrary_resource2, frame_out.resource_list[1]);
[email protected]bca159072012-12-04 00:52:44552}
553
[email protected]032bfc42013-10-29 22:23:52554TEST_F(CCMessagesTest, LargestQuadType) {
555 size_t largest = 0;
556
557 bool done = false;
558 for (int i = 0; !done; ++i) {
559 switch (static_cast<DrawQuad::Material>(i)) {
560 case cc::DrawQuad::CHECKERBOARD:
561 largest = std::max(largest, sizeof(cc::CheckerboardDrawQuad));
562 break;
563 case cc::DrawQuad::DEBUG_BORDER:
564 largest = std::max(largest, sizeof(cc::DebugBorderDrawQuad));
565 break;
566 case cc::DrawQuad::IO_SURFACE_CONTENT:
567 largest = std::max(largest, sizeof(cc::IOSurfaceDrawQuad));
568 break;
569 case cc::DrawQuad::PICTURE_CONTENT:
570 largest = std::max(largest, sizeof(cc::PictureDrawQuad));
571 break;
572 case cc::DrawQuad::TEXTURE_CONTENT:
573 largest = std::max(largest, sizeof(cc::TextureDrawQuad));
574 break;
575 case cc::DrawQuad::RENDER_PASS:
576 largest = std::max(largest, sizeof(cc::RenderPassDrawQuad));
577 break;
578 case cc::DrawQuad::SOLID_COLOR:
579 largest = std::max(largest, sizeof(cc::SolidColorDrawQuad));
580 break;
581 case cc::DrawQuad::TILED_CONTENT:
582 largest = std::max(largest, sizeof(cc::TileDrawQuad));
583 break;
584 case cc::DrawQuad::STREAM_VIDEO_CONTENT:
585 largest = std::max(largest, sizeof(cc::StreamVideoDrawQuad));
586 break;
587 case cc::DrawQuad::YUV_VIDEO_CONTENT:
588 largest = std::max(largest, sizeof(cc::YUVVideoDrawQuad));
589 break;
590 case cc::DrawQuad::INVALID:
591 break;
592 default:
593 done = true;
594 }
595 }
596
597 // Verify the largest DrawQuad type is RenderPassDrawQuad. If this ever
598 // changes, then the ReserveSizeForRenderPassWrite() method needs to be
599 // updated as well to use the new largest quad.
600 EXPECT_EQ(sizeof(RenderPassDrawQuad), largest);
601}
602
[email protected]bca159072012-12-04 00:52:44603} // namespace
604} // namespace content