Chromium Code Reviews| OLD | NEW |
|---|---|
| (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 #include "cc/ipc/quads_struct_traits.h" | |
| 6 | |
| 7 namespace mojo { | |
| 8 | |
| 9 namespace { | |
| 10 | |
| 11 cc::mojom::Material CCMaterialToMojo(cc::DrawQuad::Material material) { | |
|
yzshen1
2016/06/15 17:12:12
You can use EnumTraits to do this now.
Fady Samuel
2016/06/15 19:16:00
Done.
| |
| 12 switch (material) { | |
| 13 case cc::DrawQuad::INVALID: | |
| 14 break; | |
| 15 case cc::DrawQuad::DEBUG_BORDER: | |
| 16 return cc::mojom::Material::DEBUG_BORDER; | |
| 17 case cc::DrawQuad::PICTURE_CONTENT: | |
| 18 return cc::mojom::Material::PICTURE_CONTENT; | |
| 19 case cc::DrawQuad::RENDER_PASS: | |
| 20 return cc::mojom::Material::RENDER_PASS; | |
| 21 case cc::DrawQuad::SOLID_COLOR: | |
| 22 return cc::mojom::Material::SOLID_COLOR; | |
| 23 case cc::DrawQuad::STREAM_VIDEO_CONTENT: | |
| 24 return cc::mojom::Material::STREAM_VIDEO_CONTENT; | |
| 25 case cc::DrawQuad::SURFACE_CONTENT: | |
| 26 return cc::mojom::Material::SURFACE_CONTENT; | |
| 27 case cc::DrawQuad::TEXTURE_CONTENT: | |
| 28 return cc::mojom::Material::TEXTURE_CONTENT; | |
| 29 case cc::DrawQuad::TILED_CONTENT: | |
| 30 return cc::mojom::Material::TILED_CONTENT; | |
| 31 case cc::DrawQuad::YUV_VIDEO_CONTENT: | |
| 32 return cc::mojom::Material::YUV_VIDEO_CONTENT; | |
| 33 } | |
| 34 NOTREACHED(); | |
| 35 return cc::mojom::Material::YUV_VIDEO_CONTENT; | |
| 36 } | |
| 37 | |
| 38 cc::DrawQuad::Material MojoMaterialToCC(cc::mojom::Material material) { | |
| 39 switch (material) { | |
| 40 case cc::mojom::Material::DEBUG_BORDER: | |
| 41 return cc::DrawQuad::DEBUG_BORDER; | |
| 42 case cc::mojom::Material::PICTURE_CONTENT: | |
| 43 return cc::DrawQuad::PICTURE_CONTENT; | |
| 44 case cc::mojom::Material::RENDER_PASS: | |
| 45 return cc::DrawQuad::RENDER_PASS; | |
| 46 case cc::mojom::Material::SOLID_COLOR: | |
| 47 return cc::DrawQuad::SOLID_COLOR; | |
| 48 case cc::mojom::Material::STREAM_VIDEO_CONTENT: | |
| 49 return cc::DrawQuad::STREAM_VIDEO_CONTENT; | |
| 50 case cc::mojom::Material::SURFACE_CONTENT: | |
| 51 return cc::DrawQuad::SURFACE_CONTENT; | |
| 52 case cc::mojom::Material::TEXTURE_CONTENT: | |
| 53 return cc::DrawQuad::TEXTURE_CONTENT; | |
| 54 case cc::mojom::Material::TILED_CONTENT: | |
| 55 return cc::DrawQuad::TILED_CONTENT; | |
| 56 case cc::mojom::Material::YUV_VIDEO_CONTENT: | |
| 57 return cc::DrawQuad::YUV_VIDEO_CONTENT; | |
| 58 } | |
| 59 NOTREACHED(); | |
| 60 return cc::DrawQuad::INVALID; | |
| 61 } | |
| 62 | |
| 63 bool ReadDrawQuad(cc::mojom::DrawQuadDataView data, cc::DrawQuad* quad) { | |
| 64 quad->material = MojoMaterialToCC(data.material()); | |
| 65 if (!data.ReadRect(&quad->rect) || !data.ReadOpaqueRect(&quad->opaque_rect) || | |
| 66 !data.ReadVisibleRect(&quad->visible_rect)) { | |
| 67 return false; | |
| 68 } | |
| 69 quad->needs_blending = data.needs_blending(); | |
| 70 return true; | |
| 71 } | |
| 72 | |
| 73 void AllocateAndConstruct(cc::DrawQuad::Material material, cc::QuadList* list) { | |
| 74 switch (material) { | |
| 75 case cc::DrawQuad::INVALID: | |
| 76 break; | |
| 77 case cc::DrawQuad::DEBUG_BORDER: | |
| 78 list->AllocateAndConstruct<cc::DebugBorderDrawQuad>(); | |
| 79 return; | |
| 80 case cc::DrawQuad::PICTURE_CONTENT: | |
| 81 list->AllocateAndConstruct<cc::PictureDrawQuad>(); | |
| 82 return; | |
| 83 case cc::DrawQuad::RENDER_PASS: | |
| 84 list->AllocateAndConstruct<cc::RenderPassDrawQuad>(); | |
| 85 return; | |
| 86 case cc::DrawQuad::SOLID_COLOR: | |
| 87 list->AllocateAndConstruct<cc::SolidColorDrawQuad>(); | |
| 88 return; | |
| 89 case cc::DrawQuad::STREAM_VIDEO_CONTENT: | |
| 90 list->AllocateAndConstruct<cc::StreamVideoDrawQuad>(); | |
| 91 return; | |
| 92 case cc::DrawQuad::SURFACE_CONTENT: | |
| 93 list->AllocateAndConstruct<cc::SurfaceDrawQuad>(); | |
| 94 return; | |
| 95 case cc::DrawQuad::TEXTURE_CONTENT: | |
| 96 list->AllocateAndConstruct<cc::TextureDrawQuad>(); | |
| 97 return; | |
| 98 case cc::DrawQuad::TILED_CONTENT: | |
| 99 list->AllocateAndConstruct<cc::TileDrawQuad>(); | |
| 100 return; | |
| 101 case cc::DrawQuad::YUV_VIDEO_CONTENT: | |
| 102 list->AllocateAndConstruct<cc::YUVVideoDrawQuad>(); | |
| 103 return; | |
| 104 } | |
| 105 NOTREACHED(); | |
| 106 } | |
| 107 | |
| 108 } // namespace | |
| 109 | |
| 110 // static | |
| 111 bool StructTraits<cc::mojom::DebugBorderQuadState, cc::DrawQuad>::Read( | |
| 112 cc::mojom::DebugBorderQuadStateDataView data, | |
| 113 cc::DrawQuad* out) { | |
| 114 cc::DebugBorderDrawQuad* quad = static_cast<cc::DebugBorderDrawQuad*>(out); | |
| 115 quad->color = data.color(); | |
| 116 quad->width = data.width(); | |
| 117 return true; | |
| 118 } | |
| 119 | |
| 120 // static | |
| 121 bool StructTraits<cc::mojom::RenderPassQuadState, cc::DrawQuad>::Read( | |
| 122 cc::mojom::RenderPassQuadStateDataView data, | |
| 123 cc::DrawQuad* out) { | |
| 124 cc::RenderPassDrawQuad* quad = static_cast<cc::RenderPassDrawQuad*>(out); | |
| 125 quad->resources.ids[cc::RenderPassDrawQuad::kMaskResourceIdIndex] = | |
| 126 data.mask_resource_id(); | |
| 127 return data.ReadRenderPassId(&quad->render_pass_id) && | |
| 128 data.ReadMaskUvScale(&quad->mask_uv_scale) && | |
| 129 data.ReadMaskTextureSize(&quad->mask_texture_size) && | |
| 130 data.ReadFilters(&quad->filters) && | |
| 131 data.ReadFiltersScale(&quad->filters_scale) && | |
| 132 data.ReadBackgroundFilters(&quad->background_filters); | |
| 133 } | |
| 134 | |
| 135 // static | |
| 136 bool StructTraits<cc::mojom::SolidColorQuadState, cc::DrawQuad>::Read( | |
| 137 cc::mojom::SolidColorQuadStateDataView data, | |
| 138 cc::DrawQuad* out) { | |
| 139 cc::SolidColorDrawQuad* quad = static_cast<cc::SolidColorDrawQuad*>(out); | |
| 140 quad->force_anti_aliasing_off = data.force_anti_aliasing_off(); | |
| 141 quad->color = data.color(); | |
| 142 return true; | |
| 143 } | |
| 144 | |
| 145 // static | |
| 146 bool StructTraits<cc::mojom::SurfaceQuadState, cc::DrawQuad>::Read( | |
| 147 cc::mojom::SurfaceQuadStateDataView data, | |
| 148 cc::DrawQuad* out) { | |
| 149 cc::SurfaceDrawQuad* quad = static_cast<cc::SurfaceDrawQuad*>(out); | |
| 150 return data.ReadSurface(&quad->surface_id); | |
| 151 } | |
| 152 | |
| 153 // static | |
| 154 bool StructTraits<cc::mojom::TextureQuadState, cc::DrawQuad>::Read( | |
| 155 cc::mojom::TextureQuadStateDataView data, | |
| 156 cc::DrawQuad* out) { | |
| 157 cc::TextureDrawQuad* quad = static_cast<cc::TextureDrawQuad*>(out); | |
| 158 quad->resources.ids[cc::TextureDrawQuad::kResourceIdIndex] = | |
| 159 data.resource_id(); | |
| 160 quad->premultiplied_alpha = data.premultiplied_alpha(); | |
| 161 if (!data.ReadUvTopLeft(&quad->uv_top_left) || | |
| 162 !data.ReadUvBottomRight(&quad->uv_bottom_right)) { | |
| 163 return false; | |
| 164 } | |
| 165 quad->background_color = data.background_color(); | |
| 166 CArray<float> vertex_opacity_array = {4, 4, &quad->vertex_opacity[0]}; | |
| 167 if (!data.ReadVertexOpacity(&vertex_opacity_array)) | |
| 168 return false; | |
| 169 | |
| 170 quad->y_flipped = data.y_flipped(); | |
| 171 quad->nearest_neighbor = data.nearest_neighbor(); | |
| 172 quad->secure_output_only = data.secure_output_only(); | |
| 173 return true; | |
| 174 } | |
| 175 | |
| 176 // static | |
| 177 bool StructTraits<cc::mojom::TileQuadState, cc::DrawQuad>::Read( | |
| 178 cc::mojom::TileQuadStateDataView data, | |
| 179 cc::DrawQuad* out) { | |
| 180 cc::TileDrawQuad* quad = static_cast<cc::TileDrawQuad*>(out); | |
| 181 if (!data.ReadTexCoordRect(&quad->tex_coord_rect) || | |
| 182 !data.ReadTextureSize(&quad->texture_size)) { | |
| 183 return false; | |
| 184 } | |
| 185 | |
| 186 quad->swizzle_contents = data.swizzle_contents(); | |
| 187 quad->nearest_neighbor = data.nearest_neighbor(); | |
| 188 quad->resources.ids[cc::TileDrawQuad::kResourceIdIndex] = data.resource_id(); | |
| 189 return true; | |
| 190 } | |
| 191 | |
| 192 // static | |
| 193 cc::mojom::Material StructTraits<cc::mojom::DrawQuad, cc::DrawQuad>::material( | |
| 194 const cc::DrawQuad& quad) { | |
| 195 return CCMaterialToMojo(quad.material); | |
| 196 } | |
| 197 | |
| 198 // static | |
| 199 bool StructTraits<cc::mojom::DrawQuad, cc::DrawQuad>::Read( | |
| 200 cc::mojom::DrawQuadDataView data, | |
| 201 cc::DrawQuad* out) { | |
| 202 if (!ReadDrawQuad(data, out)) | |
| 203 return false; | |
| 204 switch (data.material()) { | |
| 205 case cc::mojom::Material::DEBUG_BORDER: | |
| 206 return data.ReadDebugBorderQuadState(out); | |
| 207 case cc::mojom::Material::PICTURE_CONTENT: | |
| 208 // TODO(fsamuel): Implement PictureDrawQuad | |
| 209 // serialization/deserialization. | |
| 210 break; | |
| 211 case cc::mojom::Material::RENDER_PASS: | |
| 212 return data.ReadRenderPassQuadState(out); | |
| 213 case cc::mojom::Material::SOLID_COLOR: | |
| 214 return data.ReadSolidColorQuadState(out); | |
| 215 case cc::mojom::Material::STREAM_VIDEO_CONTENT: | |
| 216 // TODO(fsamuel): Implement StreamVideoContentDrawQuad | |
| 217 // serialization/deserialization. | |
| 218 break; | |
| 219 case cc::mojom::Material::SURFACE_CONTENT: | |
| 220 return data.ReadSurfaceQuadState(out); | |
| 221 case cc::mojom::Material::TEXTURE_CONTENT: | |
| 222 return data.ReadTextureQuadState(out); | |
| 223 case cc::mojom::Material::TILED_CONTENT: | |
| 224 return data.ReadTileQuadState(out); | |
| 225 case cc::mojom::Material::YUV_VIDEO_CONTENT: | |
| 226 // TODO(fsamuel): Implement YUVVideoDrawQuad | |
| 227 // serialization/deserialization. | |
| 228 break; | |
| 229 } | |
| 230 NOTREACHED(); | |
| 231 return false; | |
| 232 } | |
| 233 | |
| 234 // static | |
| 235 mojo::Array<cc::mojom::Material> | |
| 236 StructTraits<cc::mojom::QuadList, cc::QuadList>::quad_types( | |
|
yzshen1
2016/06/15 17:12:12
Please note that this getter will be called multti
Fady Samuel
2016/06/15 19:15:59
Done.
| |
| 237 const cc::QuadList& quad_list) { | |
| 238 mojo::Array<cc::mojom::Material> materials = | |
| 239 mojo::Array<cc::mojom::Material>::New(quad_list.size()); | |
| 240 for (size_t i = 0; i < quad_list.size(); ++i) | |
| 241 materials[i] = CCMaterialToMojo(quad_list.ElementAt(i)->material); | |
| 242 return materials; | |
| 243 } | |
| 244 | |
| 245 // static | |
| 246 bool StructTraits<cc::mojom::QuadList, cc::QuadList>::Read( | |
| 247 cc::mojom::QuadListDataView data, | |
| 248 cc::QuadList* out) { | |
| 249 // TODO(fsamuel): Once we have ArrayTraits DataViews we can delete | |
| 250 // this field. This field exists so we can pre-allocate DrawQuads | |
| 251 // in the QuadList according to their material. | |
| 252 mojo::Array<cc::mojom::Material> materials; | |
| 253 if (!data.ReadQuadTypes(&materials)) | |
| 254 return false; | |
| 255 for (size_t i = 0; i < materials.size(); ++i) { | |
| 256 cc::DrawQuad::Material material = MojoMaterialToCC(materials[i]); | |
| 257 AllocateAndConstruct(material, out); | |
| 258 } | |
|
yzshen1
2016/06/15 17:12:13
It should be validated that the |quad_types| list
yzshen1
2016/06/15 17:15:07
I mean, We can do that by checking whether a cc::D
Fady Samuel
2016/06/15 19:15:59
I have written the verification just once in ReadD
| |
| 259 QuadListArray quad_list_array = {out}; | |
| 260 return data.ReadQuads(&quad_list_array); | |
| 261 } | |
| 262 | |
| 263 } // namespace mojo | |
| OLD | NEW |