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

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

Issue 2229553004: cc: Implement UnionTraits for DrawQuads (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: More cleanup: Got rid of material and collapsed a method call Created 4 years, 4 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
1 // Copyright 2016 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/ipc/quads_struct_traits.h" 5 #include "cc/ipc/quads_struct_traits.h"
6 #include "ui/gfx/mojo/transform_struct_traits.h" 6 #include "ui/gfx/mojo/transform_struct_traits.h"
7 7
8 namespace mojo { 8 namespace mojo {
9 9
10 cc::DrawQuad* AllocateAndConstruct(cc::mojom::Material material, 10 cc::DrawQuad* AllocateAndConstruct(
11 cc::QuadList* list) { 11 cc::mojom::DrawQuadState::DataView::Tag material,
12 cc::QuadList* list) {
12 cc::DrawQuad* quad = nullptr; 13 cc::DrawQuad* quad = nullptr;
13 switch (material) { 14 switch (material) {
14 case cc::mojom::Material::INVALID: 15 case cc::mojom::DrawQuadState::DataView::Tag::DEBUG_BORDER_QUAD_STATE:
15 return nullptr;
16 case cc::mojom::Material::DEBUG_BORDER:
17 quad = list->AllocateAndConstruct<cc::DebugBorderDrawQuad>(); 16 quad = list->AllocateAndConstruct<cc::DebugBorderDrawQuad>();
18 quad->material = cc::DrawQuad::DEBUG_BORDER; 17 quad->material = cc::DrawQuad::DEBUG_BORDER;
19 return quad; 18 return quad;
20 case cc::mojom::Material::PICTURE_CONTENT: 19 case cc::mojom::DrawQuadState::DataView::Tag::RENDER_PASS_QUAD_STATE:
21 quad = list->AllocateAndConstruct<cc::PictureDrawQuad>();
22 quad->material = cc::DrawQuad::PICTURE_CONTENT;
23 return quad;
24 case cc::mojom::Material::RENDER_PASS:
25 quad = list->AllocateAndConstruct<cc::RenderPassDrawQuad>(); 20 quad = list->AllocateAndConstruct<cc::RenderPassDrawQuad>();
26 quad->material = cc::DrawQuad::RENDER_PASS; 21 quad->material = cc::DrawQuad::RENDER_PASS;
27 return quad; 22 return quad;
28 case cc::mojom::Material::SOLID_COLOR: 23 case cc::mojom::DrawQuadState::DataView::Tag::SOLID_COLOR_QUAD_STATE:
29 quad = list->AllocateAndConstruct<cc::SolidColorDrawQuad>(); 24 quad = list->AllocateAndConstruct<cc::SolidColorDrawQuad>();
30 quad->material = cc::DrawQuad::SOLID_COLOR; 25 quad->material = cc::DrawQuad::SOLID_COLOR;
31 return quad; 26 return quad;
32 case cc::mojom::Material::STREAM_VIDEO_CONTENT: 27 case cc::mojom::DrawQuadState::DataView::Tag::STREAM_VIDEO_QUAD_STATE:
33 quad = list->AllocateAndConstruct<cc::StreamVideoDrawQuad>(); 28 quad = list->AllocateAndConstruct<cc::StreamVideoDrawQuad>();
34 quad->material = cc::DrawQuad::STREAM_VIDEO_CONTENT; 29 quad->material = cc::DrawQuad::STREAM_VIDEO_CONTENT;
35 return quad; 30 return quad;
36 case cc::mojom::Material::SURFACE_CONTENT: 31 case cc::mojom::DrawQuadState::DataView::Tag::SURFACE_QUAD_STATE:
37 quad = list->AllocateAndConstruct<cc::SurfaceDrawQuad>(); 32 quad = list->AllocateAndConstruct<cc::SurfaceDrawQuad>();
38 quad->material = cc::DrawQuad::SURFACE_CONTENT; 33 quad->material = cc::DrawQuad::SURFACE_CONTENT;
39 return quad; 34 return quad;
40 case cc::mojom::Material::TEXTURE_CONTENT: 35 case cc::mojom::DrawQuadState::DataView::Tag::TEXTURE_QUAD_STATE:
41 quad = list->AllocateAndConstruct<cc::TextureDrawQuad>(); 36 quad = list->AllocateAndConstruct<cc::TextureDrawQuad>();
42 quad->material = cc::DrawQuad::TEXTURE_CONTENT; 37 quad->material = cc::DrawQuad::TEXTURE_CONTENT;
43 return quad; 38 return quad;
44 case cc::mojom::Material::TILED_CONTENT: 39 case cc::mojom::DrawQuadState::DataView::Tag::TILE_QUAD_STATE:
45 quad = list->AllocateAndConstruct<cc::TileDrawQuad>(); 40 quad = list->AllocateAndConstruct<cc::TileDrawQuad>();
46 quad->material = cc::DrawQuad::TILED_CONTENT; 41 quad->material = cc::DrawQuad::TILED_CONTENT;
47 return quad; 42 return quad;
48 case cc::mojom::Material::YUV_VIDEO_CONTENT: 43 case cc::mojom::DrawQuadState::DataView::Tag::YUV_VIDEO_QUAD_STATE:
49 quad = list->AllocateAndConstruct<cc::YUVVideoDrawQuad>(); 44 quad = list->AllocateAndConstruct<cc::YUVVideoDrawQuad>();
50 quad->material = cc::DrawQuad::YUV_VIDEO_CONTENT; 45 quad->material = cc::DrawQuad::YUV_VIDEO_CONTENT;
51 return quad; 46 return quad;
52 } 47 }
53 NOTREACHED(); 48 NOTREACHED();
54 return nullptr; 49 return nullptr;
55 } 50 }
56 namespace {
57
58 bool ReadDrawQuad(cc::mojom::DrawQuadDataView data, cc::DrawQuad* quad) {
59 cc::DrawQuad::Material material;
60 if (!data.ReadMaterial(&material) || material != quad->material) {
61 return false;
62 }
63 if (!data.ReadRect(&quad->rect) || !data.ReadOpaqueRect(&quad->opaque_rect) ||
64 !data.ReadVisibleRect(&quad->visible_rect)) {
65 return false;
66 }
67 quad->needs_blending = data.needs_blending();
68 return true;
69 }
70
71 } // namespace
72
73 // static
74 cc::mojom::Material
75 EnumTraits<cc::mojom::Material, cc::DrawQuad::Material>::ToMojom(
76 cc::DrawQuad::Material material) {
77 switch (material) {
78 case cc::DrawQuad::INVALID:
79 return cc::mojom::Material::INVALID;
80 case cc::DrawQuad::DEBUG_BORDER:
81 return cc::mojom::Material::DEBUG_BORDER;
82 case cc::DrawQuad::PICTURE_CONTENT:
83 return cc::mojom::Material::PICTURE_CONTENT;
84 case cc::DrawQuad::RENDER_PASS:
85 return cc::mojom::Material::RENDER_PASS;
86 case cc::DrawQuad::SOLID_COLOR:
87 return cc::mojom::Material::SOLID_COLOR;
88 case cc::DrawQuad::STREAM_VIDEO_CONTENT:
89 return cc::mojom::Material::STREAM_VIDEO_CONTENT;
90 case cc::DrawQuad::SURFACE_CONTENT:
91 return cc::mojom::Material::SURFACE_CONTENT;
92 case cc::DrawQuad::TEXTURE_CONTENT:
93 return cc::mojom::Material::TEXTURE_CONTENT;
94 case cc::DrawQuad::TILED_CONTENT:
95 return cc::mojom::Material::TILED_CONTENT;
96 case cc::DrawQuad::YUV_VIDEO_CONTENT:
97 return cc::mojom::Material::YUV_VIDEO_CONTENT;
98 }
99 return cc::mojom::Material::INVALID;
100 }
101
102 // static
103 bool EnumTraits<cc::mojom::Material, cc::DrawQuad::Material>::FromMojom(
104 cc::mojom::Material input,
105 cc::DrawQuad::Material* out) {
106 switch (input) {
107 case cc::mojom::Material::INVALID:
108 *out = cc::DrawQuad::INVALID;
109 return true;
110 case cc::mojom::Material::DEBUG_BORDER:
111 *out = cc::DrawQuad::DEBUG_BORDER;
112 return true;
113 case cc::mojom::Material::PICTURE_CONTENT:
114 *out = cc::DrawQuad::PICTURE_CONTENT;
115 return true;
116 case cc::mojom::Material::RENDER_PASS:
117 *out = cc::DrawQuad::RENDER_PASS;
118 return true;
119 case cc::mojom::Material::SOLID_COLOR:
120 *out = cc::DrawQuad::SOLID_COLOR;
121 return true;
122 case cc::mojom::Material::STREAM_VIDEO_CONTENT:
123 *out = cc::DrawQuad::STREAM_VIDEO_CONTENT;
124 return true;
125 case cc::mojom::Material::SURFACE_CONTENT:
126 *out = cc::DrawQuad::SURFACE_CONTENT;
127 return true;
128 case cc::mojom::Material::TEXTURE_CONTENT:
129 *out = cc::DrawQuad::TEXTURE_CONTENT;
130 return true;
131 case cc::mojom::Material::TILED_CONTENT:
132 *out = cc::DrawQuad::TILED_CONTENT;
133 return true;
134 case cc::mojom::Material::YUV_VIDEO_CONTENT:
135 *out = cc::DrawQuad::YUV_VIDEO_CONTENT;
136 return true;
137 }
138 return false;
139 }
140 51
141 // static 52 // static
142 bool StructTraits<cc::mojom::DebugBorderQuadState, cc::DrawQuad>::Read( 53 bool StructTraits<cc::mojom::DebugBorderQuadState, cc::DrawQuad>::Read(
143 cc::mojom::DebugBorderQuadStateDataView data, 54 cc::mojom::DebugBorderQuadStateDataView data,
144 cc::DrawQuad* out) { 55 cc::DrawQuad* out) {
145 cc::DebugBorderDrawQuad* quad = static_cast<cc::DebugBorderDrawQuad*>(out); 56 cc::DebugBorderDrawQuad* quad = static_cast<cc::DebugBorderDrawQuad*>(out);
146 quad->color = data.color(); 57 quad->color = data.color();
danakj 2016/08/09 21:37:23 can you not use the SetAll method on the DrawQuads
Fady Samuel 2016/08/10 13:29:03 I've actually deliberately punted on using SetAll.
yzshen1 2016/08/10 15:53:07 I think you are talking about things like gfx::Rec
147 quad->width = data.width(); 58 quad->width = data.width();
148 return true; 59 return true;
149 } 60 }
150 61
151 // static 62 // static
152 bool StructTraits<cc::mojom::RenderPassQuadState, cc::DrawQuad>::Read( 63 bool StructTraits<cc::mojom::RenderPassQuadState, cc::DrawQuad>::Read(
153 cc::mojom::RenderPassQuadStateDataView data, 64 cc::mojom::RenderPassQuadStateDataView data,
154 cc::DrawQuad* out) { 65 cc::DrawQuad* out) {
155 cc::RenderPassDrawQuad* quad = static_cast<cc::RenderPassDrawQuad*>(out); 66 cc::RenderPassDrawQuad* quad = static_cast<cc::RenderPassDrawQuad*>(out);
156 quad->resources.ids[cc::RenderPassDrawQuad::kMaskResourceIdIndex] = 67 quad->resources.ids[cc::RenderPassDrawQuad::kMaskResourceIdIndex] =
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
303 quad->bits_per_channel > cc::YUVVideoDrawQuad::kMaxBitsPerChannel) { 214 quad->bits_per_channel > cc::YUVVideoDrawQuad::kMaxBitsPerChannel) {
304 return false; 215 return false;
305 } 216 }
306 return true; 217 return true;
307 } 218 }
308 219
309 // static 220 // static
310 bool StructTraits<cc::mojom::DrawQuad, cc::DrawQuad>::Read( 221 bool StructTraits<cc::mojom::DrawQuad, cc::DrawQuad>::Read(
311 cc::mojom::DrawQuadDataView data, 222 cc::mojom::DrawQuadDataView data,
312 cc::DrawQuad* out) { 223 cc::DrawQuad* out) {
313 if (!ReadDrawQuad(data, out)) 224 if (!data.ReadRect(&out->rect) || !data.ReadOpaqueRect(&out->opaque_rect) ||
225 !data.ReadVisibleRect(&out->visible_rect)) {
314 return false; 226 return false;
315 switch (data.material()) {
316 case cc::mojom::Material::INVALID:
317 break;
318 case cc::mojom::Material::DEBUG_BORDER:
319 return data.ReadDebugBorderQuadState(out);
320 case cc::mojom::Material::PICTURE_CONTENT:
321 // TODO(fsamuel): Implement PictureDrawQuad
322 // serialization/deserialization.
323 break;
324 case cc::mojom::Material::RENDER_PASS:
325 return data.ReadRenderPassQuadState(out);
326 case cc::mojom::Material::SOLID_COLOR:
327 return data.ReadSolidColorQuadState(out);
328 case cc::mojom::Material::STREAM_VIDEO_CONTENT:
329 return data.ReadStreamVideoQuadState(out);
330 case cc::mojom::Material::SURFACE_CONTENT:
331 return data.ReadSurfaceQuadState(out);
332 case cc::mojom::Material::TEXTURE_CONTENT:
333 return data.ReadTextureQuadState(out);
334 case cc::mojom::Material::TILED_CONTENT:
335 return data.ReadTileQuadState(out);
336 case cc::mojom::Material::YUV_VIDEO_CONTENT:
337 return data.ReadYuvVideoQuadState(out);
338 } 227 }
339 NOTREACHED(); 228 out->needs_blending = data.needs_blending();
340 return false; 229 return data.ReadDrawQuadState(out);
danakj 2016/08/09 21:37:23 you'll maybe need to pass the base class data to t
Fady Samuel 2016/08/10 13:29:03 See comment above. I think we should avoid using S
341 } 230 }
342 231
343 } // namespace mojo 232 } // namespace mojo
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698