blob: 43c059e0d52df91b18dd5161af09292d01895987 [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"
danakjb075024f2017-09-08 17:45:4113#include "cc/resources/resource_provider.h"
danakj5e0a12b2017-09-25 17:26:4914#include "components/viz/common/quads/compositor_frame.h"
danakje5805be2017-09-15 19:24:5515#include "components/viz/common/quads/picture_draw_quad.h"
16#include "components/viz/common/quads/render_pass_draw_quad.h"
[email protected]4934d362012-11-22 22:04:5317#include "ipc/ipc_message.h"
18#include "testing/gtest/include/gtest/gtest.h"
19
[email protected]cecc8342014-03-20 21:43:3920#if defined(OS_POSIX)
21#include "base/file_descriptor_posix.h"
22#endif
23
danakj5e0a12b2017-09-25 17:26:4924using viz::CompositorFrame;
Khushal7865b5be2017-11-22 03:12:0625using cc::BlurPaintFilter;
[email protected]ae6b1a72013-06-25 18:49:2926using cc::FilterOperation;
27using cc::FilterOperations;
[email protected]4934d362012-11-22 22:04:5328using cc::ResourceProvider;
[email protected]c8686a02012-11-27 08:29:0029using gfx::Transform;
danakje5805be2017-09-15 19:24:5530using viz::DebugBorderDrawQuad;
31using viz::DrawQuad;
32using viz::PictureDrawQuad;
33using viz::RenderPass;
34using viz::RenderPassDrawQuad;
Fady Samuelc80a4a862017-07-28 10:23:3635using viz::ResourceId;
Alex Zhangabad2292017-08-23 21:55:1936using viz::SharedQuadState;
danakje5805be2017-09-15 19:24:5537using viz::SolidColorDrawQuad;
38using viz::StreamVideoDrawQuad;
39using viz::SurfaceDrawQuad;
40using viz::TextureDrawQuad;
41using viz::TileDrawQuad;
Fady Samuel4f7f0fb32017-07-28 15:33:3742using viz::TransferableResource;
danakje5805be2017-09-15 19:24:5543using viz::YUVVideoDrawQuad;
[email protected]4934d362012-11-22 22:04:5344
[email protected]bca159072012-12-04 00:52:4445namespace content {
46namespace {
47
Fady Samueld5c26182017-07-12 02:43:3348static constexpr viz::FrameSinkId kArbitraryFrameSinkId(1, 1);
fsamuele0f705b2016-10-01 14:07:1449
fsamuelf76098e2016-05-18 17:26:5150class CCParamTraitsTest : public testing::Test {
[email protected]4934d362012-11-22 22:04:5351 protected:
52 void Compare(const RenderPass* a, const RenderPass* b) {
53 EXPECT_EQ(a->id, b->id);
54 EXPECT_EQ(a->output_rect.ToString(), b->output_rect.ToString());
55 EXPECT_EQ(a->damage_rect.ToString(), b->damage_rect.ToString());
56 EXPECT_EQ(a->transform_to_root_target, b->transform_to_root_target);
ajumaa26e58452016-12-15 22:35:0157 EXPECT_EQ(a->filters.size(), b->filters.size());
58 for (size_t i = 0; i < a->filters.size(); ++i) {
59 if (a->filters.at(i).type() != cc::FilterOperation::REFERENCE) {
60 EXPECT_EQ(a->filters.at(i), b->filters.at(i));
61 } else {
62 EXPECT_EQ(b->filters.at(i).type(), cc::FilterOperation::REFERENCE);
Khushal7865b5be2017-11-22 03:12:0663 EXPECT_EQ(a->filters.at(i).image_filter()->count_inputs(),
64 b->filters.at(i).image_filter()->count_inputs());
ajumaa26e58452016-12-15 22:35:0165 }
66 }
67 EXPECT_EQ(a->background_filters.size(), b->background_filters.size());
68 for (size_t i = 0; i < a->background_filters.size(); ++i) {
69 if (a->background_filters.at(i).type() !=
70 cc::FilterOperation::REFERENCE) {
71 EXPECT_EQ(a->background_filters.at(i), b->background_filters.at(i));
72 } else {
73 EXPECT_EQ(b->background_filters.at(i).type(),
74 cc::FilterOperation::REFERENCE);
Khushal7865b5be2017-11-22 03:12:0675 EXPECT_EQ(a->background_filters.at(i).image_filter()->count_inputs(),
76 b->background_filters.at(i).image_filter()->count_inputs());
ajumaa26e58452016-12-15 22:35:0177 }
78 }
ccameron625dae1e2017-02-13 23:44:4479 EXPECT_EQ(a->color_space, b->color_space);
[email protected]4934d362012-11-22 22:04:5380 EXPECT_EQ(a->has_transparent_background, b->has_transparent_background);
[email protected]4934d362012-11-22 22:04:5381 }
82
83 void Compare(const SharedQuadState* a, const SharedQuadState* b) {
danakj64767d902015-06-19 00:10:4384 EXPECT_EQ(a->quad_to_target_transform, b->quad_to_target_transform);
sunxdf0866592017-04-21 17:01:5785 EXPECT_EQ(a->quad_layer_rect, b->quad_layer_rect);
danakj64767d902015-06-19 00:10:4386 EXPECT_EQ(a->visible_quad_layer_rect, b->visible_quad_layer_rect);
[email protected]4934d362012-11-22 22:04:5387 EXPECT_EQ(a->clip_rect, b->clip_rect);
88 EXPECT_EQ(a->is_clipped, b->is_clipped);
89 EXPECT_EQ(a->opacity, b->opacity);
[email protected]7bbeaf4e2013-11-26 10:27:2290 EXPECT_EQ(a->blend_mode, b->blend_mode);
[email protected]a9d4d4f2014-06-19 06:49:2891 EXPECT_EQ(a->sorting_context_id, b->sorting_context_id);
[email protected]4934d362012-11-22 22:04:5392 }
93
danakje5805be2017-09-15 19:24:5594 void Compare(const DrawQuad* a, const DrawQuad* b) {
95 ASSERT_NE(DrawQuad::INVALID, a->material);
[email protected]4934d362012-11-22 22:04:5396 ASSERT_EQ(a->material, b->material);
97 EXPECT_EQ(a->rect.ToString(), b->rect.ToString());
[email protected]4934d362012-11-22 22:04:5398 EXPECT_EQ(a->visible_rect.ToString(), b->visible_rect.ToString());
99 EXPECT_EQ(a->needs_blending, b->needs_blending);
100
101 Compare(a->shared_quad_state, b->shared_quad_state);
102
103 switch (a->material) {
danakje5805be2017-09-15 19:24:55104 case DrawQuad::DEBUG_BORDER:
[email protected]4934d362012-11-22 22:04:53105 Compare(DebugBorderDrawQuad::MaterialCast(a),
106 DebugBorderDrawQuad::MaterialCast(b));
107 break;
danakje5805be2017-09-15 19:24:55108 case DrawQuad::PICTURE_CONTENT:
[email protected]9ee4d3a2013-03-27 17:43:16109 Compare(PictureDrawQuad::MaterialCast(a),
110 PictureDrawQuad::MaterialCast(b));
111 break;
danakje5805be2017-09-15 19:24:55112 case DrawQuad::RENDER_PASS:
[email protected]4934d362012-11-22 22:04:53113 Compare(RenderPassDrawQuad::MaterialCast(a),
114 RenderPassDrawQuad::MaterialCast(b));
115 break;
danakje5805be2017-09-15 19:24:55116 case DrawQuad::TEXTURE_CONTENT:
[email protected]4934d362012-11-22 22:04:53117 Compare(TextureDrawQuad::MaterialCast(a),
118 TextureDrawQuad::MaterialCast(b));
119 break;
danakje5805be2017-09-15 19:24:55120 case DrawQuad::TILED_CONTENT:
fsamuelf76098e2016-05-18 17:26:51121 Compare(TileDrawQuad::MaterialCast(a), TileDrawQuad::MaterialCast(b));
[email protected]4934d362012-11-22 22:04:53122 break;
danakje5805be2017-09-15 19:24:55123 case DrawQuad::SOLID_COLOR:
[email protected]4934d362012-11-22 22:04:53124 Compare(SolidColorDrawQuad::MaterialCast(a),
125 SolidColorDrawQuad::MaterialCast(b));
126 break;
danakje5805be2017-09-15 19:24:55127 case DrawQuad::STREAM_VIDEO_CONTENT:
[email protected]4934d362012-11-22 22:04:53128 Compare(StreamVideoDrawQuad::MaterialCast(a),
129 StreamVideoDrawQuad::MaterialCast(b));
130 break;
danakje5805be2017-09-15 19:24:55131 case DrawQuad::SURFACE_CONTENT:
[email protected]78d30122014-01-17 06:32:36132 Compare(SurfaceDrawQuad::MaterialCast(a),
133 SurfaceDrawQuad::MaterialCast(b));
134 break;
danakje5805be2017-09-15 19:24:55135 case DrawQuad::YUV_VIDEO_CONTENT:
[email protected]4934d362012-11-22 22:04:53136 Compare(YUVVideoDrawQuad::MaterialCast(a),
137 YUVVideoDrawQuad::MaterialCast(b));
138 break;
danakje5805be2017-09-15 19:24:55139 case DrawQuad::INVALID:
[email protected]4934d362012-11-22 22:04:53140 break;
141 }
142 }
143
[email protected]4934d362012-11-22 22:04:53144 void Compare(const DebugBorderDrawQuad* a, const DebugBorderDrawQuad* b) {
145 EXPECT_EQ(a->color, b->color);
146 EXPECT_EQ(a->width, b->width);
147 }
148
[email protected]4934d362012-11-22 22:04:53149 void Compare(const RenderPassDrawQuad* a, const RenderPassDrawQuad* b) {
[email protected]82f93fb2013-04-17 21:42:06150 EXPECT_EQ(a->render_pass_id, b->render_pass_id);
vmpstr0eca2e82015-06-02 22:14:46151 EXPECT_EQ(a->mask_resource_id(), b->mask_resource_id());
sunxd412f9ca62017-02-23 19:49:29152 EXPECT_EQ(a->mask_uv_rect.ToString(), b->mask_uv_rect.ToString());
ennef6f3fbba42014-10-16 18:16:49153 EXPECT_EQ(a->mask_texture_size.ToString(), b->mask_texture_size.ToString());
[email protected]7ac3d492014-08-08 21:25:32154 EXPECT_EQ(a->filters_scale, b->filters_scale);
Stephen White5941ecb02016-08-30 01:28:24155 EXPECT_EQ(a->filters_origin, b->filters_origin);
sunxd412f9ca62017-02-23 19:49:29156 EXPECT_EQ(a->tex_coord_rect, b->tex_coord_rect);
David Reveman33d44ee2017-10-03 07:31:53157 EXPECT_EQ(a->force_anti_aliasing_off, b->force_anti_aliasing_off);
[email protected]4934d362012-11-22 22:04:53158 }
159
160 void Compare(const SolidColorDrawQuad* a, const SolidColorDrawQuad* b) {
161 EXPECT_EQ(a->color, b->color);
[email protected]10a30b12013-05-02 16:42:11162 EXPECT_EQ(a->force_anti_aliasing_off, b->force_anti_aliasing_off);
[email protected]4934d362012-11-22 22:04:53163 }
164
165 void Compare(const StreamVideoDrawQuad* a, const StreamVideoDrawQuad* b) {
vmpstr0eca2e82015-06-02 22:14:46166 EXPECT_EQ(a->resource_id(), b->resource_id());
achaulkf89f5942015-06-10 17:01:35167 EXPECT_EQ(a->resource_size_in_pixels(), b->resource_size_in_pixels());
[email protected]4934d362012-11-22 22:04:53168 EXPECT_EQ(a->matrix, b->matrix);
169 }
170
[email protected]78d30122014-01-17 06:32:36171 void Compare(const SurfaceDrawQuad* a, const SurfaceDrawQuad* b) {
Fady Samuelb47442d2017-10-13 04:17:34172 EXPECT_EQ(a->primary_surface_id, b->primary_surface_id);
173 EXPECT_EQ(a->fallback_surface_id, b->fallback_surface_id);
Fady Samuel926ed772017-09-19 00:51:55174 EXPECT_EQ(a->default_background_color, b->default_background_color);
Fady Samuel3a98969d62017-11-15 02:10:22175 EXPECT_EQ(a->stretch_content_to_fill_bounds,
176 b->stretch_content_to_fill_bounds);
[email protected]78d30122014-01-17 06:32:36177 }
178
[email protected]4934d362012-11-22 22:04:53179 void Compare(const TextureDrawQuad* a, const TextureDrawQuad* b) {
vmpstr0eca2e82015-06-02 22:14:46180 EXPECT_EQ(a->resource_id(), b->resource_id());
achaulkf89f5942015-06-10 17:01:35181 EXPECT_EQ(a->resource_size_in_pixels(), b->resource_size_in_pixels());
[email protected]4934d362012-11-22 22:04:53182 EXPECT_EQ(a->premultiplied_alpha, b->premultiplied_alpha);
[email protected]1fd555b2013-01-18 00:13:21183 EXPECT_EQ(a->uv_top_left, b->uv_top_left);
184 EXPECT_EQ(a->uv_bottom_right, b->uv_bottom_right);
[email protected]d18b4d62013-07-12 05:33:49185 EXPECT_EQ(a->background_color, b->background_color);
[email protected]61df9d82013-01-30 02:32:42186 EXPECT_EQ(a->vertex_opacity[0], b->vertex_opacity[0]);
187 EXPECT_EQ(a->vertex_opacity[1], b->vertex_opacity[1]);
188 EXPECT_EQ(a->vertex_opacity[2], b->vertex_opacity[2]);
189 EXPECT_EQ(a->vertex_opacity[3], b->vertex_opacity[3]);
halliwellaa111282015-05-13 21:58:43190 EXPECT_EQ(a->y_flipped, b->y_flipped);
jackhou10c9af42014-12-04 05:24:44191 EXPECT_EQ(a->nearest_neighbor, b->nearest_neighbor);
jbauman0c1bf21132016-05-19 19:20:07192 EXPECT_EQ(a->secure_output_only, b->secure_output_only);
[email protected]4934d362012-11-22 22:04:53193 }
194
195 void Compare(const TileDrawQuad* a, const TileDrawQuad* b) {
vmpstr0eca2e82015-06-02 22:14:46196 EXPECT_EQ(a->resource_id(), b->resource_id());
[email protected]4934d362012-11-22 22:04:53197 EXPECT_EQ(a->tex_coord_rect, b->tex_coord_rect);
198 EXPECT_EQ(a->texture_size, b->texture_size);
199 EXPECT_EQ(a->swizzle_contents, b->swizzle_contents);
jackhou24229612014-12-13 23:41:00200 EXPECT_EQ(a->nearest_neighbor, b->nearest_neighbor);
David Reveman33d44ee2017-10-03 07:31:53201 EXPECT_EQ(a->force_anti_aliasing_off, b->force_anti_aliasing_off);
[email protected]4934d362012-11-22 22:04:53202 }
203
204 void Compare(const YUVVideoDrawQuad* a, const YUVVideoDrawQuad* b) {
revemanb71e3992015-05-12 23:01:51205 EXPECT_EQ(a->ya_tex_coord_rect, b->ya_tex_coord_rect);
206 EXPECT_EQ(a->uv_tex_coord_rect, b->uv_tex_coord_rect);
magjed7364ff92015-03-27 09:11:08207 EXPECT_EQ(a->ya_tex_size, b->ya_tex_size);
208 EXPECT_EQ(a->uv_tex_size, b->uv_tex_size);
vmpstr0eca2e82015-06-02 22:14:46209 EXPECT_EQ(a->y_plane_resource_id(), b->y_plane_resource_id());
210 EXPECT_EQ(a->u_plane_resource_id(), b->u_plane_resource_id());
211 EXPECT_EQ(a->v_plane_resource_id(), b->v_plane_resource_id());
212 EXPECT_EQ(a->a_plane_resource_id(), b->a_plane_resource_id());
Christopher Cameron2d067612017-11-21 21:15:39213 EXPECT_EQ(a->video_color_space, b->video_color_space);
jbaumanaa35e3e2016-08-03 22:46:32214 EXPECT_EQ(a->bits_per_channel, b->bits_per_channel);
jbauman6abe5582017-06-13 21:22:17215 EXPECT_EQ(a->require_overlay, b->require_overlay);
[email protected]4934d362012-11-22 22:04:53216 }
[email protected]bca159072012-12-04 00:52:44217
218 void Compare(const TransferableResource& a, const TransferableResource& b) {
219 EXPECT_EQ(a.id, b.id);
220 EXPECT_EQ(a.format, b.format);
[email protected]80189292013-02-28 01:59:36221 EXPECT_EQ(a.filter, b.filter);
[email protected]bca159072012-12-04 00:52:44222 EXPECT_EQ(a.size.ToString(), b.size.ToString());
[email protected]df41e252014-02-03 23:39:50223 for (size_t i = 0; i < arraysize(a.mailbox_holder.mailbox.name); ++i) {
224 EXPECT_EQ(a.mailbox_holder.mailbox.name[i],
225 b.mailbox_holder.mailbox.name[i]);
226 }
227 EXPECT_EQ(a.mailbox_holder.texture_target, b.mailbox_holder.texture_target);
dyencc16ed4d2015-11-03 20:03:04228 EXPECT_EQ(a.mailbox_holder.sync_token, b.mailbox_holder.sync_token);
ccameron268c09fd2015-10-08 20:23:46229 EXPECT_EQ(a.is_overlay_candidate, b.is_overlay_candidate);
liberato304dc192016-12-09 20:55:26230#if defined(OS_ANDROID)
231 EXPECT_EQ(a.is_backed_by_surface_texture, b.is_backed_by_surface_texture);
232 EXPECT_EQ(a.wants_promotion_hint, b.wants_promotion_hint);
233#endif
[email protected]bca159072012-12-04 00:52:44234 }
[email protected]4934d362012-11-22 22:04:53235};
236
fsamuelf76098e2016-05-18 17:26:51237TEST_F(CCParamTraitsTest, AllQuads) {
[email protected]753bb252013-11-04 22:28:12238 IPC::Message msg(1, 2, IPC::Message::PRIORITY_NORMAL);
[email protected]4934d362012-11-22 22:04:53239
danakj112d3a102015-04-14 18:24:49240 Transform arbitrary_matrix1;
241 arbitrary_matrix1.Scale(3, 3);
242 arbitrary_matrix1.Translate(-5, 20);
243 arbitrary_matrix1.Rotate(15);
244 Transform arbitrary_matrix2;
245 arbitrary_matrix2.Scale(10, -1);
246 arbitrary_matrix2.Translate(20, 3);
247 arbitrary_matrix2.Rotate(24);
[email protected]4934d362012-11-22 22:04:53248 gfx::Rect arbitrary_rect1(-5, 9, 3, 15);
[email protected]8e1da692013-10-12 17:11:30249 gfx::Rect arbitrary_rect1_inside_rect1(-4, 12, 2, 8);
[email protected]4934d362012-11-22 22:04:53250 gfx::Rect arbitrary_rect2(40, 23, 11, 7);
[email protected]8e1da692013-10-12 17:11:30251 gfx::Rect arbitrary_rect1_inside_rect2(44, 23, 4, 2);
[email protected]4934d362012-11-22 22:04:53252 gfx::Rect arbitrary_rect3(7, -53, 22, 19);
[email protected]8e1da692013-10-12 17:11:30253 gfx::Rect arbitrary_rect2_inside_rect3(12, -51, 5, 12);
[email protected]4934d362012-11-22 22:04:53254 gfx::Size arbitrary_size1(15, 19);
255 gfx::Size arbitrary_size2(3, 99);
[email protected]4934d362012-11-22 22:04:53256 gfx::RectF arbitrary_rectf1(4.2f, -922.1f, 15.6f, 29.5f);
revemanb71e3992015-05-12 23:01:51257 gfx::RectF arbitrary_rectf2(2.1f, -411.05f, 7.8f, 14.75f);
[email protected]61df9d82013-01-30 02:32:42258 gfx::PointF arbitrary_pointf1(31.4f, 15.9f);
259 gfx::PointF arbitrary_pointf2(26.5f, -35.8f);
ennef6f3fbba42014-10-16 18:16:49260 gfx::Vector2dF arbitrary_vector2df2(-8.3f, 0.47f);
[email protected]4934d362012-11-22 22:04:53261 float arbitrary_float1 = 0.7f;
262 float arbitrary_float2 = 0.3f;
263 float arbitrary_float3 = 0.9f;
[email protected]61df9d82013-01-30 02:32:42264 float arbitrary_float_array[4] = {3.5f, 6.2f, 9.3f, 12.3f};
[email protected]4934d362012-11-22 22:04:53265 bool arbitrary_bool1 = true;
266 bool arbitrary_bool2 = false;
[email protected]61df9d82013-01-30 02:32:42267 bool arbitrary_bool3 = true;
jackhou10c9af42014-12-04 05:24:44268 bool arbitrary_bool4 = true;
achaulkf89f5942015-06-10 17:01:35269 bool arbitrary_bool5 = false;
jbauman0c1bf21132016-05-19 19:20:07270 bool arbitrary_bool6 = true;
[email protected]a9d4d4f2014-06-19 06:49:28271 int arbitrary_context_id1 = 12;
272 int arbitrary_context_id2 = 57;
273 int arbitrary_context_id3 = -503;
jbaumanaa35e3e2016-08-03 22:46:32274 int arbitrary_int = 13;
[email protected]4934d362012-11-22 22:04:53275 SkColor arbitrary_color = SkColorSetARGB(25, 36, 47, 58);
reedcc9c70f2016-11-22 04:26:01276 SkBlendMode arbitrary_blend_mode1 = SkBlendMode::kScreen;
277 SkBlendMode arbitrary_blend_mode2 = SkBlendMode::kLighten;
278 SkBlendMode arbitrary_blend_mode3 = SkBlendMode::kOverlay;
jbaumanbbd425e2015-05-19 00:33:35279 ResourceId arbitrary_resourceid1 = 55;
280 ResourceId arbitrary_resourceid2 = 47;
281 ResourceId arbitrary_resourceid3 = 23;
282 ResourceId arbitrary_resourceid4 = 16;
[email protected]a1765672013-08-12 23:45:02283 SkScalar arbitrary_sigma = SkFloatToScalar(2.0f);
ccameron625dae1e2017-02-13 23:44:44284 gfx::ColorSpace arbitrary_color_space = gfx::ColorSpace::CreateREC601();
[email protected]4934d362012-11-22 22:04:53285
danakj880b80ed2016-12-07 01:27:01286 int child_id = 30;
287 int root_id = 14;
danakj112d3a102015-04-14 18:24:49288
[email protected]ae6b1a72013-06-25 18:49:29289 FilterOperations arbitrary_filters1;
[email protected]1dc7943e2013-09-26 04:41:48290 arbitrary_filters1.Append(
fsamuelf76098e2016-05-18 17:26:51291 FilterOperation::CreateGrayscaleFilter(arbitrary_float1));
wutao3be18302017-08-04 18:25:41292 arbitrary_filters1.Append(
293 FilterOperation::CreateBlurFilter(arbitrary_float2));
Khushal7865b5be2017-11-22 03:12:06294 arbitrary_filters1.Append(
295 cc::FilterOperation::CreateReferenceFilter(sk_make_sp<BlurPaintFilter>(
296 arbitrary_sigma, arbitrary_sigma,
297 BlurPaintFilter::TileMode::kClampToBlack_TileMode, nullptr)));
[email protected]4934d362012-11-22 22:04:53298
[email protected]ae6b1a72013-06-25 18:49:29299 FilterOperations arbitrary_filters2;
fsamuelf76098e2016-05-18 17:26:51300 arbitrary_filters2.Append(
301 FilterOperation::CreateBrightnessFilter(arbitrary_float2));
[email protected]4934d362012-11-22 22:04:53302
dcheng4ac58c7a2016-04-09 04:51:48303 std::unique_ptr<RenderPass> child_pass_in = RenderPass::Create();
David Reveman0d1336342017-09-12 17:05:40304 child_pass_in->SetAll(
305 child_id, arbitrary_rect2, arbitrary_rect3, arbitrary_matrix2,
306 arbitrary_filters1, arbitrary_filters2, arbitrary_color_space,
307 arbitrary_bool2, arbitrary_bool3, arbitrary_bool4, arbitrary_bool5);
danakj112d3a102015-04-14 18:24:49308
dcheng4ac58c7a2016-04-09 04:51:48309 std::unique_ptr<RenderPass> child_pass_cmp = RenderPass::Create();
David Reveman0d1336342017-09-12 17:05:40310 child_pass_cmp->SetAll(
311 child_id, arbitrary_rect2, arbitrary_rect3, arbitrary_matrix2,
312 arbitrary_filters1, arbitrary_filters2, arbitrary_color_space,
313 arbitrary_bool2, arbitrary_bool3, arbitrary_bool4, arbitrary_bool5);
danakj112d3a102015-04-14 18:24:49314
dcheng4ac58c7a2016-04-09 04:51:48315 std::unique_ptr<RenderPass> pass_in = RenderPass::Create();
danakj112d3a102015-04-14 18:24:49316 pass_in->SetAll(root_id, arbitrary_rect1, arbitrary_rect2, arbitrary_matrix1,
ccameron625dae1e2017-02-13 23:44:44317 arbitrary_filters2, arbitrary_filters1, arbitrary_color_space,
David Reveman0d1336342017-09-12 17:05:40318 arbitrary_bool1, arbitrary_bool2, arbitrary_bool3,
319 arbitrary_bool4);
[email protected]2b7f3892014-05-08 01:45:18320
321 SharedQuadState* shared_state1_in = pass_in->CreateAndAppendSharedQuadState();
sunxdf0866592017-04-21 17:01:57322 shared_state1_in->SetAll(arbitrary_matrix1, arbitrary_rect1, arbitrary_rect1,
yiyix10141eca2017-09-05 20:36:52323 arbitrary_rect2, arbitrary_bool1, arbitrary_bool2,
324 arbitrary_float1, arbitrary_blend_mode1,
325 arbitrary_context_id1);
[email protected]2b7f3892014-05-08 01:45:18326
dcheng4ac58c7a2016-04-09 04:51:48327 std::unique_ptr<RenderPass> pass_cmp = RenderPass::Create();
danakj112d3a102015-04-14 18:24:49328 pass_cmp->SetAll(root_id, arbitrary_rect1, arbitrary_rect2, arbitrary_matrix1,
ccameron625dae1e2017-02-13 23:44:44329 arbitrary_filters2, arbitrary_filters1,
wutao36850732017-07-29 20:24:07330 arbitrary_color_space, arbitrary_bool1, arbitrary_bool2,
David Reveman0d1336342017-09-12 17:05:40331 arbitrary_bool3, arbitrary_bool4);
[email protected]2b7f3892014-05-08 01:45:18332
333 SharedQuadState* shared_state1_cmp =
334 pass_cmp->CreateAndAppendSharedQuadState();
fsamuel95998762016-06-02 11:22:22335 *shared_state1_cmp = *shared_state1_in;
[email protected]4934d362012-11-22 22:04:53336
[email protected]3b85fd92014-07-10 00:00:02337 DebugBorderDrawQuad* debugborder_in =
338 pass_in->CreateAndAppendDrawQuad<DebugBorderDrawQuad>();
fsamuelf76098e2016-05-18 17:26:51339 debugborder_in->SetAll(shared_state1_in, arbitrary_rect3,
fsamuelf76098e2016-05-18 17:26:51340 arbitrary_rect2_inside_rect3, arbitrary_bool1,
341 arbitrary_color, arbitrary_int);
Weiliang Chena294c582017-08-02 21:35:17342 pass_cmp->CopyFromAndAppendDrawQuad(debugborder_in);
[email protected]4934d362012-11-22 22:04:53343
[email protected]2b7f3892014-05-08 01:45:18344 SharedQuadState* shared_state2_in = pass_in->CreateAndAppendSharedQuadState();
sunxdf0866592017-04-21 17:01:57345 shared_state2_in->SetAll(arbitrary_matrix2, arbitrary_rect2, arbitrary_rect2,
yiyix10141eca2017-09-05 20:36:52346 arbitrary_rect3, arbitrary_bool1, arbitrary_bool1,
347 arbitrary_float2, arbitrary_blend_mode2,
348 arbitrary_context_id2);
[email protected]2b7f3892014-05-08 01:45:18349 SharedQuadState* shared_state2_cmp =
350 pass_cmp->CreateAndAppendSharedQuadState();
fsamuel95998762016-06-02 11:22:22351 *shared_state2_cmp = *shared_state2_in;
[email protected]cbe94b7a2013-11-13 11:03:37352
[email protected]3b85fd92014-07-10 00:00:02353 RenderPassDrawQuad* renderpass_in =
354 pass_in->CreateAndAppendDrawQuad<RenderPassDrawQuad>();
yiyix78ccdd92017-08-29 03:59:46355 renderpass_in->SetAll(shared_state2_in, arbitrary_rect1,
356 arbitrary_rect1_inside_rect1, arbitrary_bool1, child_id,
357 arbitrary_resourceid2, arbitrary_rectf1,
358 arbitrary_size1, arbitrary_vector2df2,
David Reveman33d44ee2017-10-03 07:31:53359 arbitrary_pointf2, arbitrary_rectf1, arbitrary_bool2);
Weiliang Chena294c582017-08-02 21:35:17360 pass_cmp->CopyFromAndAppendRenderPassDrawQuad(renderpass_in,
361 renderpass_in->render_pass_id);
[email protected]4934d362012-11-22 22:04:53362
[email protected]2b7f3892014-05-08 01:45:18363 SharedQuadState* shared_state3_in = pass_in->CreateAndAppendSharedQuadState();
sunxdf0866592017-04-21 17:01:57364 shared_state3_in->SetAll(arbitrary_matrix1, arbitrary_rect3, arbitrary_rect3,
yiyix10141eca2017-09-05 20:36:52365 arbitrary_rect1, arbitrary_bool1, arbitrary_bool2,
366 arbitrary_float3, arbitrary_blend_mode3,
367 arbitrary_context_id3);
[email protected]2b7f3892014-05-08 01:45:18368 SharedQuadState* shared_state3_cmp =
369 pass_cmp->CreateAndAppendSharedQuadState();
fsamuel95998762016-06-02 11:22:22370 *shared_state3_cmp = *shared_state3_in;
[email protected]4934d362012-11-22 22:04:53371
danakje5805be2017-09-15 19:24:55372 auto* solidcolor_in = pass_in->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
fsamuelf76098e2016-05-18 17:26:51373 solidcolor_in->SetAll(shared_state3_in, arbitrary_rect3,
fsamuelf76098e2016-05-18 17:26:51374 arbitrary_rect2_inside_rect3, arbitrary_bool1,
375 arbitrary_color, arbitrary_bool2);
Weiliang Chena294c582017-08-02 21:35:17376 pass_cmp->CopyFromAndAppendDrawQuad(solidcolor_in);
[email protected]4934d362012-11-22 22:04:53377
[email protected]3b85fd92014-07-10 00:00:02378 StreamVideoDrawQuad* streamvideo_in =
379 pass_in->CreateAndAppendDrawQuad<StreamVideoDrawQuad>();
yiyix78ccdd92017-08-29 03:59:46380 streamvideo_in->SetAll(shared_state3_in, arbitrary_rect2,
381 arbitrary_rect1_inside_rect2, arbitrary_bool1,
382 arbitrary_resourceid2, arbitrary_size1,
383 arbitrary_matrix1);
Weiliang Chena294c582017-08-02 21:35:17384 pass_cmp->CopyFromAndAppendDrawQuad(streamvideo_in);
[email protected]4934d362012-11-22 22:04:53385
Fady Samueld5c26182017-07-12 02:43:33386 viz::SurfaceId arbitrary_surface_id(
staraz7d7f6eb2016-11-11 00:19:17387 kArbitraryFrameSinkId,
Fady Samueld5c26182017-07-12 02:43:33388 viz::LocalSurfaceId(3, base::UnguessableToken::Create()));
[email protected]3b85fd92014-07-10 00:00:02389 SurfaceDrawQuad* surface_in =
390 pass_in->CreateAndAppendDrawQuad<SurfaceDrawQuad>();
fsamuelf76098e2016-05-18 17:26:51391 surface_in->SetAll(shared_state3_in, arbitrary_rect2,
yiyix78ccdd92017-08-29 03:59:46392 arbitrary_rect1_inside_rect2, arbitrary_bool1,
Fady Samuel3a98969d62017-11-15 02:10:22393 arbitrary_surface_id, base::nullopt, SK_ColorWHITE, true);
Weiliang Chena294c582017-08-02 21:35:17394 pass_cmp->CopyFromAndAppendDrawQuad(surface_in);
[email protected]78d30122014-01-17 06:32:36395
[email protected]3b85fd92014-07-10 00:00:02396 TextureDrawQuad* texture_in =
397 pass_in->CreateAndAppendDrawQuad<TextureDrawQuad>();
yiyix78ccdd92017-08-29 03:59:46398 texture_in->SetAll(
399 shared_state3_in, arbitrary_rect2, arbitrary_rect1_inside_rect2,
400 arbitrary_bool1, arbitrary_resourceid1, arbitrary_size1, arbitrary_bool2,
401 arbitrary_pointf1, arbitrary_pointf2, arbitrary_color,
402 arbitrary_float_array, arbitrary_bool4, arbitrary_bool5, arbitrary_bool6);
Weiliang Chena294c582017-08-02 21:35:17403 pass_cmp->CopyFromAndAppendDrawQuad(texture_in);
[email protected]61df9d82013-01-30 02:32:42404
[email protected]3b85fd92014-07-10 00:00:02405 TileDrawQuad* tile_in = pass_in->CreateAndAppendDrawQuad<TileDrawQuad>();
fsamuelf76098e2016-05-18 17:26:51406 tile_in->SetAll(shared_state3_in, arbitrary_rect2,
yiyix78ccdd92017-08-29 03:59:46407 arbitrary_rect1_inside_rect2, arbitrary_bool1,
408 arbitrary_resourceid3, arbitrary_rectf1, arbitrary_size1,
David Reveman33d44ee2017-10-03 07:31:53409 arbitrary_bool2, arbitrary_bool3, arbitrary_bool4);
Weiliang Chena294c582017-08-02 21:35:17410 pass_cmp->CopyFromAndAppendDrawQuad(tile_in);
[email protected]61df9d82013-01-30 02:32:42411
[email protected]3b85fd92014-07-10 00:00:02412 YUVVideoDrawQuad* yuvvideo_in =
413 pass_in->CreateAndAppendDrawQuad<YUVVideoDrawQuad>();
revemanb71e3992015-05-12 23:01:51414 yuvvideo_in->SetAll(
yiyix78ccdd92017-08-29 03:59:46415 shared_state3_in, arbitrary_rect1, arbitrary_rect1_inside_rect1,
416 arbitrary_bool1, arbitrary_rectf1, arbitrary_rectf2, arbitrary_size1,
417 arbitrary_size2, arbitrary_resourceid1, arbitrary_resourceid2,
Christopher Cameron2d067612017-11-21 21:15:39418 arbitrary_resourceid3, arbitrary_resourceid4, arbitrary_color_space,
419 arbitrary_float1, arbitrary_float2, arbitrary_int, arbitrary_bool2);
Weiliang Chena294c582017-08-02 21:35:17420 pass_cmp->CopyFromAndAppendDrawQuad(yuvvideo_in);
[email protected]4934d362012-11-22 22:04:53421
422 // Make sure the in and cmp RenderPasses match.
danakj112d3a102015-04-14 18:24:49423 Compare(child_pass_cmp.get(), child_pass_in.get());
424 ASSERT_EQ(0u, child_pass_in->shared_quad_state_list.size());
425 ASSERT_EQ(0u, child_pass_in->quad_list.size());
[email protected]4934d362012-11-22 22:04:53426 Compare(pass_cmp.get(), pass_in.get());
427 ASSERT_EQ(3u, pass_in->shared_quad_state_list.size());
ccameron648c9112016-05-18 23:44:07428 ASSERT_EQ(8u, pass_in->quad_list.size());
danakje5805be2017-09-15 19:24:55429 for (auto cmp_iterator = pass_cmp->shared_quad_state_list.cbegin(),
430 in_iterator = pass_in->shared_quad_state_list.cbegin();
431 in_iterator != pass_in->shared_quad_state_list.cend();
weiliangc808f70f2014-10-03 22:53:15432 ++cmp_iterator, ++in_iterator) {
weiliangc48805fce2014-10-29 20:30:12433 Compare(*cmp_iterator, *in_iterator);
[email protected]4934d362012-11-22 22:04:53434 }
weiliangc7eb7ee62014-10-07 00:04:40435 for (auto in_iter = pass_in->quad_list.cbegin(),
436 cmp_iter = pass_cmp->quad_list.cbegin();
fsamuelf76098e2016-05-18 17:26:51437 in_iter != pass_in->quad_list.cend(); ++in_iter, ++cmp_iter)
weiliangc48805fce2014-10-29 20:30:12438 Compare(*cmp_iter, *in_iter);
weiliangc032e929d2014-09-26 01:55:01439
[email protected]61df9d82013-01-30 02:32:42440 for (size_t i = 1; i < pass_in->quad_list.size(); ++i) {
[email protected]4934d362012-11-22 22:04:53441 bool same_shared_quad_state_cmp =
weiliangc032e929d2014-09-26 01:55:01442 pass_cmp->quad_list.ElementAt(i)->shared_quad_state ==
443 pass_cmp->quad_list.ElementAt(i - 1)->shared_quad_state;
[email protected]4934d362012-11-22 22:04:53444 bool same_shared_quad_state_in =
weiliangc032e929d2014-09-26 01:55:01445 pass_in->quad_list.ElementAt(i)->shared_quad_state ==
446 pass_in->quad_list.ElementAt(i - 1)->shared_quad_state;
[email protected]4934d362012-11-22 22:04:53447 EXPECT_EQ(same_shared_quad_state_cmp, same_shared_quad_state_in);
448 }
449
samansce5c3c32016-11-18 13:47:34450 CompositorFrame frame_in;
dchengf63a1252015-12-26 20:43:13451 frame_in.render_pass_list.push_back(std::move(child_pass_in));
452 frame_in.render_pass_list.push_back(std::move(pass_in));
samans9414c01c2017-04-25 19:06:09453 frame_in.metadata.begin_frame_ack.sequence_number =
Fady Samuelc296f5fb2017-07-21 04:02:19454 viz::BeginFrameArgs::kStartingFrameNumber;
[email protected]4934d362012-11-22 22:04:53455
samansce5c3c32016-11-18 13:47:34456 IPC::ParamTraits<CompositorFrame>::Write(&msg, frame_in);
[email protected]bca159072012-12-04 00:52:44457
samansce5c3c32016-11-18 13:47:34458 CompositorFrame frame_out;
brettwbd4d7112015-06-03 04:29:25459 base::PickleIterator iter(msg);
samansce5c3c32016-11-18 13:47:34460 EXPECT_TRUE(IPC::ParamTraits<CompositorFrame>::Read(&msg, &iter, &frame_out));
[email protected]bca159072012-12-04 00:52:44461
[email protected]4934d362012-11-22 22:04:53462 // Make sure the out and cmp RenderPasses match.
dcheng4ac58c7a2016-04-09 04:51:48463 std::unique_ptr<RenderPass> child_pass_out =
dchengf63a1252015-12-26 20:43:13464 std::move(frame_out.render_pass_list[0]);
danakj112d3a102015-04-14 18:24:49465 Compare(child_pass_cmp.get(), child_pass_out.get());
466 ASSERT_EQ(0u, child_pass_out->shared_quad_state_list.size());
467 ASSERT_EQ(0u, child_pass_out->quad_list.size());
dcheng4ac58c7a2016-04-09 04:51:48468 std::unique_ptr<RenderPass> pass_out =
469 std::move(frame_out.render_pass_list[1]);
[email protected]4934d362012-11-22 22:04:53470 Compare(pass_cmp.get(), pass_out.get());
471 ASSERT_EQ(3u, pass_out->shared_quad_state_list.size());
ccameron648c9112016-05-18 23:44:07472 ASSERT_EQ(8u, pass_out->quad_list.size());
danakje5805be2017-09-15 19:24:55473 for (auto cmp_iterator = pass_cmp->shared_quad_state_list.cbegin(),
474 out_iterator = pass_out->shared_quad_state_list.cbegin();
475 out_iterator != pass_out->shared_quad_state_list.cend();
weiliangc808f70f2014-10-03 22:53:15476 ++cmp_iterator, ++out_iterator) {
weiliangc48805fce2014-10-29 20:30:12477 Compare(*cmp_iterator, *out_iterator);
[email protected]4934d362012-11-22 22:04:53478 }
weiliangc7eb7ee62014-10-07 00:04:40479 for (auto out_iter = pass_out->quad_list.cbegin(),
480 cmp_iter = pass_cmp->quad_list.cbegin();
fsamuelf76098e2016-05-18 17:26:51481 out_iter != pass_out->quad_list.cend(); ++out_iter, ++cmp_iter)
weiliangc48805fce2014-10-29 20:30:12482 Compare(*cmp_iter, *out_iter);
weiliangc032e929d2014-09-26 01:55:01483
[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 =
weiliangc032e929d2014-09-26 01:55:01486 pass_cmp->quad_list.ElementAt(i)->shared_quad_state ==
487 pass_cmp->quad_list.ElementAt(i - 1)->shared_quad_state;
[email protected]4934d362012-11-22 22:04:53488 bool same_shared_quad_state_out =
weiliangc032e929d2014-09-26 01:55:01489 pass_out->quad_list.ElementAt(i)->shared_quad_state ==
490 pass_out->quad_list.ElementAt(i - 1)->shared_quad_state;
[email protected]4934d362012-11-22 22:04:53491 EXPECT_EQ(same_shared_quad_state_cmp, same_shared_quad_state_out);
492 }
493}
[email protected]bca159072012-12-04 00:52:44494
fsamuelf76098e2016-05-18 17:26:51495TEST_F(CCParamTraitsTest, UnusedSharedQuadStates) {
dcheng4ac58c7a2016-04-09 04:51:48496 std::unique_ptr<RenderPass> pass_in = RenderPass::Create();
ajumaa26e58452016-12-15 22:35:01497 pass_in->SetAll(1, gfx::Rect(100, 100), gfx::Rect(), gfx::Transform(),
ccameron625dae1e2017-02-13 23:44:44498 FilterOperations(), FilterOperations(),
David Reveman0d1336342017-09-12 17:05:40499 gfx::ColorSpace::CreateSRGB(), false, false, false, false);
[email protected]cbe94b7a2013-11-13 11:03:37500
501 // The first SharedQuadState is used.
[email protected]2b7f3892014-05-08 01:45:18502 SharedQuadState* shared_state1_in = pass_in->CreateAndAppendSharedQuadState();
sunxdf0866592017-04-21 17:01:57503 shared_state1_in->SetAll(gfx::Transform(), gfx::Rect(1, 1), gfx::Rect(),
yiyix10141eca2017-09-05 20:36:52504 gfx::Rect(), false, true, 1.f, SkBlendMode::kSrcOver,
505 0);
[email protected]cbe94b7a2013-11-13 11:03:37506
danakje5805be2017-09-15 19:24:55507 auto* quad1 = pass_in->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
yiyix78ccdd92017-08-29 03:59:46508 quad1->SetAll(shared_state1_in, gfx::Rect(10, 10), gfx::Rect(10, 10), false,
509 SK_ColorRED, false);
[email protected]cbe94b7a2013-11-13 11:03:37510
511 // The second and third SharedQuadStates are not used.
[email protected]2b7f3892014-05-08 01:45:18512 SharedQuadState* shared_state2_in = pass_in->CreateAndAppendSharedQuadState();
sunxdf0866592017-04-21 17:01:57513 shared_state2_in->SetAll(gfx::Transform(), gfx::Rect(2, 2), gfx::Rect(),
yiyix10141eca2017-09-05 20:36:52514 gfx::Rect(), false, true, 1.f, SkBlendMode::kSrcOver,
515 0);
[email protected]cbe94b7a2013-11-13 11:03:37516
[email protected]2b7f3892014-05-08 01:45:18517 SharedQuadState* shared_state3_in = pass_in->CreateAndAppendSharedQuadState();
sunxdf0866592017-04-21 17:01:57518 shared_state3_in->SetAll(gfx::Transform(), gfx::Rect(3, 3), gfx::Rect(),
yiyix10141eca2017-09-05 20:36:52519 gfx::Rect(), false, true, 1.f, SkBlendMode::kSrcOver,
520 0);
[email protected]cbe94b7a2013-11-13 11:03:37521
522 // The fourth SharedQuadState is used.
[email protected]2b7f3892014-05-08 01:45:18523 SharedQuadState* shared_state4_in = pass_in->CreateAndAppendSharedQuadState();
sunxdf0866592017-04-21 17:01:57524 shared_state4_in->SetAll(gfx::Transform(), gfx::Rect(4, 4), gfx::Rect(),
yiyix10141eca2017-09-05 20:36:52525 gfx::Rect(), false, true, 1.f, SkBlendMode::kSrcOver,
526 0);
[email protected]cbe94b7a2013-11-13 11:03:37527
danakje5805be2017-09-15 19:24:55528 auto* quad2 = pass_in->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
yiyix78ccdd92017-08-29 03:59:46529 quad2->SetAll(shared_state4_in, gfx::Rect(10, 10), gfx::Rect(10, 10), false,
530 SK_ColorRED, false);
[email protected]cbe94b7a2013-11-13 11:03:37531
532 // The fifth is not used again.
[email protected]2b7f3892014-05-08 01:45:18533 SharedQuadState* shared_state5_in = pass_in->CreateAndAppendSharedQuadState();
sunxdf0866592017-04-21 17:01:57534 shared_state5_in->SetAll(gfx::Transform(), gfx::Rect(5, 5), gfx::Rect(),
yiyix10141eca2017-09-05 20:36:52535 gfx::Rect(), false, true, 1.f, SkBlendMode::kSrcOver,
536 0);
[email protected]cbe94b7a2013-11-13 11:03:37537
[email protected]cbe94b7a2013-11-13 11:03:37538 // 5 SharedQuadStates go in.
539 ASSERT_EQ(5u, pass_in->shared_quad_state_list.size());
540 ASSERT_EQ(2u, pass_in->quad_list.size());
541
samansce5c3c32016-11-18 13:47:34542 CompositorFrame frame_in;
dchengf63a1252015-12-26 20:43:13543 frame_in.render_pass_list.push_back(std::move(pass_in));
samans9414c01c2017-04-25 19:06:09544 frame_in.metadata.begin_frame_ack.sequence_number =
Fady Samuelc296f5fb2017-07-21 04:02:19545 viz::BeginFrameArgs::kStartingFrameNumber;
[email protected]cbe94b7a2013-11-13 11:03:37546
547 IPC::Message msg(1, 2, IPC::Message::PRIORITY_NORMAL);
samansce5c3c32016-11-18 13:47:34548 IPC::ParamTraits<CompositorFrame>::Write(&msg, frame_in);
[email protected]cbe94b7a2013-11-13 11:03:37549
samansce5c3c32016-11-18 13:47:34550 CompositorFrame frame_out;
brettwbd4d7112015-06-03 04:29:25551 base::PickleIterator iter(msg);
samansce5c3c32016-11-18 13:47:34552 EXPECT_TRUE(IPC::ParamTraits<CompositorFrame>::Read(&msg, &iter, &frame_out));
[email protected]cbe94b7a2013-11-13 11:03:37553
dcheng4ac58c7a2016-04-09 04:51:48554 std::unique_ptr<RenderPass> pass_out =
555 std::move(frame_out.render_pass_list[0]);
[email protected]cbe94b7a2013-11-13 11:03:37556
557 // 2 SharedQuadStates come out. The first and fourth SharedQuadStates were
558 // used by quads, and so serialized. Others were not.
559 ASSERT_EQ(2u, pass_out->shared_quad_state_list.size());
560 ASSERT_EQ(2u, pass_out->quad_list.size());
561
sunxdf0866592017-04-21 17:01:57562 EXPECT_EQ(gfx::Rect(1, 1).ToString(),
danakj64767d902015-06-19 00:10:43563 pass_out->shared_quad_state_list.ElementAt(0)
sunxdf0866592017-04-21 17:01:57564 ->quad_layer_rect.ToString());
565 EXPECT_EQ(gfx::Rect(4, 4).ToString(),
danakj64767d902015-06-19 00:10:43566 pass_out->shared_quad_state_list.ElementAt(1)
sunxdf0866592017-04-21 17:01:57567 ->quad_layer_rect.ToString());
[email protected]cbe94b7a2013-11-13 11:03:37568}
569
fsamuelf76098e2016-05-18 17:26:51570TEST_F(CCParamTraitsTest, Resources) {
[email protected]753bb252013-11-04 22:28:12571 IPC::Message msg(1, 2, IPC::Message::PRIORITY_NORMAL);
Sunny Sachanandanidb1759e2017-12-20 22:33:21572 gpu::SyncToken arbitrary_token1(gpu::CommandBufferNamespace::GPU_IO,
lukasza2573ce7d2016-02-16 19:17:22573 gpu::CommandBufferId::FromUnsafeValue(0x123),
dyen398dd0142016-01-21 22:05:56574 71234838);
575 arbitrary_token1.SetVerifyFlush();
Sunny Sachanandanidb1759e2017-12-20 22:33:21576 gpu::SyncToken arbitrary_token2(gpu::CommandBufferNamespace::GPU_IO,
lukasza2573ce7d2016-02-16 19:17:22577 gpu::CommandBufferId::FromUnsafeValue(0x123),
dyen398dd0142016-01-21 22:05:56578 53589793);
579 arbitrary_token2.SetVerifyFlush();
[email protected]bca159072012-12-04 00:52:44580
[email protected]e0a4d732014-02-15 00:23:26581 GLbyte arbitrary_mailbox1[GL_MAILBOX_SIZE_CHROMIUM] = {
piman02b9c4e2016-11-01 00:25:18582 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6};
[email protected]bca159072012-12-04 00:52:44583
[email protected]e0a4d732014-02-15 00:23:26584 GLbyte arbitrary_mailbox2[GL_MAILBOX_SIZE_CHROMIUM] = {
piman02b9c4e2016-11-01 00:25:18585 0, 9, 8, 7, 6, 5, 4, 3, 2, 1, 9, 7, 5, 3, 1, 2};
[email protected]bca159072012-12-04 00:52:44586
587 TransferableResource arbitrary_resource1;
588 arbitrary_resource1.id = 2178312;
Fady Samuel555c8d12017-07-07 23:14:09589 arbitrary_resource1.format = viz::RGBA_8888;
[email protected]80189292013-02-28 01:59:36590 arbitrary_resource1.filter = 53;
[email protected]bca159072012-12-04 00:52:44591 arbitrary_resource1.size = gfx::Size(37189, 123123);
[email protected]df41e252014-02-03 23:39:50592 arbitrary_resource1.mailbox_holder.mailbox.SetName(arbitrary_mailbox1);
593 arbitrary_resource1.mailbox_holder.texture_target = GL_TEXTURE_2D;
dyencc16ed4d2015-11-03 20:03:04594 arbitrary_resource1.mailbox_holder.sync_token = arbitrary_token1;
ccameron268c09fd2015-10-08 20:23:46595 arbitrary_resource1.is_overlay_candidate = true;
liberato304dc192016-12-09 20:55:26596#if defined(OS_ANDROID)
597 arbitrary_resource1.is_backed_by_surface_texture = true;
598 arbitrary_resource1.wants_promotion_hint = true;
599#endif
[email protected]bca159072012-12-04 00:52:44600
601 TransferableResource arbitrary_resource2;
602 arbitrary_resource2.id = 789132;
Fady Samuel555c8d12017-07-07 23:14:09603 arbitrary_resource2.format = viz::RGBA_4444;
[email protected]645a47f22013-09-26 05:42:32604 arbitrary_resource2.filter = 47;
[email protected]bca159072012-12-04 00:52:44605 arbitrary_resource2.size = gfx::Size(89123, 23789);
[email protected]df41e252014-02-03 23:39:50606 arbitrary_resource2.mailbox_holder.mailbox.SetName(arbitrary_mailbox2);
607 arbitrary_resource2.mailbox_holder.texture_target = GL_TEXTURE_EXTERNAL_OES;
dyencc16ed4d2015-11-03 20:03:04608 arbitrary_resource2.mailbox_holder.sync_token = arbitrary_token2;
ccameron268c09fd2015-10-08 20:23:46609 arbitrary_resource2.is_overlay_candidate = false;
liberato304dc192016-12-09 20:55:26610#if defined(OS_ANDROID)
611 arbitrary_resource2.is_backed_by_surface_texture = false;
612 arbitrary_resource2.wants_promotion_hint = false;
613#endif
[email protected]bca159072012-12-04 00:52:44614
dcheng4ac58c7a2016-04-09 04:51:48615 std::unique_ptr<RenderPass> renderpass_in = RenderPass::Create();
Chris Harrelson9bdbcce2017-06-02 03:12:14616 renderpass_in->SetNew(1u, gfx::Rect(), gfx::Rect(), gfx::Transform());
[email protected]cb7d6492013-10-03 02:40:04617
samansce5c3c32016-11-18 13:47:34618 CompositorFrame frame_in;
[email protected]09831f7f2013-02-27 03:32:15619 frame_in.resource_list.push_back(arbitrary_resource1);
620 frame_in.resource_list.push_back(arbitrary_resource2);
dchengf63a1252015-12-26 20:43:13621 frame_in.render_pass_list.push_back(std::move(renderpass_in));
samans9414c01c2017-04-25 19:06:09622 frame_in.metadata.begin_frame_ack.sequence_number =
Fady Samuelc296f5fb2017-07-21 04:02:19623 viz::BeginFrameArgs::kStartingFrameNumber;
[email protected]bca159072012-12-04 00:52:44624
samansce5c3c32016-11-18 13:47:34625 IPC::ParamTraits<CompositorFrame>::Write(&msg, frame_in);
[email protected]bca159072012-12-04 00:52:44626
samansce5c3c32016-11-18 13:47:34627 CompositorFrame frame_out;
brettwbd4d7112015-06-03 04:29:25628 base::PickleIterator iter(msg);
samansce5c3c32016-11-18 13:47:34629 EXPECT_TRUE(IPC::ParamTraits<CompositorFrame>::Read(&msg, &iter, &frame_out));
[email protected]bca159072012-12-04 00:52:44630
[email protected]09831f7f2013-02-27 03:32:15631 ASSERT_EQ(2u, frame_out.resource_list.size());
632 Compare(arbitrary_resource1, frame_out.resource_list[0]);
633 Compare(arbitrary_resource2, frame_out.resource_list[1]);
[email protected]bca159072012-12-04 00:52:44634}
635
staraz9afc576b2017-03-01 19:39:25636TEST_F(CCParamTraitsTest, SurfaceInfo) {
637 IPC::Message msg(1, 2, IPC::Message::PRIORITY_NORMAL);
Fady Samueld5c26182017-07-12 02:43:33638 const viz::SurfaceId kArbitrarySurfaceId(
staraz9afc576b2017-03-01 19:39:25639 kArbitraryFrameSinkId,
Fady Samueld5c26182017-07-12 02:43:33640 viz::LocalSurfaceId(3, base::UnguessableToken::Create()));
staraz9afc576b2017-03-01 19:39:25641 constexpr float kArbitraryDeviceScaleFactor = 0.9f;
642 const gfx::Size kArbitrarySize(65, 321);
Fady Samuel1a21156e2017-07-13 04:57:29643 const viz::SurfaceInfo surface_info_in(
staraz9afc576b2017-03-01 19:39:25644 kArbitrarySurfaceId, kArbitraryDeviceScaleFactor, kArbitrarySize);
Fady Samuel1a21156e2017-07-13 04:57:29645 IPC::ParamTraits<viz::SurfaceInfo>::Write(&msg, surface_info_in);
staraz9afc576b2017-03-01 19:39:25646
Fady Samuel1a21156e2017-07-13 04:57:29647 viz::SurfaceInfo surface_info_out;
staraz9afc576b2017-03-01 19:39:25648 base::PickleIterator iter(msg);
649 EXPECT_TRUE(
Fady Samuel1a21156e2017-07-13 04:57:29650 IPC::ParamTraits<viz::SurfaceInfo>::Read(&msg, &iter, &surface_info_out));
staraz9afc576b2017-03-01 19:39:25651
652 ASSERT_EQ(surface_info_in, surface_info_out);
653}
654
[email protected]bca159072012-12-04 00:52:44655} // namespace
656} // namespace content