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

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: Added a TODO 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
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 StructTraits<cc::mojom::DebugBorderQuadState, cc::DrawQuad> {
28 static bool IsNull(const cc::DrawQuad& input) {
29 return input.material != cc::DrawQuad::DEBUG_BORDER;
30 }
31
32 static void SetToNull(cc::DrawQuad* output) {}
yzshen1 2016/06/15 17:12:13 Could you please explain why this can be no-op? (A
Fady Samuel 2016/06/15 19:16:00 Done.
33
34 static uint32_t color(const cc::DrawQuad& input) {
35 const cc::DebugBorderDrawQuad* quad =
36 cc::DebugBorderDrawQuad::MaterialCast(&input);
37 return quad->color;
38 }
39
40 static int32_t width(const cc::DrawQuad& input) {
41 const cc::DebugBorderDrawQuad* quad =
42 cc::DebugBorderDrawQuad::MaterialCast(&input);
43 return quad->width;
44 }
45
46 static bool Read(cc::mojom::DebugBorderQuadStateDataView data,
47 cc::DrawQuad* out);
48 };
49
50 template <>
51 struct StructTraits<cc::mojom::RenderPassQuadState, cc::DrawQuad> {
52 static bool IsNull(const cc::DrawQuad& quad) {
53 return quad.material != cc::DrawQuad::RENDER_PASS;
54 }
55
56 static void SetToNull(cc::DrawQuad* output) {}
57
58 static const cc::RenderPassId& render_pass_id(const cc::DrawQuad& input) {
59 const cc::RenderPassDrawQuad* quad =
60 cc::RenderPassDrawQuad::MaterialCast(&input);
61 return quad->render_pass_id;
62 }
63
64 static uint32_t mask_resource_id(const cc::DrawQuad& input) {
65 const cc::RenderPassDrawQuad* quad =
66 cc::RenderPassDrawQuad::MaterialCast(&input);
67 return quad->mask_resource_id();
68 }
69
70 static const gfx::Vector2dF& mask_uv_scale(const cc::DrawQuad& input) {
71 const cc::RenderPassDrawQuad* quad =
72 cc::RenderPassDrawQuad::MaterialCast(&input);
73 return quad->mask_uv_scale;
74 }
75
76 static const gfx::Size& mask_texture_size(const cc::DrawQuad& input) {
77 const cc::RenderPassDrawQuad* quad =
78 cc::RenderPassDrawQuad::MaterialCast(&input);
79 return quad->mask_texture_size;
80 }
81
82 static const cc::FilterOperations& filters(const cc::DrawQuad& input) {
83 const cc::RenderPassDrawQuad* quad =
84 cc::RenderPassDrawQuad::MaterialCast(&input);
85 return quad->filters;
86 }
87
88 static const gfx::Vector2dF& filters_scale(const cc::DrawQuad& input) {
89 const cc::RenderPassDrawQuad* quad =
90 cc::RenderPassDrawQuad::MaterialCast(&input);
91 return quad->filters_scale;
92 }
93
94 static const cc::FilterOperations& background_filters(
95 const cc::DrawQuad& input) {
96 const cc::RenderPassDrawQuad* quad =
97 cc::RenderPassDrawQuad::MaterialCast(&input);
98 return quad->background_filters;
99 }
100
101 static bool Read(cc::mojom::RenderPassQuadStateDataView data,
102 cc::DrawQuad* out);
103 };
104
105 template <>
106 struct StructTraits<cc::mojom::SolidColorQuadState, cc::DrawQuad> {
107 static bool IsNull(const cc::DrawQuad& input) {
108 return input.material != cc::DrawQuad::SOLID_COLOR;
109 }
110
111 static void SetToNull(cc::DrawQuad* output) {}
112
113 static uint32_t color(const cc::DrawQuad& input) {
114 const cc::SolidColorDrawQuad* quad =
115 cc::SolidColorDrawQuad::MaterialCast(&input);
116 return quad->color;
117 }
118
119 static bool force_anti_aliasing_off(const cc::DrawQuad& input) {
120 const cc::SolidColorDrawQuad* quad =
121 cc::SolidColorDrawQuad::MaterialCast(&input);
122 return quad->force_anti_aliasing_off;
123 }
124
125 static bool Read(cc::mojom::SolidColorQuadStateDataView data,
126 cc::DrawQuad* out);
127 };
128
129 template <>
130 struct StructTraits<cc::mojom::SurfaceQuadState, cc::DrawQuad> {
131 static bool IsNull(const cc::DrawQuad& input) {
132 return input.material != cc::DrawQuad::SURFACE_CONTENT;
133 }
134
135 static void SetToNull(cc::DrawQuad* output) {}
136
137 static const cc::SurfaceId& surface(const cc::DrawQuad& input) {
138 const cc::SurfaceDrawQuad* quad = cc::SurfaceDrawQuad::MaterialCast(&input);
139 return quad->surface_id;
140 }
141
142 static bool Read(cc::mojom::SurfaceQuadStateDataView data, cc::DrawQuad* out);
143 };
144
145 template <>
146 struct StructTraits<cc::mojom::TextureQuadState, cc::DrawQuad> {
147 static bool IsNull(const cc::DrawQuad& input) {
148 return input.material != cc::DrawQuad::TEXTURE_CONTENT;
149 }
150
151 static void SetToNull(cc::DrawQuad* output) {}
152
153 static uint32_t resource_id(const cc::DrawQuad& input) {
154 const cc::TextureDrawQuad* quad = cc::TextureDrawQuad::MaterialCast(&input);
155 return quad->resource_id();
156 }
157
158 static bool premultiplied_alpha(const cc::DrawQuad& input) {
159 const cc::TextureDrawQuad* quad = cc::TextureDrawQuad::MaterialCast(&input);
160 return quad->premultiplied_alpha;
161 }
162
163 static const gfx::PointF& uv_top_left(const cc::DrawQuad& input) {
164 const cc::TextureDrawQuad* quad = cc::TextureDrawQuad::MaterialCast(&input);
165 return quad->uv_top_left;
166 }
167
168 static const gfx::PointF& uv_bottom_right(const cc::DrawQuad& input) {
169 const cc::TextureDrawQuad* quad = cc::TextureDrawQuad::MaterialCast(&input);
170 return quad->uv_bottom_right;
171 }
172
173 static uint32_t background_color(const cc::DrawQuad& input) {
174 const cc::TextureDrawQuad* quad = cc::TextureDrawQuad::MaterialCast(&input);
175 return quad->background_color;
176 }
177
178 static CArray<float> vertex_opacity(const cc::DrawQuad& input) {
179 const cc::TextureDrawQuad* quad = cc::TextureDrawQuad::MaterialCast(&input);
180 return {4, 4, const_cast<float*>(&quad->vertex_opacity[0])};
181 }
182
183 static bool y_flipped(const cc::DrawQuad& input) {
184 const cc::TextureDrawQuad* quad = cc::TextureDrawQuad::MaterialCast(&input);
185 return quad->y_flipped;
186 }
187
188 static bool nearest_neighbor(const cc::DrawQuad& input) {
189 const cc::TextureDrawQuad* quad = cc::TextureDrawQuad::MaterialCast(&input);
190 return quad->nearest_neighbor;
191 }
192
193 static bool secure_output_only(const cc::DrawQuad& input) {
194 const cc::TextureDrawQuad* quad = cc::TextureDrawQuad::MaterialCast(&input);
195 return quad->secure_output_only;
196 }
197
198 static bool Read(cc::mojom::TextureQuadStateDataView data, cc::DrawQuad* out);
199 };
200
201 template <>
202 struct StructTraits<cc::mojom::TileQuadState, cc::DrawQuad> {
203 static bool IsNull(const cc::DrawQuad& input) {
204 return input.material != cc::DrawQuad::TILED_CONTENT;
205 }
206
207 static void SetToNull(cc::DrawQuad* output) {}
208
209 static const gfx::RectF& tex_coord_rect(const cc::DrawQuad& input) {
210 const cc::TileDrawQuad* quad = cc::TileDrawQuad::MaterialCast(&input);
211 return quad->tex_coord_rect;
212 }
213
214 static const gfx::Size& texture_size(const cc::DrawQuad& input) {
215 const cc::TileDrawQuad* quad = cc::TileDrawQuad::MaterialCast(&input);
216 return quad->texture_size;
217 }
218
219 static bool swizzle_contents(const cc::DrawQuad& input) {
220 const cc::TileDrawQuad* quad = cc::TileDrawQuad::MaterialCast(&input);
221 return quad->swizzle_contents;
222 }
223
224 static bool nearest_neighbor(const cc::DrawQuad& input) {
225 const cc::TileDrawQuad* quad = cc::TileDrawQuad::MaterialCast(&input);
226 return quad->nearest_neighbor;
227 }
228
229 static uint32_t resource_id(const cc::DrawQuad& input) {
230 const cc::TileDrawQuad* quad = cc::TileDrawQuad::MaterialCast(&input);
231 return quad->resource_id();
232 }
233
234 static bool Read(cc::mojom::TileQuadStateDataView data, cc::DrawQuad* out);
235 };
236
237 template <>
238 struct StructTraits<cc::mojom::DrawQuad, cc::DrawQuad> {
239 static cc::mojom::Material material(const cc::DrawQuad& quad);
240
241 static const gfx::Rect& rect(const cc::DrawQuad& quad) { return quad.rect; }
242
243 static const gfx::Rect& opaque_rect(const cc::DrawQuad& quad) {
244 return quad.opaque_rect;
245 }
246
247 static const gfx::Rect& visible_rect(const cc::DrawQuad& quad) {
248 return quad.visible_rect;
249 }
250
251 static bool needs_blending(const cc::DrawQuad& quad) {
252 return quad.needs_blending;
253 }
254
255 static uint32_t shared_quad_state_index(const cc::DrawQuad& quad) {
256 // TODO(fsamuel): Add shared_quad_state_index field to cc::DrawQuad.
257 return 0;
258 }
259
260 static const cc::DrawQuad& debug_border_quad_state(const cc::DrawQuad& quad) {
261 return quad;
262 }
263
264 static const cc::DrawQuad& render_pass_quad_state(const cc::DrawQuad& quad) {
265 return quad;
266 }
267
268 static const cc::DrawQuad& solid_color_quad_state(const cc::DrawQuad& quad) {
269 return quad;
270 }
271
272 static const cc::DrawQuad& surface_quad_state(const cc::DrawQuad& quad) {
273 return quad;
274 }
275
276 static const cc::DrawQuad& texture_quad_state(const cc::DrawQuad& quad) {
277 return quad;
278 }
279
280 static const cc::DrawQuad& tile_quad_state(const cc::DrawQuad& quad) {
281 return quad;
282 }
283
284 static cc::mojom::StreamVideoQuadStatePtr stream_video_quad_state(
285 const cc::DrawQuad& data) {
286 return nullptr;
287 }
288
289 static cc::mojom::YUVVideoQuadStatePtr yuv_video_quad_state(
290 const cc::DrawQuad& data) {
291 return nullptr;
292 }
293
294 static bool Read(cc::mojom::DrawQuadDataView data, cc::DrawQuad* out);
295 };
296
297 struct QuadListArray {
298 cc::QuadList* list;
299 };
300
301 template <>
302 struct ArrayTraits<QuadListArray> {
303 using Element = cc::DrawQuad;
304 using Iterator = cc::QuadList::Iterator;
305 using ConstIterator = cc::QuadList::ConstIterator;
306
307 static ConstIterator GetBegin(const QuadListArray& input) {
308 return input.list->begin();
309 }
310 static Iterator GetBegin(QuadListArray& input) { return input.list->begin(); }
311
312 static void AdvanceIterator(ConstIterator& iterator) { iterator++; }
313 static void AdvanceIterator(Iterator& iterator) { iterator++; }
314
315 static const Element& GetValue(ConstIterator& iterator) { return **iterator; }
316 static Element& GetValue(Iterator& iterator) { return **iterator; }
317
318 static size_t GetSize(const QuadListArray& input) {
319 return input.list->size();
320 }
321
322 static bool Resize(QuadListArray& input, size_t size) { return true; }
323 };
324
325 template <>
326 struct StructTraits<cc::mojom::QuadList, cc::QuadList> {
327 static mojo::Array<cc::mojom::Material> quad_types(
328 const cc::QuadList& quad_list);
329
330 static QuadListArray quads(const cc::QuadList& quad_list) {
331 return {const_cast<cc::QuadList*>(&quad_list)};
332 }
333
334 static bool Read(cc::mojom::QuadListDataView data, cc::QuadList* out);
335 };
336
337 } // namespace mojo
338
339 #endif // CC_IPC_QUADS_STRUCT_TRAITS_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698