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

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

Issue 2174843003: cc mojo: Use ArrayDataViews in RenderPasses (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix RenderPassId 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
« no previous file with comments | « cc/ipc/quads_struct_traits.h ('k') | cc/ipc/render_pass.mojom » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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,
11 cc::QuadList* list) {
12 cc::DrawQuad* quad = nullptr;
13 switch (material) {
14 case cc::mojom::Material::INVALID:
15 return nullptr;
16 case cc::mojom::Material::DEBUG_BORDER:
17 quad = list->AllocateAndConstruct<cc::DebugBorderDrawQuad>();
18 quad->material = cc::DrawQuad::DEBUG_BORDER;
19 return quad;
20 case cc::mojom::Material::PICTURE_CONTENT:
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>();
26 quad->material = cc::DrawQuad::RENDER_PASS;
27 return quad;
28 case cc::mojom::Material::SOLID_COLOR:
29 quad = list->AllocateAndConstruct<cc::SolidColorDrawQuad>();
30 quad->material = cc::DrawQuad::SOLID_COLOR;
31 return quad;
32 case cc::mojom::Material::STREAM_VIDEO_CONTENT:
33 quad = list->AllocateAndConstruct<cc::StreamVideoDrawQuad>();
34 quad->material = cc::DrawQuad::STREAM_VIDEO_CONTENT;
35 return quad;
36 case cc::mojom::Material::SURFACE_CONTENT:
37 quad = list->AllocateAndConstruct<cc::SurfaceDrawQuad>();
38 quad->material = cc::DrawQuad::SURFACE_CONTENT;
39 return quad;
40 case cc::mojom::Material::TEXTURE_CONTENT:
41 quad = list->AllocateAndConstruct<cc::TextureDrawQuad>();
42 quad->material = cc::DrawQuad::TEXTURE_CONTENT;
43 return quad;
44 case cc::mojom::Material::TILED_CONTENT:
45 quad = list->AllocateAndConstruct<cc::TileDrawQuad>();
46 quad->material = cc::DrawQuad::TILED_CONTENT;
47 return quad;
48 case cc::mojom::Material::YUV_VIDEO_CONTENT:
49 quad = list->AllocateAndConstruct<cc::YUVVideoDrawQuad>();
50 quad->material = cc::DrawQuad::YUV_VIDEO_CONTENT;
51 return quad;
52 }
53 NOTREACHED();
54 return nullptr;
55 }
10 namespace { 56 namespace {
11 57
12 bool ReadDrawQuad(cc::mojom::DrawQuadDataView data, cc::DrawQuad* quad) { 58 bool ReadDrawQuad(cc::mojom::DrawQuadDataView data, cc::DrawQuad* quad) {
13 cc::DrawQuad::Material material; 59 cc::DrawQuad::Material material;
14 if (!data.ReadMaterial(&material) || material != quad->material) { 60 if (!data.ReadMaterial(&material) || material != quad->material) {
15 return false; 61 return false;
16 } 62 }
17 if (!data.ReadRect(&quad->rect) || !data.ReadOpaqueRect(&quad->opaque_rect) || 63 if (!data.ReadRect(&quad->rect) || !data.ReadOpaqueRect(&quad->opaque_rect) ||
18 !data.ReadVisibleRect(&quad->visible_rect)) { 64 !data.ReadVisibleRect(&quad->visible_rect)) {
19 return false; 65 return false;
20 } 66 }
21 quad->needs_blending = data.needs_blending(); 67 quad->needs_blending = data.needs_blending();
22 return true; 68 return true;
23 } 69 }
24 70
25 bool AllocateAndConstruct(cc::DrawQuad::Material material, cc::QuadList* list) {
26 cc::DrawQuad* quad = nullptr;
27 switch (material) {
28 case cc::DrawQuad::INVALID:
29 break;
30 case cc::DrawQuad::DEBUG_BORDER:
31 quad = list->AllocateAndConstruct<cc::DebugBorderDrawQuad>();
32 break;
33 case cc::DrawQuad::PICTURE_CONTENT:
34 quad = list->AllocateAndConstruct<cc::PictureDrawQuad>();
35 break;
36 case cc::DrawQuad::RENDER_PASS:
37 quad = list->AllocateAndConstruct<cc::RenderPassDrawQuad>();
38 break;
39 case cc::DrawQuad::SOLID_COLOR:
40 quad = list->AllocateAndConstruct<cc::SolidColorDrawQuad>();
41 break;
42 case cc::DrawQuad::STREAM_VIDEO_CONTENT:
43 quad = list->AllocateAndConstruct<cc::StreamVideoDrawQuad>();
44 break;
45 case cc::DrawQuad::SURFACE_CONTENT:
46 quad = list->AllocateAndConstruct<cc::SurfaceDrawQuad>();
47 break;
48 case cc::DrawQuad::TEXTURE_CONTENT:
49 quad = list->AllocateAndConstruct<cc::TextureDrawQuad>();
50 break;
51 case cc::DrawQuad::TILED_CONTENT:
52 quad = list->AllocateAndConstruct<cc::TileDrawQuad>();
53 break;
54 case cc::DrawQuad::YUV_VIDEO_CONTENT:
55 quad = list->AllocateAndConstruct<cc::YUVVideoDrawQuad>();
56 break;
57 }
58 if (quad)
59 quad->material = material;
60 return quad != nullptr;
61 }
62
63 } // namespace 71 } // namespace
64 72
65 // static 73 // static
66 cc::mojom::Material 74 cc::mojom::Material
67 EnumTraits<cc::mojom::Material, cc::DrawQuad::Material>::ToMojom( 75 EnumTraits<cc::mojom::Material, cc::DrawQuad::Material>::ToMojom(
68 cc::DrawQuad::Material material) { 76 cc::DrawQuad::Material material) {
69 switch (material) { 77 switch (material) {
70 case cc::DrawQuad::INVALID: 78 case cc::DrawQuad::INVALID:
71 return cc::mojom::Material::INVALID; 79 return cc::mojom::Material::INVALID;
72 case cc::DrawQuad::DEBUG_BORDER: 80 case cc::DrawQuad::DEBUG_BORDER:
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
320 return data.ReadTextureQuadState(out); 328 return data.ReadTextureQuadState(out);
321 case cc::mojom::Material::TILED_CONTENT: 329 case cc::mojom::Material::TILED_CONTENT:
322 return data.ReadTileQuadState(out); 330 return data.ReadTileQuadState(out);
323 case cc::mojom::Material::YUV_VIDEO_CONTENT: 331 case cc::mojom::Material::YUV_VIDEO_CONTENT:
324 return data.ReadYuvVideoQuadState(out); 332 return data.ReadYuvVideoQuadState(out);
325 } 333 }
326 NOTREACHED(); 334 NOTREACHED();
327 return false; 335 return false;
328 } 336 }
329 337
330 // static
331 void* StructTraits<cc::mojom::QuadList, cc::QuadList>::SetUpContext(
332 const cc::QuadList& quad_list) {
333 mojo::Array<cc::DrawQuad::Material>* materials =
334 new mojo::Array<cc::DrawQuad::Material>(quad_list.size());
335 for (auto it = quad_list.begin(); it != quad_list.end(); ++it)
336 (*materials)[it.index()] = it->material;
337 return materials;
338 }
339
340 // static
341 void StructTraits<cc::mojom::QuadList, cc::QuadList>::TearDownContext(
342 const cc::QuadList& quad_list,
343 void* context) {
344 // static_cast to ensure the destructor is called.
345 delete static_cast<mojo::Array<cc::DrawQuad::Material>*>(context);
346 }
347
348 // static
349 const mojo::Array<cc::DrawQuad::Material>&
350 StructTraits<cc::mojom::QuadList, cc::QuadList>::quad_types(
351 const cc::QuadList& quad_list,
352 void* context) {
353 return *static_cast<mojo::Array<cc::DrawQuad::Material>*>(context);
354 }
355
356 // static
357 bool StructTraits<cc::mojom::QuadList, cc::QuadList>::Read(
358 cc::mojom::QuadListDataView data,
359 cc::QuadList* out) {
360 // TODO(fsamuel): Once we have ArrayTraits DataViews we can delete
361 // this field. This field exists so we can pre-allocate DrawQuads
362 // in the QuadList according to their material.
363 mojo::Array<cc::DrawQuad::Material> materials;
364 if (!data.ReadQuadTypes(&materials))
365 return false;
366 for (size_t i = 0; i < materials.size(); ++i) {
367 if (!AllocateAndConstruct(materials[i], out))
368 return false;
369 }
370 // The materials array and the quads array are expected to be the same size.
371 // If they are not, then deserialization will fail.
372 QuadListArray quad_list_array = {materials.size(), out};
373 return data.ReadQuads(&quad_list_array);
374 }
375
376 } // namespace mojo 338 } // namespace mojo
OLDNEW
« no previous file with comments | « cc/ipc/quads_struct_traits.h ('k') | cc/ipc/render_pass.mojom » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698