blob: 9b1aec153020f5d68f4624c48d72026c089d0df7 [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
avia9aa7a82015-12-25 03:06:315#include <stddef.h>
[email protected]4934d362012-11-22 22:04:536#include <string.h>
[email protected]032bfc42013-10-29 22:23:527#include <algorithm>
dchengf63a1252015-12-26 20:43:138#include <utility>
[email protected]032bfc42013-10-29 22:23:529
avia9aa7a82015-12-25 03:06:3110#include "base/macros.h"
11#include "build/build_config.h"
fsamuel812b8482016-05-16 18:52:1812#include "cc/ipc/cc_param_traits.h"
[email protected]7f0d825f2013-03-18 07:24:3013#include "cc/output/compositor_frame.h"
fsamuel812b8482016-05-16 18:52:1814#include "cc/quads/picture_draw_quad.h"
15#include "cc/quads/render_pass_draw_quad.h"
[email protected]4934d362012-11-22 22:04:5316#include "ipc/ipc_message.h"
17#include "testing/gtest/include/gtest/gtest.h"
[email protected]a1765672013-08-12 23:45:0218#include "third_party/skia/include/effects/SkBlurImageFilter.h"
[email protected]4934d362012-11-22 22:04:5319
[email protected]cecc8342014-03-20 21:43:3920#if defined(OS_POSIX)
21#include "base/file_descriptor_posix.h"
22#endif
23
samansce5c3c32016-11-18 13:47:3424using cc::CompositorFrame;
[email protected]4934d362012-11-22 22:04:5325using cc::DebugBorderDrawQuad;
26using cc::DrawQuad;
[email protected]ae6b1a72013-06-25 18:49:2927using cc::FilterOperation;
28using cc::FilterOperations;
[email protected]9ee4d3a2013-03-27 17:43:1629using cc::PictureDrawQuad;
[email protected]4934d362012-11-22 22:04:5330using cc::RenderPass;
31using cc::RenderPassDrawQuad;
jbaumanbbd425e2015-05-19 00:33:3532using cc::ResourceId;
[email protected]4934d362012-11-22 22:04:5333using cc::ResourceProvider;
34using cc::SharedQuadState;
35using cc::SolidColorDrawQuad;
[email protected]78d30122014-01-17 06:32:3636using cc::SurfaceDrawQuad;
[email protected]4934d362012-11-22 22:04:5337using cc::TextureDrawQuad;
38using cc::TileDrawQuad;
[email protected]bca159072012-12-04 00:52:4439using cc::TransferableResource;
[email protected]4934d362012-11-22 22:04:5340using cc::StreamVideoDrawQuad;
[email protected]4934d362012-11-22 22:04:5341using cc::YUVVideoDrawQuad;
[email protected]c8686a02012-11-27 08:29:0042using gfx::Transform;
[email protected]4934d362012-11-22 22:04:5343
[email protected]bca159072012-12-04 00:52:4444namespace content {
45namespace {
46
fsamuele0f705b2016-10-01 14:07:1447static constexpr cc::FrameSinkId kArbitraryFrameSinkId(1, 1);
48
fsamuelf76098e2016-05-18 17:26:5149class CCParamTraitsTest : public testing::Test {
[email protected]4934d362012-11-22 22:04:5350 protected:
51 void Compare(const RenderPass* a, const RenderPass* b) {
52 EXPECT_EQ(a->id, b->id);
53 EXPECT_EQ(a->output_rect.ToString(), b->output_rect.ToString());
54 EXPECT_EQ(a->damage_rect.ToString(), b->damage_rect.ToString());
55 EXPECT_EQ(a->transform_to_root_target, b->transform_to_root_target);
ajumaa26e58452016-12-15 22:35:0156 EXPECT_EQ(a->filters.size(), b->filters.size());
57 for (size_t i = 0; i < a->filters.size(); ++i) {
58 if (a->filters.at(i).type() != cc::FilterOperation::REFERENCE) {
59 EXPECT_EQ(a->filters.at(i), b->filters.at(i));
60 } else {
61 EXPECT_EQ(b->filters.at(i).type(), cc::FilterOperation::REFERENCE);
62 EXPECT_EQ(a->filters.at(i).image_filter()->countInputs(),
63 b->filters.at(i).image_filter()->countInputs());
64 }
65 }
66 EXPECT_EQ(a->background_filters.size(), b->background_filters.size());
67 for (size_t i = 0; i < a->background_filters.size(); ++i) {
68 if (a->background_filters.at(i).type() !=
69 cc::FilterOperation::REFERENCE) {
70 EXPECT_EQ(a->background_filters.at(i), b->background_filters.at(i));
71 } else {
72 EXPECT_EQ(b->background_filters.at(i).type(),
73 cc::FilterOperation::REFERENCE);
74 EXPECT_EQ(a->background_filters.at(i).image_filter()->countInputs(),
75 b->background_filters.at(i).image_filter()->countInputs());
76 }
77 }
[email protected]4934d362012-11-22 22:04:5378 EXPECT_EQ(a->has_transparent_background, b->has_transparent_background);
[email protected]4934d362012-11-22 22:04:5379 }
80
81 void Compare(const SharedQuadState* a, const SharedQuadState* b) {
danakj64767d902015-06-19 00:10:4382 EXPECT_EQ(a->quad_to_target_transform, b->quad_to_target_transform);
83 EXPECT_EQ(a->quad_layer_bounds, b->quad_layer_bounds);
84 EXPECT_EQ(a->visible_quad_layer_rect, b->visible_quad_layer_rect);
[email protected]4934d362012-11-22 22:04:5385 EXPECT_EQ(a->clip_rect, b->clip_rect);
86 EXPECT_EQ(a->is_clipped, b->is_clipped);
87 EXPECT_EQ(a->opacity, b->opacity);
[email protected]7bbeaf4e2013-11-26 10:27:2288 EXPECT_EQ(a->blend_mode, b->blend_mode);
[email protected]a9d4d4f2014-06-19 06:49:2889 EXPECT_EQ(a->sorting_context_id, b->sorting_context_id);
[email protected]4934d362012-11-22 22:04:5390 }
91
92 void Compare(const DrawQuad* a, const DrawQuad* b) {
93 ASSERT_NE(DrawQuad::INVALID, a->material);
94 ASSERT_EQ(a->material, b->material);
95 EXPECT_EQ(a->rect.ToString(), b->rect.ToString());
96 EXPECT_EQ(a->opaque_rect.ToString(), b->opaque_rect.ToString());
97 EXPECT_EQ(a->visible_rect.ToString(), b->visible_rect.ToString());
98 EXPECT_EQ(a->needs_blending, b->needs_blending);
99
100 Compare(a->shared_quad_state, b->shared_quad_state);
101
102 switch (a->material) {
[email protected]4934d362012-11-22 22:04:53103 case DrawQuad::DEBUG_BORDER:
104 Compare(DebugBorderDrawQuad::MaterialCast(a),
105 DebugBorderDrawQuad::MaterialCast(b));
106 break;
[email protected]9ee4d3a2013-03-27 17:43:16107 case DrawQuad::PICTURE_CONTENT:
108 Compare(PictureDrawQuad::MaterialCast(a),
109 PictureDrawQuad::MaterialCast(b));
110 break;
[email protected]4934d362012-11-22 22:04:53111 case DrawQuad::RENDER_PASS:
112 Compare(RenderPassDrawQuad::MaterialCast(a),
113 RenderPassDrawQuad::MaterialCast(b));
114 break;
115 case DrawQuad::TEXTURE_CONTENT:
116 Compare(TextureDrawQuad::MaterialCast(a),
117 TextureDrawQuad::MaterialCast(b));
118 break;
119 case DrawQuad::TILED_CONTENT:
fsamuelf76098e2016-05-18 17:26:51120 Compare(TileDrawQuad::MaterialCast(a), TileDrawQuad::MaterialCast(b));
[email protected]4934d362012-11-22 22:04:53121 break;
122 case DrawQuad::SOLID_COLOR:
123 Compare(SolidColorDrawQuad::MaterialCast(a),
124 SolidColorDrawQuad::MaterialCast(b));
125 break;
126 case DrawQuad::STREAM_VIDEO_CONTENT:
127 Compare(StreamVideoDrawQuad::MaterialCast(a),
128 StreamVideoDrawQuad::MaterialCast(b));
129 break;
[email protected]78d30122014-01-17 06:32:36130 case DrawQuad::SURFACE_CONTENT:
131 Compare(SurfaceDrawQuad::MaterialCast(a),
132 SurfaceDrawQuad::MaterialCast(b));
133 break;
[email protected]4934d362012-11-22 22:04:53134 case DrawQuad::YUV_VIDEO_CONTENT:
135 Compare(YUVVideoDrawQuad::MaterialCast(a),
136 YUVVideoDrawQuad::MaterialCast(b));
137 break;
138 case DrawQuad::INVALID:
139 break;
140 }
141 }
142
[email protected]4934d362012-11-22 22:04:53143 void Compare(const DebugBorderDrawQuad* a, const DebugBorderDrawQuad* b) {
144 EXPECT_EQ(a->color, b->color);
145 EXPECT_EQ(a->width, b->width);
146 }
147
[email protected]4934d362012-11-22 22:04:53148 void Compare(const RenderPassDrawQuad* a, const RenderPassDrawQuad* b) {
[email protected]82f93fb2013-04-17 21:42:06149 EXPECT_EQ(a->render_pass_id, b->render_pass_id);
vmpstr0eca2e82015-06-02 22:14:46150 EXPECT_EQ(a->mask_resource_id(), b->mask_resource_id());
ennef6f3fbba42014-10-16 18:16:49151 EXPECT_EQ(a->mask_uv_scale.ToString(), b->mask_uv_scale.ToString());
152 EXPECT_EQ(a->mask_texture_size.ToString(), b->mask_texture_size.ToString());
[email protected]7ac3d492014-08-08 21:25:32153 EXPECT_EQ(a->filters_scale, b->filters_scale);
Stephen White5941ecb02016-08-30 01:28:24154 EXPECT_EQ(a->filters_origin, b->filters_origin);
[email protected]4934d362012-11-22 22:04:53155 }
156
157 void Compare(const SolidColorDrawQuad* a, const SolidColorDrawQuad* b) {
158 EXPECT_EQ(a->color, b->color);
[email protected]10a30b12013-05-02 16:42:11159 EXPECT_EQ(a->force_anti_aliasing_off, b->force_anti_aliasing_off);
[email protected]4934d362012-11-22 22:04:53160 }
161
162 void Compare(const StreamVideoDrawQuad* a, const StreamVideoDrawQuad* b) {
vmpstr0eca2e82015-06-02 22:14:46163 EXPECT_EQ(a->resource_id(), b->resource_id());
achaulkf89f5942015-06-10 17:01:35164 EXPECT_EQ(a->resource_size_in_pixels(), b->resource_size_in_pixels());
[email protected]4934d362012-11-22 22:04:53165 EXPECT_EQ(a->matrix, b->matrix);
166 }
167
[email protected]78d30122014-01-17 06:32:36168 void Compare(const SurfaceDrawQuad* a, const SurfaceDrawQuad* b) {
169 EXPECT_EQ(a->surface_id, b->surface_id);
170 }
171
[email protected]4934d362012-11-22 22:04:53172 void Compare(const TextureDrawQuad* a, const TextureDrawQuad* b) {
vmpstr0eca2e82015-06-02 22:14:46173 EXPECT_EQ(a->resource_id(), b->resource_id());
achaulkf89f5942015-06-10 17:01:35174 EXPECT_EQ(a->resource_size_in_pixels(), b->resource_size_in_pixels());
[email protected]4934d362012-11-22 22:04:53175 EXPECT_EQ(a->premultiplied_alpha, b->premultiplied_alpha);
[email protected]1fd555b2013-01-18 00:13:21176 EXPECT_EQ(a->uv_top_left, b->uv_top_left);
177 EXPECT_EQ(a->uv_bottom_right, b->uv_bottom_right);
[email protected]d18b4d62013-07-12 05:33:49178 EXPECT_EQ(a->background_color, b->background_color);
[email protected]61df9d82013-01-30 02:32:42179 EXPECT_EQ(a->vertex_opacity[0], b->vertex_opacity[0]);
180 EXPECT_EQ(a->vertex_opacity[1], b->vertex_opacity[1]);
181 EXPECT_EQ(a->vertex_opacity[2], b->vertex_opacity[2]);
182 EXPECT_EQ(a->vertex_opacity[3], b->vertex_opacity[3]);
halliwellaa111282015-05-13 21:58:43183 EXPECT_EQ(a->y_flipped, b->y_flipped);
jackhou10c9af42014-12-04 05:24:44184 EXPECT_EQ(a->nearest_neighbor, b->nearest_neighbor);
jbauman0c1bf21132016-05-19 19:20:07185 EXPECT_EQ(a->secure_output_only, b->secure_output_only);
[email protected]4934d362012-11-22 22:04:53186 }
187
188 void Compare(const TileDrawQuad* a, const TileDrawQuad* b) {
vmpstr0eca2e82015-06-02 22:14:46189 EXPECT_EQ(a->resource_id(), b->resource_id());
[email protected]4934d362012-11-22 22:04:53190 EXPECT_EQ(a->tex_coord_rect, b->tex_coord_rect);
191 EXPECT_EQ(a->texture_size, b->texture_size);
192 EXPECT_EQ(a->swizzle_contents, b->swizzle_contents);
jackhou24229612014-12-13 23:41:00193 EXPECT_EQ(a->nearest_neighbor, b->nearest_neighbor);
[email protected]4934d362012-11-22 22:04:53194 }
195
196 void Compare(const YUVVideoDrawQuad* a, const YUVVideoDrawQuad* b) {
revemanb71e3992015-05-12 23:01:51197 EXPECT_EQ(a->ya_tex_coord_rect, b->ya_tex_coord_rect);
198 EXPECT_EQ(a->uv_tex_coord_rect, b->uv_tex_coord_rect);
magjed7364ff92015-03-27 09:11:08199 EXPECT_EQ(a->ya_tex_size, b->ya_tex_size);
200 EXPECT_EQ(a->uv_tex_size, b->uv_tex_size);
vmpstr0eca2e82015-06-02 22:14:46201 EXPECT_EQ(a->y_plane_resource_id(), b->y_plane_resource_id());
202 EXPECT_EQ(a->u_plane_resource_id(), b->u_plane_resource_id());
203 EXPECT_EQ(a->v_plane_resource_id(), b->v_plane_resource_id());
204 EXPECT_EQ(a->a_plane_resource_id(), b->a_plane_resource_id());
[email protected]82faf5e2014-05-03 02:25:58205 EXPECT_EQ(a->color_space, b->color_space);
jbaumanaa35e3e2016-08-03 22:46:32206 EXPECT_EQ(a->bits_per_channel, b->bits_per_channel);
[email protected]4934d362012-11-22 22:04:53207 }
[email protected]bca159072012-12-04 00:52:44208
209 void Compare(const TransferableResource& a, const TransferableResource& b) {
210 EXPECT_EQ(a.id, b.id);
211 EXPECT_EQ(a.format, b.format);
[email protected]80189292013-02-28 01:59:36212 EXPECT_EQ(a.filter, b.filter);
[email protected]bca159072012-12-04 00:52:44213 EXPECT_EQ(a.size.ToString(), b.size.ToString());
[email protected]df41e252014-02-03 23:39:50214 for (size_t i = 0; i < arraysize(a.mailbox_holder.mailbox.name); ++i) {
215 EXPECT_EQ(a.mailbox_holder.mailbox.name[i],
216 b.mailbox_holder.mailbox.name[i]);
217 }
218 EXPECT_EQ(a.mailbox_holder.texture_target, b.mailbox_holder.texture_target);
dyencc16ed4d2015-11-03 20:03:04219 EXPECT_EQ(a.mailbox_holder.sync_token, b.mailbox_holder.sync_token);
ccameron268c09fd2015-10-08 20:23:46220 EXPECT_EQ(a.is_overlay_candidate, b.is_overlay_candidate);
liberato304dc192016-12-09 20:55:26221#if defined(OS_ANDROID)
222 EXPECT_EQ(a.is_backed_by_surface_texture, b.is_backed_by_surface_texture);
223 EXPECT_EQ(a.wants_promotion_hint, b.wants_promotion_hint);
224#endif
[email protected]bca159072012-12-04 00:52:44225 }
[email protected]4934d362012-11-22 22:04:53226};
227
fsamuelf76098e2016-05-18 17:26:51228TEST_F(CCParamTraitsTest, AllQuads) {
[email protected]753bb252013-11-04 22:28:12229 IPC::Message msg(1, 2, IPC::Message::PRIORITY_NORMAL);
[email protected]4934d362012-11-22 22:04:53230
danakj112d3a102015-04-14 18:24:49231 Transform arbitrary_matrix1;
232 arbitrary_matrix1.Scale(3, 3);
233 arbitrary_matrix1.Translate(-5, 20);
234 arbitrary_matrix1.Rotate(15);
235 Transform arbitrary_matrix2;
236 arbitrary_matrix2.Scale(10, -1);
237 arbitrary_matrix2.Translate(20, 3);
238 arbitrary_matrix2.Rotate(24);
[email protected]4934d362012-11-22 22:04:53239 gfx::Rect arbitrary_rect1(-5, 9, 3, 15);
[email protected]8e1da692013-10-12 17:11:30240 gfx::Rect arbitrary_rect1_inside_rect1(-4, 12, 2, 8);
241 gfx::Rect arbitrary_rect2_inside_rect1(-5, 11, 1, 2);
[email protected]4934d362012-11-22 22:04:53242 gfx::Rect arbitrary_rect2(40, 23, 11, 7);
[email protected]8e1da692013-10-12 17:11:30243 gfx::Rect arbitrary_rect1_inside_rect2(44, 23, 4, 2);
244 gfx::Rect arbitrary_rect2_inside_rect2(41, 25, 3, 5);
[email protected]4934d362012-11-22 22:04:53245 gfx::Rect arbitrary_rect3(7, -53, 22, 19);
[email protected]8e1da692013-10-12 17:11:30246 gfx::Rect arbitrary_rect1_inside_rect3(10, -40, 6, 3);
247 gfx::Rect arbitrary_rect2_inside_rect3(12, -51, 5, 12);
[email protected]4934d362012-11-22 22:04:53248 gfx::Size arbitrary_size1(15, 19);
249 gfx::Size arbitrary_size2(3, 99);
250 gfx::Size arbitrary_size3(75, 1281);
251 gfx::RectF arbitrary_rectf1(4.2f, -922.1f, 15.6f, 29.5f);
revemanb71e3992015-05-12 23:01:51252 gfx::RectF arbitrary_rectf2(2.1f, -411.05f, 7.8f, 14.75f);
[email protected]4934d362012-11-22 22:04:53253 gfx::SizeF arbitrary_sizef1(15.2f, 104.6f);
[email protected]61df9d82013-01-30 02:32:42254 gfx::PointF arbitrary_pointf1(31.4f, 15.9f);
255 gfx::PointF arbitrary_pointf2(26.5f, -35.8f);
[email protected]7ac3d492014-08-08 21:25:32256 gfx::Vector2dF arbitrary_vector2df1(16.2f, -85.1f);
ennef6f3fbba42014-10-16 18:16:49257 gfx::Vector2dF arbitrary_vector2df2(-8.3f, 0.47f);
[email protected]4934d362012-11-22 22:04:53258 float arbitrary_float1 = 0.7f;
259 float arbitrary_float2 = 0.3f;
260 float arbitrary_float3 = 0.9f;
[email protected]61df9d82013-01-30 02:32:42261 float arbitrary_float_array[4] = {3.5f, 6.2f, 9.3f, 12.3f};
[email protected]4934d362012-11-22 22:04:53262 bool arbitrary_bool1 = true;
263 bool arbitrary_bool2 = false;
[email protected]61df9d82013-01-30 02:32:42264 bool arbitrary_bool3 = true;
jackhou10c9af42014-12-04 05:24:44265 bool arbitrary_bool4 = true;
achaulkf89f5942015-06-10 17:01:35266 bool arbitrary_bool5 = false;
jbauman0c1bf21132016-05-19 19:20:07267 bool arbitrary_bool6 = true;
[email protected]a9d4d4f2014-06-19 06:49:28268 int arbitrary_context_id1 = 12;
269 int arbitrary_context_id2 = 57;
270 int arbitrary_context_id3 = -503;
jbaumanaa35e3e2016-08-03 22:46:32271 int arbitrary_int = 13;
[email protected]4934d362012-11-22 22:04:53272 SkColor arbitrary_color = SkColorSetARGB(25, 36, 47, 58);
reedcc9c70f2016-11-22 04:26:01273 SkBlendMode arbitrary_blend_mode1 = SkBlendMode::kScreen;
274 SkBlendMode arbitrary_blend_mode2 = SkBlendMode::kLighten;
275 SkBlendMode arbitrary_blend_mode3 = SkBlendMode::kOverlay;
jbaumanbbd425e2015-05-19 00:33:35276 ResourceId arbitrary_resourceid1 = 55;
277 ResourceId arbitrary_resourceid2 = 47;
278 ResourceId arbitrary_resourceid3 = 23;
279 ResourceId arbitrary_resourceid4 = 16;
[email protected]a1765672013-08-12 23:45:02280 SkScalar arbitrary_sigma = SkFloatToScalar(2.0f);
[email protected]82faf5e2014-05-03 02:25:58281 YUVVideoDrawQuad::ColorSpace arbitrary_color_space =
282 YUVVideoDrawQuad::REC_601;
hubbeaf57af302016-08-11 10:42:32283 gfx::ColorSpace arbitrary_video_color_space = gfx::ColorSpace::CreateREC601();
[email protected]4934d362012-11-22 22:04:53284
danakj880b80ed2016-12-07 01:27:01285 int child_id = 30;
286 int root_id = 14;
danakj112d3a102015-04-14 18:24:49287
[email protected]ae6b1a72013-06-25 18:49:29288 FilterOperations arbitrary_filters1;
[email protected]1dc7943e2013-09-26 04:41:48289 arbitrary_filters1.Append(
fsamuelf76098e2016-05-18 17:26:51290 FilterOperation::CreateGrayscaleFilter(arbitrary_float1));
291 arbitrary_filters1.Append(cc::FilterOperation::CreateReferenceFilter(
292 SkBlurImageFilter::Make(arbitrary_sigma, arbitrary_sigma, nullptr)));
[email protected]4934d362012-11-22 22:04:53293
[email protected]ae6b1a72013-06-25 18:49:29294 FilterOperations arbitrary_filters2;
fsamuelf76098e2016-05-18 17:26:51295 arbitrary_filters2.Append(
296 FilterOperation::CreateBrightnessFilter(arbitrary_float2));
[email protected]4934d362012-11-22 22:04:53297
dcheng4ac58c7a2016-04-09 04:51:48298 std::unique_ptr<RenderPass> child_pass_in = RenderPass::Create();
danakj112d3a102015-04-14 18:24:49299 child_pass_in->SetAll(child_id, arbitrary_rect2, arbitrary_rect3,
ajumaa26e58452016-12-15 22:35:01300 arbitrary_matrix2, arbitrary_filters1,
301 arbitrary_filters2, arbitrary_bool2);
danakj112d3a102015-04-14 18:24:49302
dcheng4ac58c7a2016-04-09 04:51:48303 std::unique_ptr<RenderPass> child_pass_cmp = RenderPass::Create();
danakj112d3a102015-04-14 18:24:49304 child_pass_cmp->SetAll(child_id, arbitrary_rect2, arbitrary_rect3,
ajumaa26e58452016-12-15 22:35:01305 arbitrary_matrix2, arbitrary_filters1,
306 arbitrary_filters2, arbitrary_bool2);
danakj112d3a102015-04-14 18:24:49307
dcheng4ac58c7a2016-04-09 04:51:48308 std::unique_ptr<RenderPass> pass_in = RenderPass::Create();
danakj112d3a102015-04-14 18:24:49309 pass_in->SetAll(root_id, arbitrary_rect1, arbitrary_rect2, arbitrary_matrix1,
ajumaa26e58452016-12-15 22:35:01310 arbitrary_filters2, arbitrary_filters1, arbitrary_bool1);
[email protected]2b7f3892014-05-08 01:45:18311
312 SharedQuadState* shared_state1_in = pass_in->CreateAndAppendSharedQuadState();
danakj112d3a102015-04-14 18:24:49313 shared_state1_in->SetAll(arbitrary_matrix1, arbitrary_size1, arbitrary_rect1,
314 arbitrary_rect2, arbitrary_bool1, arbitrary_float1,
315 arbitrary_blend_mode1, arbitrary_context_id1);
[email protected]2b7f3892014-05-08 01:45:18316
dcheng4ac58c7a2016-04-09 04:51:48317 std::unique_ptr<RenderPass> pass_cmp = RenderPass::Create();
danakj112d3a102015-04-14 18:24:49318 pass_cmp->SetAll(root_id, arbitrary_rect1, arbitrary_rect2, arbitrary_matrix1,
ajumaa26e58452016-12-15 22:35:01319 arbitrary_filters2, arbitrary_filters1, arbitrary_bool1);
[email protected]2b7f3892014-05-08 01:45:18320
321 SharedQuadState* shared_state1_cmp =
322 pass_cmp->CreateAndAppendSharedQuadState();
fsamuel95998762016-06-02 11:22:22323 *shared_state1_cmp = *shared_state1_in;
[email protected]4934d362012-11-22 22:04:53324
[email protected]3b85fd92014-07-10 00:00:02325 DebugBorderDrawQuad* debugborder_in =
326 pass_in->CreateAndAppendDrawQuad<DebugBorderDrawQuad>();
fsamuelf76098e2016-05-18 17:26:51327 debugborder_in->SetAll(shared_state1_in, arbitrary_rect3,
[email protected]8e1da692013-10-12 17:11:30328 arbitrary_rect1_inside_rect3,
fsamuelf76098e2016-05-18 17:26:51329 arbitrary_rect2_inside_rect3, arbitrary_bool1,
330 arbitrary_color, arbitrary_int);
[email protected]3b85fd92014-07-10 00:00:02331 pass_cmp->CopyFromAndAppendDrawQuad(debugborder_in,
332 debugborder_in->shared_quad_state);
[email protected]4934d362012-11-22 22:04:53333
[email protected]2b7f3892014-05-08 01:45:18334 SharedQuadState* shared_state2_in = pass_in->CreateAndAppendSharedQuadState();
danakj112d3a102015-04-14 18:24:49335 shared_state2_in->SetAll(arbitrary_matrix2, arbitrary_size2, arbitrary_rect2,
336 arbitrary_rect3, arbitrary_bool1, arbitrary_float2,
337 arbitrary_blend_mode2, arbitrary_context_id2);
[email protected]2b7f3892014-05-08 01:45:18338 SharedQuadState* shared_state2_cmp =
339 pass_cmp->CreateAndAppendSharedQuadState();
fsamuel95998762016-06-02 11:22:22340 *shared_state2_cmp = *shared_state2_in;
[email protected]cbe94b7a2013-11-13 11:03:37341
[email protected]3b85fd92014-07-10 00:00:02342 RenderPassDrawQuad* renderpass_in =
343 pass_in->CreateAndAppendDrawQuad<RenderPassDrawQuad>();
danakj112d3a102015-04-14 18:24:49344 renderpass_in->SetAll(
345 shared_state2_in, arbitrary_rect1, arbitrary_rect2_inside_rect1,
346 arbitrary_rect1_inside_rect1, arbitrary_bool1, child_id,
347 arbitrary_resourceid2, arbitrary_vector2df1, arbitrary_size1,
ajumaa26e58452016-12-15 22:35:01348 arbitrary_vector2df2, arbitrary_pointf2);
[email protected]3b85fd92014-07-10 00:00:02349 pass_cmp->CopyFromAndAppendRenderPassDrawQuad(
fsamuelf76098e2016-05-18 17:26:51350 renderpass_in, renderpass_in->shared_quad_state,
[email protected]3b85fd92014-07-10 00:00:02351 renderpass_in->render_pass_id);
[email protected]4934d362012-11-22 22:04:53352
[email protected]2b7f3892014-05-08 01:45:18353 SharedQuadState* shared_state3_in = pass_in->CreateAndAppendSharedQuadState();
danakj112d3a102015-04-14 18:24:49354 shared_state3_in->SetAll(arbitrary_matrix1, arbitrary_size3, arbitrary_rect3,
355 arbitrary_rect1, arbitrary_bool1, arbitrary_float3,
356 arbitrary_blend_mode3, arbitrary_context_id3);
[email protected]2b7f3892014-05-08 01:45:18357 SharedQuadState* shared_state3_cmp =
358 pass_cmp->CreateAndAppendSharedQuadState();
fsamuel95998762016-06-02 11:22:22359 *shared_state3_cmp = *shared_state3_in;
[email protected]4934d362012-11-22 22:04:53360
[email protected]3b85fd92014-07-10 00:00:02361 SolidColorDrawQuad* solidcolor_in =
362 pass_in->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
fsamuelf76098e2016-05-18 17:26:51363 solidcolor_in->SetAll(shared_state3_in, arbitrary_rect3,
[email protected]8e1da692013-10-12 17:11:30364 arbitrary_rect1_inside_rect3,
fsamuelf76098e2016-05-18 17:26:51365 arbitrary_rect2_inside_rect3, arbitrary_bool1,
366 arbitrary_color, arbitrary_bool2);
[email protected]3b85fd92014-07-10 00:00:02367 pass_cmp->CopyFromAndAppendDrawQuad(solidcolor_in,
368 solidcolor_in->shared_quad_state);
[email protected]4934d362012-11-22 22:04:53369
[email protected]3b85fd92014-07-10 00:00:02370 StreamVideoDrawQuad* streamvideo_in =
371 pass_in->CreateAndAppendDrawQuad<StreamVideoDrawQuad>();
achaulkf89f5942015-06-10 17:01:35372 streamvideo_in->SetAll(
373 shared_state3_in, arbitrary_rect2, arbitrary_rect2_inside_rect2,
374 arbitrary_rect1_inside_rect2, arbitrary_bool1, arbitrary_resourceid2,
ccameron268c09fd2015-10-08 20:23:46375 arbitrary_size1, arbitrary_matrix1);
[email protected]3b85fd92014-07-10 00:00:02376 pass_cmp->CopyFromAndAppendDrawQuad(streamvideo_in,
377 streamvideo_in->shared_quad_state);
[email protected]4934d362012-11-22 22:04:53378
staraz7d7f6eb2016-11-11 00:19:17379 cc::SurfaceId arbitrary_surface_id(
380 kArbitraryFrameSinkId,
381 cc::LocalFrameId(3, base::UnguessableToken::Create()));
[email protected]3b85fd92014-07-10 00:00:02382 SurfaceDrawQuad* surface_in =
383 pass_in->CreateAndAppendDrawQuad<SurfaceDrawQuad>();
fsamuelf76098e2016-05-18 17:26:51384 surface_in->SetAll(shared_state3_in, arbitrary_rect2,
385 arbitrary_rect2_inside_rect2, arbitrary_rect1_inside_rect2,
386 arbitrary_bool1, arbitrary_surface_id);
[email protected]3b85fd92014-07-10 00:00:02387 pass_cmp->CopyFromAndAppendDrawQuad(surface_in,
388 surface_in->shared_quad_state);
[email protected]78d30122014-01-17 06:32:36389
[email protected]3b85fd92014-07-10 00:00:02390 TextureDrawQuad* texture_in =
391 pass_in->CreateAndAppendDrawQuad<TextureDrawQuad>();
jbauman0c1bf21132016-05-19 19:20:07392 texture_in->SetAll(shared_state3_in, arbitrary_rect2,
393 arbitrary_rect2_inside_rect2, arbitrary_rect1_inside_rect2,
394 arbitrary_bool1, arbitrary_resourceid1, arbitrary_size1,
395 arbitrary_bool2, arbitrary_pointf1, arbitrary_pointf2,
396 arbitrary_color, arbitrary_float_array, arbitrary_bool4,
397 arbitrary_bool5, arbitrary_bool6);
[email protected]3b85fd92014-07-10 00:00:02398 pass_cmp->CopyFromAndAppendDrawQuad(texture_in,
399 texture_in->shared_quad_state);
[email protected]61df9d82013-01-30 02:32:42400
[email protected]3b85fd92014-07-10 00:00:02401 TileDrawQuad* tile_in = pass_in->CreateAndAppendDrawQuad<TileDrawQuad>();
fsamuelf76098e2016-05-18 17:26:51402 tile_in->SetAll(shared_state3_in, arbitrary_rect2,
403 arbitrary_rect2_inside_rect2, arbitrary_rect1_inside_rect2,
404 arbitrary_bool1, arbitrary_resourceid3, arbitrary_rectf1,
405 arbitrary_size1, arbitrary_bool2, arbitrary_bool3);
[email protected]3b85fd92014-07-10 00:00:02406 pass_cmp->CopyFromAndAppendDrawQuad(tile_in, tile_in->shared_quad_state);
[email protected]61df9d82013-01-30 02:32:42407
[email protected]3b85fd92014-07-10 00:00:02408 YUVVideoDrawQuad* yuvvideo_in =
409 pass_in->CreateAndAppendDrawQuad<YUVVideoDrawQuad>();
revemanb71e3992015-05-12 23:01:51410 yuvvideo_in->SetAll(
411 shared_state3_in, arbitrary_rect1, arbitrary_rect2_inside_rect1,
412 arbitrary_rect1_inside_rect1, arbitrary_bool1, arbitrary_rectf1,
413 arbitrary_rectf2, arbitrary_size1, arbitrary_size2, arbitrary_resourceid1,
414 arbitrary_resourceid2, arbitrary_resourceid3, arbitrary_resourceid4,
hubbeaf57af302016-08-11 10:42:32415 arbitrary_color_space, arbitrary_video_color_space, arbitrary_float1,
416 arbitrary_float2, arbitrary_int);
[email protected]3b85fd92014-07-10 00:00:02417 pass_cmp->CopyFromAndAppendDrawQuad(yuvvideo_in,
418 yuvvideo_in->shared_quad_state);
[email protected]4934d362012-11-22 22:04:53419
420 // Make sure the in and cmp RenderPasses match.
danakj112d3a102015-04-14 18:24:49421 Compare(child_pass_cmp.get(), child_pass_in.get());
422 ASSERT_EQ(0u, child_pass_in->shared_quad_state_list.size());
423 ASSERT_EQ(0u, child_pass_in->quad_list.size());
[email protected]4934d362012-11-22 22:04:53424 Compare(pass_cmp.get(), pass_in.get());
425 ASSERT_EQ(3u, pass_in->shared_quad_state_list.size());
ccameron648c9112016-05-18 23:44:07426 ASSERT_EQ(8u, pass_in->quad_list.size());
weiliangc808f70f2014-10-03 22:53:15427 for (cc::SharedQuadStateList::ConstIterator
428 cmp_iterator = pass_cmp->shared_quad_state_list.begin(),
429 in_iterator = pass_in->shared_quad_state_list.begin();
430 in_iterator != pass_in->shared_quad_state_list.end();
431 ++cmp_iterator, ++in_iterator) {
weiliangc48805fce2014-10-29 20:30:12432 Compare(*cmp_iterator, *in_iterator);
[email protected]4934d362012-11-22 22:04:53433 }
weiliangc7eb7ee62014-10-07 00:04:40434 for (auto in_iter = pass_in->quad_list.cbegin(),
435 cmp_iter = pass_cmp->quad_list.cbegin();
fsamuelf76098e2016-05-18 17:26:51436 in_iter != pass_in->quad_list.cend(); ++in_iter, ++cmp_iter)
weiliangc48805fce2014-10-29 20:30:12437 Compare(*cmp_iter, *in_iter);
weiliangc032e929d2014-09-26 01:55:01438
[email protected]61df9d82013-01-30 02:32:42439 for (size_t i = 1; i < pass_in->quad_list.size(); ++i) {
[email protected]4934d362012-11-22 22:04:53440 bool same_shared_quad_state_cmp =
weiliangc032e929d2014-09-26 01:55:01441 pass_cmp->quad_list.ElementAt(i)->shared_quad_state ==
442 pass_cmp->quad_list.ElementAt(i - 1)->shared_quad_state;
[email protected]4934d362012-11-22 22:04:53443 bool same_shared_quad_state_in =
weiliangc032e929d2014-09-26 01:55:01444 pass_in->quad_list.ElementAt(i)->shared_quad_state ==
445 pass_in->quad_list.ElementAt(i - 1)->shared_quad_state;
[email protected]4934d362012-11-22 22:04:53446 EXPECT_EQ(same_shared_quad_state_cmp, same_shared_quad_state_in);
447 }
448
samansce5c3c32016-11-18 13:47:34449 CompositorFrame frame_in;
dchengf63a1252015-12-26 20:43:13450 frame_in.render_pass_list.push_back(std::move(child_pass_in));
451 frame_in.render_pass_list.push_back(std::move(pass_in));
[email protected]4934d362012-11-22 22:04:53452
samansce5c3c32016-11-18 13:47:34453 IPC::ParamTraits<CompositorFrame>::Write(&msg, frame_in);
[email protected]bca159072012-12-04 00:52:44454
samansce5c3c32016-11-18 13:47:34455 CompositorFrame frame_out;
brettwbd4d7112015-06-03 04:29:25456 base::PickleIterator iter(msg);
samansce5c3c32016-11-18 13:47:34457 EXPECT_TRUE(IPC::ParamTraits<CompositorFrame>::Read(&msg, &iter, &frame_out));
[email protected]bca159072012-12-04 00:52:44458
[email protected]4934d362012-11-22 22:04:53459 // Make sure the out and cmp RenderPasses match.
dcheng4ac58c7a2016-04-09 04:51:48460 std::unique_ptr<RenderPass> child_pass_out =
dchengf63a1252015-12-26 20:43:13461 std::move(frame_out.render_pass_list[0]);
danakj112d3a102015-04-14 18:24:49462 Compare(child_pass_cmp.get(), child_pass_out.get());
463 ASSERT_EQ(0u, child_pass_out->shared_quad_state_list.size());
464 ASSERT_EQ(0u, child_pass_out->quad_list.size());
dcheng4ac58c7a2016-04-09 04:51:48465 std::unique_ptr<RenderPass> pass_out =
466 std::move(frame_out.render_pass_list[1]);
[email protected]4934d362012-11-22 22:04:53467 Compare(pass_cmp.get(), pass_out.get());
468 ASSERT_EQ(3u, pass_out->shared_quad_state_list.size());
ccameron648c9112016-05-18 23:44:07469 ASSERT_EQ(8u, pass_out->quad_list.size());
weiliangc808f70f2014-10-03 22:53:15470 for (cc::SharedQuadStateList::ConstIterator
471 cmp_iterator = pass_cmp->shared_quad_state_list.begin(),
472 out_iterator = pass_out->shared_quad_state_list.begin();
473 out_iterator != pass_out->shared_quad_state_list.end();
474 ++cmp_iterator, ++out_iterator) {
weiliangc48805fce2014-10-29 20:30:12475 Compare(*cmp_iterator, *out_iterator);
[email protected]4934d362012-11-22 22:04:53476 }
weiliangc7eb7ee62014-10-07 00:04:40477 for (auto out_iter = pass_out->quad_list.cbegin(),
478 cmp_iter = pass_cmp->quad_list.cbegin();
fsamuelf76098e2016-05-18 17:26:51479 out_iter != pass_out->quad_list.cend(); ++out_iter, ++cmp_iter)
weiliangc48805fce2014-10-29 20:30:12480 Compare(*cmp_iter, *out_iter);
weiliangc032e929d2014-09-26 01:55:01481
[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 =
weiliangc032e929d2014-09-26 01:55:01484 pass_cmp->quad_list.ElementAt(i)->shared_quad_state ==
485 pass_cmp->quad_list.ElementAt(i - 1)->shared_quad_state;
[email protected]4934d362012-11-22 22:04:53486 bool same_shared_quad_state_out =
weiliangc032e929d2014-09-26 01:55:01487 pass_out->quad_list.ElementAt(i)->shared_quad_state ==
488 pass_out->quad_list.ElementAt(i - 1)->shared_quad_state;
[email protected]4934d362012-11-22 22:04:53489 EXPECT_EQ(same_shared_quad_state_cmp, same_shared_quad_state_out);
490 }
491}
[email protected]bca159072012-12-04 00:52:44492
fsamuelf76098e2016-05-18 17:26:51493TEST_F(CCParamTraitsTest, UnusedSharedQuadStates) {
dcheng4ac58c7a2016-04-09 04:51:48494 std::unique_ptr<RenderPass> pass_in = RenderPass::Create();
ajumaa26e58452016-12-15 22:35:01495 pass_in->SetAll(1, gfx::Rect(100, 100), gfx::Rect(), gfx::Transform(),
496 FilterOperations(), FilterOperations(), false);
[email protected]cbe94b7a2013-11-13 11:03:37497
498 // The first SharedQuadState is used.
[email protected]2b7f3892014-05-08 01:45:18499 SharedQuadState* shared_state1_in = pass_in->CreateAndAppendSharedQuadState();
fsamuelf76098e2016-05-18 17:26:51500 shared_state1_in->SetAll(gfx::Transform(), gfx::Size(1, 1), gfx::Rect(),
reedcc9c70f2016-11-22 04:26:01501 gfx::Rect(), false, 1.f, SkBlendMode::kSrcOver, 0);
[email protected]cbe94b7a2013-11-13 11:03:37502
danakja8f1ac32015-08-05 18:46:57503 SolidColorDrawQuad* quad1 =
504 pass_in->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
danakje1419ce2015-03-04 21:26:27505 quad1->SetAll(shared_state1_in, gfx::Rect(10, 10), gfx::Rect(10, 10),
danakja8f1ac32015-08-05 18:46:57506 gfx::Rect(10, 10), false, SK_ColorRED, false);
[email protected]cbe94b7a2013-11-13 11:03:37507
508 // The second and third SharedQuadStates are not used.
[email protected]2b7f3892014-05-08 01:45:18509 SharedQuadState* shared_state2_in = pass_in->CreateAndAppendSharedQuadState();
fsamuelf76098e2016-05-18 17:26:51510 shared_state2_in->SetAll(gfx::Transform(), gfx::Size(2, 2), gfx::Rect(),
reedcc9c70f2016-11-22 04:26:01511 gfx::Rect(), false, 1.f, SkBlendMode::kSrcOver, 0);
[email protected]cbe94b7a2013-11-13 11:03:37512
[email protected]2b7f3892014-05-08 01:45:18513 SharedQuadState* shared_state3_in = pass_in->CreateAndAppendSharedQuadState();
fsamuelf76098e2016-05-18 17:26:51514 shared_state3_in->SetAll(gfx::Transform(), gfx::Size(3, 3), gfx::Rect(),
reedcc9c70f2016-11-22 04:26:01515 gfx::Rect(), false, 1.f, SkBlendMode::kSrcOver, 0);
[email protected]cbe94b7a2013-11-13 11:03:37516
517 // The fourth SharedQuadState is used.
[email protected]2b7f3892014-05-08 01:45:18518 SharedQuadState* shared_state4_in = pass_in->CreateAndAppendSharedQuadState();
fsamuelf76098e2016-05-18 17:26:51519 shared_state4_in->SetAll(gfx::Transform(), gfx::Size(4, 4), gfx::Rect(),
reedcc9c70f2016-11-22 04:26:01520 gfx::Rect(), false, 1.f, SkBlendMode::kSrcOver, 0);
[email protected]cbe94b7a2013-11-13 11:03:37521
danakja8f1ac32015-08-05 18:46:57522 SolidColorDrawQuad* quad2 =
523 pass_in->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
danakje1419ce2015-03-04 21:26:27524 quad2->SetAll(shared_state4_in, gfx::Rect(10, 10), gfx::Rect(10, 10),
danakja8f1ac32015-08-05 18:46:57525 gfx::Rect(10, 10), false, SK_ColorRED, false);
[email protected]cbe94b7a2013-11-13 11:03:37526
527 // The fifth is not used again.
[email protected]2b7f3892014-05-08 01:45:18528 SharedQuadState* shared_state5_in = pass_in->CreateAndAppendSharedQuadState();
fsamuelf76098e2016-05-18 17:26:51529 shared_state5_in->SetAll(gfx::Transform(), gfx::Size(5, 5), gfx::Rect(),
reedcc9c70f2016-11-22 04:26:01530 gfx::Rect(), false, 1.f, SkBlendMode::kSrcOver, 0);
[email protected]cbe94b7a2013-11-13 11:03:37531
[email protected]cbe94b7a2013-11-13 11:03:37532 // 5 SharedQuadStates go in.
533 ASSERT_EQ(5u, pass_in->shared_quad_state_list.size());
534 ASSERT_EQ(2u, pass_in->quad_list.size());
535
samansce5c3c32016-11-18 13:47:34536 CompositorFrame frame_in;
dchengf63a1252015-12-26 20:43:13537 frame_in.render_pass_list.push_back(std::move(pass_in));
[email protected]cbe94b7a2013-11-13 11:03:37538
539 IPC::Message msg(1, 2, IPC::Message::PRIORITY_NORMAL);
samansce5c3c32016-11-18 13:47:34540 IPC::ParamTraits<CompositorFrame>::Write(&msg, frame_in);
[email protected]cbe94b7a2013-11-13 11:03:37541
samansce5c3c32016-11-18 13:47:34542 CompositorFrame frame_out;
brettwbd4d7112015-06-03 04:29:25543 base::PickleIterator iter(msg);
samansce5c3c32016-11-18 13:47:34544 EXPECT_TRUE(IPC::ParamTraits<CompositorFrame>::Read(&msg, &iter, &frame_out));
[email protected]cbe94b7a2013-11-13 11:03:37545
dcheng4ac58c7a2016-04-09 04:51:48546 std::unique_ptr<RenderPass> pass_out =
547 std::move(frame_out.render_pass_list[0]);
[email protected]cbe94b7a2013-11-13 11:03:37548
549 // 2 SharedQuadStates come out. The first and fourth SharedQuadStates were
550 // used by quads, and so serialized. Others were not.
551 ASSERT_EQ(2u, pass_out->shared_quad_state_list.size());
552 ASSERT_EQ(2u, pass_out->quad_list.size());
553
danakj64767d902015-06-19 00:10:43554 EXPECT_EQ(gfx::Size(1, 1).ToString(),
555 pass_out->shared_quad_state_list.ElementAt(0)
556 ->quad_layer_bounds.ToString());
557 EXPECT_EQ(gfx::Size(4, 4).ToString(),
558 pass_out->shared_quad_state_list.ElementAt(1)
559 ->quad_layer_bounds.ToString());
[email protected]cbe94b7a2013-11-13 11:03:37560}
561
fsamuelf76098e2016-05-18 17:26:51562TEST_F(CCParamTraitsTest, Resources) {
[email protected]753bb252013-11-04 22:28:12563 IPC::Message msg(1, 2, IPC::Message::PRIORITY_NORMAL);
[email protected]bca159072012-12-04 00:52:44564 gfx::Size arbitrary_size(757, 1281);
lukasza2573ce7d2016-02-16 19:17:22565 gpu::SyncToken arbitrary_token1(gpu::CommandBufferNamespace::GPU_IO, 0,
566 gpu::CommandBufferId::FromUnsafeValue(0x123),
dyen398dd0142016-01-21 22:05:56567 71234838);
568 arbitrary_token1.SetVerifyFlush();
lukasza2573ce7d2016-02-16 19:17:22569 gpu::SyncToken arbitrary_token2(gpu::CommandBufferNamespace::GPU_IO, 0,
570 gpu::CommandBufferId::FromUnsafeValue(0x123),
dyen398dd0142016-01-21 22:05:56571 53589793);
572 arbitrary_token2.SetVerifyFlush();
[email protected]bca159072012-12-04 00:52:44573
[email protected]e0a4d732014-02-15 00:23:26574 GLbyte arbitrary_mailbox1[GL_MAILBOX_SIZE_CHROMIUM] = {
piman02b9c4e2016-11-01 00:25:18575 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6};
[email protected]bca159072012-12-04 00:52:44576
[email protected]e0a4d732014-02-15 00:23:26577 GLbyte arbitrary_mailbox2[GL_MAILBOX_SIZE_CHROMIUM] = {
piman02b9c4e2016-11-01 00:25:18578 0, 9, 8, 7, 6, 5, 4, 3, 2, 1, 9, 7, 5, 3, 1, 2};
[email protected]bca159072012-12-04 00:52:44579
580 TransferableResource arbitrary_resource1;
581 arbitrary_resource1.id = 2178312;
[email protected]27a41fe2013-09-19 05:05:14582 arbitrary_resource1.format = cc::RGBA_8888;
[email protected]80189292013-02-28 01:59:36583 arbitrary_resource1.filter = 53;
[email protected]bca159072012-12-04 00:52:44584 arbitrary_resource1.size = gfx::Size(37189, 123123);
[email protected]df41e252014-02-03 23:39:50585 arbitrary_resource1.mailbox_holder.mailbox.SetName(arbitrary_mailbox1);
586 arbitrary_resource1.mailbox_holder.texture_target = GL_TEXTURE_2D;
dyencc16ed4d2015-11-03 20:03:04587 arbitrary_resource1.mailbox_holder.sync_token = arbitrary_token1;
ccameron268c09fd2015-10-08 20:23:46588 arbitrary_resource1.is_overlay_candidate = true;
liberato304dc192016-12-09 20:55:26589#if defined(OS_ANDROID)
590 arbitrary_resource1.is_backed_by_surface_texture = true;
591 arbitrary_resource1.wants_promotion_hint = true;
592#endif
[email protected]bca159072012-12-04 00:52:44593
594 TransferableResource arbitrary_resource2;
595 arbitrary_resource2.id = 789132;
[email protected]27a41fe2013-09-19 05:05:14596 arbitrary_resource2.format = cc::RGBA_4444;
[email protected]645a47f22013-09-26 05:42:32597 arbitrary_resource2.filter = 47;
[email protected]bca159072012-12-04 00:52:44598 arbitrary_resource2.size = gfx::Size(89123, 23789);
[email protected]df41e252014-02-03 23:39:50599 arbitrary_resource2.mailbox_holder.mailbox.SetName(arbitrary_mailbox2);
600 arbitrary_resource2.mailbox_holder.texture_target = GL_TEXTURE_EXTERNAL_OES;
dyencc16ed4d2015-11-03 20:03:04601 arbitrary_resource2.mailbox_holder.sync_token = arbitrary_token2;
ccameron268c09fd2015-10-08 20:23:46602 arbitrary_resource2.is_overlay_candidate = false;
liberato304dc192016-12-09 20:55:26603#if defined(OS_ANDROID)
604 arbitrary_resource2.is_backed_by_surface_texture = false;
605 arbitrary_resource2.wants_promotion_hint = false;
606#endif
[email protected]bca159072012-12-04 00:52:44607
dcheng4ac58c7a2016-04-09 04:51:48608 std::unique_ptr<RenderPass> renderpass_in = RenderPass::Create();
danakj880b80ed2016-12-07 01:27:01609 renderpass_in->SetNew(1, gfx::Rect(), gfx::Rect(), gfx::Transform());
[email protected]cb7d6492013-10-03 02:40:04610
samansce5c3c32016-11-18 13:47:34611 CompositorFrame frame_in;
[email protected]09831f7f2013-02-27 03:32:15612 frame_in.resource_list.push_back(arbitrary_resource1);
613 frame_in.resource_list.push_back(arbitrary_resource2);
dchengf63a1252015-12-26 20:43:13614 frame_in.render_pass_list.push_back(std::move(renderpass_in));
[email protected]bca159072012-12-04 00:52:44615
samansce5c3c32016-11-18 13:47:34616 IPC::ParamTraits<CompositorFrame>::Write(&msg, frame_in);
[email protected]bca159072012-12-04 00:52:44617
samansce5c3c32016-11-18 13:47:34618 CompositorFrame frame_out;
brettwbd4d7112015-06-03 04:29:25619 base::PickleIterator iter(msg);
samansce5c3c32016-11-18 13:47:34620 EXPECT_TRUE(IPC::ParamTraits<CompositorFrame>::Read(&msg, &iter, &frame_out));
[email protected]bca159072012-12-04 00:52:44621
[email protected]09831f7f2013-02-27 03:32:15622 ASSERT_EQ(2u, frame_out.resource_list.size());
623 Compare(arbitrary_resource1, frame_out.resource_list[0]);
624 Compare(arbitrary_resource2, frame_out.resource_list[1]);
[email protected]bca159072012-12-04 00:52:44625}
626
627} // namespace
628} // namespace content