Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(14)

Side by Side Diff: cc/ipc/quads_struct_traits.h

Issue 2064833002: Implement DrawQuad StructTraits (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed Yuzhu's comments Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/ipc/quads.typemap ('k') | cc/ipc/quads_struct_traits.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2016 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 #ifndef CC_IPC_QUADS_STRUCT_TRAITS_H_
6 #define CC_IPC_QUADS_STRUCT_TRAITS_H_
7
8 #include "cc/ipc/filter_operation_struct_traits.h"
9 #include "cc/ipc/filter_operations_struct_traits.h"
10 #include "cc/ipc/quads.mojom.h"
11 #include "cc/ipc/render_pass_id_struct_traits.h"
12 #include "cc/ipc/surface_id_struct_traits.h"
13 #include "cc/quads/debug_border_draw_quad.h"
14 #include "cc/quads/picture_draw_quad.h"
15 #include "cc/quads/render_pass_draw_quad.h"
16 #include "cc/quads/solid_color_draw_quad.h"
17 #include "cc/quads/stream_video_draw_quad.h"
18 #include "cc/quads/surface_draw_quad.h"
19 #include "cc/quads/texture_draw_quad.h"
20 #include "cc/quads/tile_draw_quad.h"
21 #include "cc/quads/yuv_video_draw_quad.h"
22 #include "ui/gfx/geometry/mojo/geometry_struct_traits.h"
23
24 namespace mojo {
25
26 template <>
27 struct EnumTraits<cc::mojom::Material, cc::DrawQuad::Material> {
28 static cc::mojom::Material ToMojom(cc::DrawQuad::Material material);
29 static bool FromMojom(cc::mojom::Material input, cc::DrawQuad::Material* out);
30 };
31
32 template <>
33 struct StructTraits<cc::mojom::DebugBorderQuadState, cc::DrawQuad> {
34 static bool IsNull(const cc::DrawQuad& input) {
35 return input.material != cc::DrawQuad::DEBUG_BORDER;
36 }
37
38 static void SetToNull(cc::DrawQuad* output) {
39 // There is nothing to deserialize here if the DrawQuad is not a
40 // DebugBorderDrawQuad. If it is, then this should not be called.
41 DCHECK_NE(cc::DrawQuad::DEBUG_BORDER, output->material);
42 }
43
44 static uint32_t color(const cc::DrawQuad& input) {
45 const cc::DebugBorderDrawQuad* quad =
46 cc::DebugBorderDrawQuad::MaterialCast(&input);
47 return quad->color;
48 }
49
50 static int32_t width(const cc::DrawQuad& input) {
51 const cc::DebugBorderDrawQuad* quad =
52 cc::DebugBorderDrawQuad::MaterialCast(&input);
53 return quad->width;
54 }
55
56 static bool Read(cc::mojom::DebugBorderQuadStateDataView data,
57 cc::DrawQuad* out);
58 };
59
60 template <>
61 struct StructTraits<cc::mojom::RenderPassQuadState, cc::DrawQuad> {
62 static bool IsNull(const cc::DrawQuad& quad) {
63 return quad.material != cc::DrawQuad::RENDER_PASS;
64 }
65
66 static void SetToNull(cc::DrawQuad* output) {
67 // There is nothing to deserialize here if the DrawQuad is not a
68 // RenderPassDrawQuad. If it is, then this should not be called.
69 DCHECK_NE(cc::DrawQuad::RENDER_PASS, output->material);
70 }
71
72 static const cc::RenderPassId& render_pass_id(const cc::DrawQuad& input) {
73 const cc::RenderPassDrawQuad* quad =
74 cc::RenderPassDrawQuad::MaterialCast(&input);
75 return quad->render_pass_id;
76 }
77
78 static uint32_t mask_resource_id(const cc::DrawQuad& input) {
79 const cc::RenderPassDrawQuad* quad =
80 cc::RenderPassDrawQuad::MaterialCast(&input);
81 return quad->mask_resource_id();
82 }
83
84 static const gfx::Vector2dF& mask_uv_scale(const cc::DrawQuad& input) {
85 const cc::RenderPassDrawQuad* quad =
86 cc::RenderPassDrawQuad::MaterialCast(&input);
87 return quad->mask_uv_scale;
88 }
89
90 static const gfx::Size& mask_texture_size(const cc::DrawQuad& input) {
91 const cc::RenderPassDrawQuad* quad =
92 cc::RenderPassDrawQuad::MaterialCast(&input);
93 return quad->mask_texture_size;
94 }
95
96 static const cc::FilterOperations& filters(const cc::DrawQuad& input) {
97 const cc::RenderPassDrawQuad* quad =
98 cc::RenderPassDrawQuad::MaterialCast(&input);
99 return quad->filters;
100 }
101
102 static const gfx::Vector2dF& filters_scale(const cc::DrawQuad& input) {
103 const cc::RenderPassDrawQuad* quad =
104 cc::RenderPassDrawQuad::MaterialCast(&input);
105 return quad->filters_scale;
106 }
107
108 static const cc::FilterOperations& background_filters(
109 const cc::DrawQuad& input) {
110 const cc::RenderPassDrawQuad* quad =
111 cc::RenderPassDrawQuad::MaterialCast(&input);
112 return quad->background_filters;
113 }
114
115 static bool Read(cc::mojom::RenderPassQuadStateDataView data,
116 cc::DrawQuad* out);
117 };
118
119 template <>
120 struct StructTraits<cc::mojom::SolidColorQuadState, cc::DrawQuad> {
121 static bool IsNull(const cc::DrawQuad& input) {
122 return input.material != cc::DrawQuad::SOLID_COLOR;
123 }
124
125 static void SetToNull(cc::DrawQuad* output) {
126 // There is nothing to deserialize here if the DrawQuad is not a
127 // SolidColorDrawQuad. If it is, then this should not be called.
128 DCHECK_NE(cc::DrawQuad::SOLID_COLOR, output->material);
129 }
130
131 static uint32_t color(const cc::DrawQuad& input) {
132 const cc::SolidColorDrawQuad* quad =
133 cc::SolidColorDrawQuad::MaterialCast(&input);
134 return quad->color;
135 }
136
137 static bool force_anti_aliasing_off(const cc::DrawQuad& input) {
138 const cc::SolidColorDrawQuad* quad =
139 cc::SolidColorDrawQuad::MaterialCast(&input);
140 return quad->force_anti_aliasing_off;
141 }
142
143 static bool Read(cc::mojom::SolidColorQuadStateDataView data,
144 cc::DrawQuad* out);
145 };
146
147 template <>
148 struct StructTraits<cc::mojom::SurfaceQuadState, cc::DrawQuad> {
149 static bool IsNull(const cc::DrawQuad& input) {
150 return input.material != cc::DrawQuad::SURFACE_CONTENT;
151 }
152
153 static void SetToNull(cc::DrawQuad* output) {
154 // There is nothing to deserialize here if the DrawQuad is not a
155 // SolidColorDrawQuad. If it is, then this should not be called.
yzshen1 2016/06/15 19:47:51 SurfaceDrawQuad?
Fady Samuel 2016/06/15 19:52:40 Done.
156 DCHECK_NE(cc::DrawQuad::SURFACE_CONTENT, output->material);
157 }
158
159 static const cc::SurfaceId& surface(const cc::DrawQuad& input) {
160 const cc::SurfaceDrawQuad* quad = cc::SurfaceDrawQuad::MaterialCast(&input);
161 return quad->surface_id;
162 }
163
164 static bool Read(cc::mojom::SurfaceQuadStateDataView data, cc::DrawQuad* out);
165 };
166
167 template <>
168 struct StructTraits<cc::mojom::TextureQuadState, cc::DrawQuad> {
169 static bool IsNull(const cc::DrawQuad& input) {
170 return input.material != cc::DrawQuad::TEXTURE_CONTENT;
171 }
172
173 static void SetToNull(cc::DrawQuad* output) {
174 // There is nothing to deserialize here if the DrawQuad is not a
175 // TextureContentDrawQuad. If it is, then this should not be called.
176 DCHECK_NE(cc::DrawQuad::TEXTURE_CONTENT, output->material);
177 }
178
179 static uint32_t resource_id(const cc::DrawQuad& input) {
180 const cc::TextureDrawQuad* quad = cc::TextureDrawQuad::MaterialCast(&input);
181 return quad->resource_id();
182 }
183
184 static bool premultiplied_alpha(const cc::DrawQuad& input) {
185 const cc::TextureDrawQuad* quad = cc::TextureDrawQuad::MaterialCast(&input);
186 return quad->premultiplied_alpha;
187 }
188
189 static const gfx::PointF& uv_top_left(const cc::DrawQuad& input) {
190 const cc::TextureDrawQuad* quad = cc::TextureDrawQuad::MaterialCast(&input);
191 return quad->uv_top_left;
192 }
193
194 static const gfx::PointF& uv_bottom_right(const cc::DrawQuad& input) {
195 const cc::TextureDrawQuad* quad = cc::TextureDrawQuad::MaterialCast(&input);
196 return quad->uv_bottom_right;
197 }
198
199 static uint32_t background_color(const cc::DrawQuad& input) {
200 const cc::TextureDrawQuad* quad = cc::TextureDrawQuad::MaterialCast(&input);
201 return quad->background_color;
202 }
203
204 static CArray<float> vertex_opacity(const cc::DrawQuad& input) {
205 const cc::TextureDrawQuad* quad = cc::TextureDrawQuad::MaterialCast(&input);
206 return {4, 4, const_cast<float*>(&quad->vertex_opacity[0])};
207 }
208
209 static bool y_flipped(const cc::DrawQuad& input) {
210 const cc::TextureDrawQuad* quad = cc::TextureDrawQuad::MaterialCast(&input);
211 return quad->y_flipped;
212 }
213
214 static bool nearest_neighbor(const cc::DrawQuad& input) {
215 const cc::TextureDrawQuad* quad = cc::TextureDrawQuad::MaterialCast(&input);
216 return quad->nearest_neighbor;
217 }
218
219 static bool secure_output_only(const cc::DrawQuad& input) {
220 const cc::TextureDrawQuad* quad = cc::TextureDrawQuad::MaterialCast(&input);
221 return quad->secure_output_only;
222 }
223
224 static bool Read(cc::mojom::TextureQuadStateDataView data, cc::DrawQuad* out);
225 };
226
227 template <>
228 struct StructTraits<cc::mojom::TileQuadState, cc::DrawQuad> {
229 static bool IsNull(const cc::DrawQuad& input) {
230 return input.material != cc::DrawQuad::TILED_CONTENT;
231 }
232
233 static void SetToNull(cc::DrawQuad* output) {
234 // There is nothing to deserialize here if the DrawQuad is not a
235 // TileDrawQuad. If it is, then this should not be called.
236 DCHECK_NE(cc::DrawQuad::TILED_CONTENT, output->material);
237 }
238
239 static const gfx::RectF& tex_coord_rect(const cc::DrawQuad& input) {
240 const cc::TileDrawQuad* quad = cc::TileDrawQuad::MaterialCast(&input);
241 return quad->tex_coord_rect;
242 }
243
244 static const gfx::Size& texture_size(const cc::DrawQuad& input) {
245 const cc::TileDrawQuad* quad = cc::TileDrawQuad::MaterialCast(&input);
246 return quad->texture_size;
247 }
248
249 static bool swizzle_contents(const cc::DrawQuad& input) {
250 const cc::TileDrawQuad* quad = cc::TileDrawQuad::MaterialCast(&input);
251 return quad->swizzle_contents;
252 }
253
254 static bool nearest_neighbor(const cc::DrawQuad& input) {
255 const cc::TileDrawQuad* quad = cc::TileDrawQuad::MaterialCast(&input);
256 return quad->nearest_neighbor;
257 }
258
259 static uint32_t resource_id(const cc::DrawQuad& input) {
260 const cc::TileDrawQuad* quad = cc::TileDrawQuad::MaterialCast(&input);
261 return quad->resource_id();
262 }
263
264 static bool Read(cc::mojom::TileQuadStateDataView data, cc::DrawQuad* out);
265 };
266
267 template <>
268 struct StructTraits<cc::mojom::DrawQuad, cc::DrawQuad> {
269 static cc::DrawQuad::Material material(const cc::DrawQuad& quad) {
270 return quad.material;
271 }
272
273 static const gfx::Rect& rect(const cc::DrawQuad& quad) { return quad.rect; }
274
275 static const gfx::Rect& opaque_rect(const cc::DrawQuad& quad) {
276 return quad.opaque_rect;
277 }
278
279 static const gfx::Rect& visible_rect(const cc::DrawQuad& quad) {
280 return quad.visible_rect;
281 }
282
283 static bool needs_blending(const cc::DrawQuad& quad) {
284 return quad.needs_blending;
285 }
286
287 static uint32_t shared_quad_state_index(const cc::DrawQuad& quad) {
288 // TODO(fsamuel): Add shared_quad_state_index field to cc::DrawQuad.
289 return 0;
290 }
291
292 static const cc::DrawQuad& debug_border_quad_state(const cc::DrawQuad& quad) {
293 return quad;
294 }
295
296 static const cc::DrawQuad& render_pass_quad_state(const cc::DrawQuad& quad) {
297 return quad;
298 }
299
300 static const cc::DrawQuad& solid_color_quad_state(const cc::DrawQuad& quad) {
301 return quad;
302 }
303
304 static const cc::DrawQuad& surface_quad_state(const cc::DrawQuad& quad) {
305 return quad;
306 }
307
308 static const cc::DrawQuad& texture_quad_state(const cc::DrawQuad& quad) {
309 return quad;
310 }
311
312 static const cc::DrawQuad& tile_quad_state(const cc::DrawQuad& quad) {
313 return quad;
314 }
315
316 static cc::mojom::StreamVideoQuadStatePtr stream_video_quad_state(
317 const cc::DrawQuad& data) {
318 return nullptr;
319 }
320
321 static cc::mojom::YUVVideoQuadStatePtr yuv_video_quad_state(
322 const cc::DrawQuad& data) {
323 return nullptr;
324 }
325
326 static bool Read(cc::mojom::DrawQuadDataView data, cc::DrawQuad* out);
327 };
328
329 struct QuadListArray {
330 // This is the expected size of the array.
331 size_t size;
332 cc::QuadList* list;
333 };
334
335 template <>
336 struct ArrayTraits<QuadListArray> {
337 using Element = cc::DrawQuad;
338 using Iterator = cc::QuadList::Iterator;
339 using ConstIterator = cc::QuadList::ConstIterator;
340
341 static ConstIterator GetBegin(const QuadListArray& input) {
342 return input.list->begin();
343 }
344 static Iterator GetBegin(QuadListArray& input) { return input.list->begin(); }
345 static void AdvanceIterator(ConstIterator& iterator) { iterator++; }
346 static void AdvanceIterator(Iterator& iterator) { iterator++; }
347 static const Element& GetValue(ConstIterator& iterator) { return **iterator; }
348 static Element& GetValue(Iterator& iterator) { return **iterator; }
349 static size_t GetSize(const QuadListArray& input) {
350 return input.list->size();
351 }
352 static bool Resize(QuadListArray& input, size_t size) {
353 return input.size == size;
354 }
355 };
356
357 template <>
358 struct StructTraits<cc::mojom::QuadList, cc::QuadList> {
359 static void* SetUpContext(const cc::QuadList& quad_list);
360 static void TearDownContext(const cc::QuadList& quad_list, void* context);
361 static const mojo::Array<cc::DrawQuad::Material>& quad_types(
362 const cc::QuadList& quad_list,
363 void* context);
364 static QuadListArray quads(const cc::QuadList& quad_list) {
365 return {quad_list.size(), const_cast<cc::QuadList*>(&quad_list)};
366 }
367 static bool Read(cc::mojom::QuadListDataView data, cc::QuadList* out);
368 };
369
370 } // namespace mojo
371
372 #endif // CC_IPC_QUADS_STRUCT_TRAITS_H_
OLDNEW
« no previous file with comments | « cc/ipc/quads.typemap ('k') | cc/ipc/quads_struct_traits.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698