Index: cc/ipc/quads_struct_traits.cc |
diff --git a/cc/ipc/quads_struct_traits.cc b/cc/ipc/quads_struct_traits.cc |
index 6865fa9a1e8dea4eb49c33fd0cb08a6f7bb2f5bd..15557ac8f09354b1d24765ff536d4a52998acff6 100644 |
--- a/cc/ipc/quads_struct_traits.cc |
+++ b/cc/ipc/quads_struct_traits.cc |
@@ -7,6 +7,52 @@ |
namespace mojo { |
+cc::DrawQuad* AllocateAndConstruct(cc::mojom::Material material, |
+ cc::QuadList* list) { |
+ cc::DrawQuad* quad = nullptr; |
+ switch (material) { |
+ case cc::mojom::Material::INVALID: |
+ return nullptr; |
+ case cc::mojom::Material::DEBUG_BORDER: |
+ quad = list->AllocateAndConstruct<cc::DebugBorderDrawQuad>(); |
+ quad->material = cc::DrawQuad::DEBUG_BORDER; |
+ return quad; |
+ case cc::mojom::Material::PICTURE_CONTENT: |
+ quad = list->AllocateAndConstruct<cc::PictureDrawQuad>(); |
+ quad->material = cc::DrawQuad::PICTURE_CONTENT; |
+ return quad; |
+ case cc::mojom::Material::RENDER_PASS: |
+ quad = list->AllocateAndConstruct<cc::RenderPassDrawQuad>(); |
+ quad->material = cc::DrawQuad::RENDER_PASS; |
+ return quad; |
+ case cc::mojom::Material::SOLID_COLOR: |
+ quad = list->AllocateAndConstruct<cc::SolidColorDrawQuad>(); |
+ quad->material = cc::DrawQuad::SOLID_COLOR; |
+ return quad; |
+ case cc::mojom::Material::STREAM_VIDEO_CONTENT: |
+ quad = list->AllocateAndConstruct<cc::StreamVideoDrawQuad>(); |
+ quad->material = cc::DrawQuad::STREAM_VIDEO_CONTENT; |
+ return quad; |
+ case cc::mojom::Material::SURFACE_CONTENT: |
+ quad = list->AllocateAndConstruct<cc::SurfaceDrawQuad>(); |
+ quad->material = cc::DrawQuad::SURFACE_CONTENT; |
+ return quad; |
+ case cc::mojom::Material::TEXTURE_CONTENT: |
+ quad = list->AllocateAndConstruct<cc::TextureDrawQuad>(); |
+ quad->material = cc::DrawQuad::TEXTURE_CONTENT; |
+ return quad; |
+ case cc::mojom::Material::TILED_CONTENT: |
+ quad = list->AllocateAndConstruct<cc::TileDrawQuad>(); |
+ quad->material = cc::DrawQuad::TILED_CONTENT; |
+ return quad; |
+ case cc::mojom::Material::YUV_VIDEO_CONTENT: |
+ quad = list->AllocateAndConstruct<cc::YUVVideoDrawQuad>(); |
+ quad->material = cc::DrawQuad::YUV_VIDEO_CONTENT; |
+ return quad; |
+ } |
+ NOTREACHED(); |
+ return nullptr; |
+} |
namespace { |
bool ReadDrawQuad(cc::mojom::DrawQuadDataView data, cc::DrawQuad* quad) { |
@@ -22,44 +68,6 @@ bool ReadDrawQuad(cc::mojom::DrawQuadDataView data, cc::DrawQuad* quad) { |
return true; |
} |
-bool AllocateAndConstruct(cc::DrawQuad::Material material, cc::QuadList* list) { |
- cc::DrawQuad* quad = nullptr; |
- switch (material) { |
- case cc::DrawQuad::INVALID: |
- break; |
- case cc::DrawQuad::DEBUG_BORDER: |
- quad = list->AllocateAndConstruct<cc::DebugBorderDrawQuad>(); |
- break; |
- case cc::DrawQuad::PICTURE_CONTENT: |
- quad = list->AllocateAndConstruct<cc::PictureDrawQuad>(); |
- break; |
- case cc::DrawQuad::RENDER_PASS: |
- quad = list->AllocateAndConstruct<cc::RenderPassDrawQuad>(); |
- break; |
- case cc::DrawQuad::SOLID_COLOR: |
- quad = list->AllocateAndConstruct<cc::SolidColorDrawQuad>(); |
- break; |
- case cc::DrawQuad::STREAM_VIDEO_CONTENT: |
- quad = list->AllocateAndConstruct<cc::StreamVideoDrawQuad>(); |
- break; |
- case cc::DrawQuad::SURFACE_CONTENT: |
- quad = list->AllocateAndConstruct<cc::SurfaceDrawQuad>(); |
- break; |
- case cc::DrawQuad::TEXTURE_CONTENT: |
- quad = list->AllocateAndConstruct<cc::TextureDrawQuad>(); |
- break; |
- case cc::DrawQuad::TILED_CONTENT: |
- quad = list->AllocateAndConstruct<cc::TileDrawQuad>(); |
- break; |
- case cc::DrawQuad::YUV_VIDEO_CONTENT: |
- quad = list->AllocateAndConstruct<cc::YUVVideoDrawQuad>(); |
- break; |
- } |
- if (quad) |
- quad->material = material; |
- return quad != nullptr; |
-} |
- |
} // namespace |
// static |
@@ -327,50 +335,4 @@ bool StructTraits<cc::mojom::DrawQuad, cc::DrawQuad>::Read( |
return false; |
} |
-// static |
-void* StructTraits<cc::mojom::QuadList, cc::QuadList>::SetUpContext( |
- const cc::QuadList& quad_list) { |
- mojo::Array<cc::DrawQuad::Material>* materials = |
- new mojo::Array<cc::DrawQuad::Material>(quad_list.size()); |
- for (auto it = quad_list.begin(); it != quad_list.end(); ++it) |
- (*materials)[it.index()] = it->material; |
- return materials; |
-} |
- |
-// static |
-void StructTraits<cc::mojom::QuadList, cc::QuadList>::TearDownContext( |
- const cc::QuadList& quad_list, |
- void* context) { |
- // static_cast to ensure the destructor is called. |
- delete static_cast<mojo::Array<cc::DrawQuad::Material>*>(context); |
-} |
- |
-// static |
-const mojo::Array<cc::DrawQuad::Material>& |
-StructTraits<cc::mojom::QuadList, cc::QuadList>::quad_types( |
- const cc::QuadList& quad_list, |
- void* context) { |
- return *static_cast<mojo::Array<cc::DrawQuad::Material>*>(context); |
-} |
- |
-// static |
-bool StructTraits<cc::mojom::QuadList, cc::QuadList>::Read( |
- cc::mojom::QuadListDataView data, |
- cc::QuadList* out) { |
- // TODO(fsamuel): Once we have ArrayTraits DataViews we can delete |
- // this field. This field exists so we can pre-allocate DrawQuads |
- // in the QuadList according to their material. |
- mojo::Array<cc::DrawQuad::Material> materials; |
- if (!data.ReadQuadTypes(&materials)) |
- return false; |
- for (size_t i = 0; i < materials.size(); ++i) { |
- if (!AllocateAndConstruct(materials[i], out)) |
- return false; |
- } |
- // The materials array and the quads array are expected to be the same size. |
- // If they are not, then deserialization will fail. |
- QuadListArray quad_list_array = {materials.size(), out}; |
- return data.ReadQuads(&quad_list_array); |
-} |
- |
} // namespace mojo |