Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 |
| OLD | NEW |