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

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

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.typemap ('k') | cc/ipc/quads_struct_traits.cc » ('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 #ifndef CC_IPC_QUADS_STRUCT_TRAITS_H_ 5 #ifndef CC_IPC_QUADS_STRUCT_TRAITS_H_
6 #define CC_IPC_QUADS_STRUCT_TRAITS_H_ 6 #define CC_IPC_QUADS_STRUCT_TRAITS_H_
7 7
8 #include "cc/ipc/filter_operation_struct_traits.h" 8 #include "cc/ipc/filter_operation_struct_traits.h"
9 #include "cc/ipc/filter_operations_struct_traits.h" 9 #include "cc/ipc/filter_operations_struct_traits.h"
10 #include "cc/ipc/quads.mojom.h" 10 #include "cc/ipc/quads.mojom.h"
11 #include "cc/ipc/render_pass_id_struct_traits.h" 11 #include "cc/ipc/render_pass_id_struct_traits.h"
12 #include "cc/ipc/shared_quad_state_struct_traits.h"
12 #include "cc/ipc/surface_id_struct_traits.h" 13 #include "cc/ipc/surface_id_struct_traits.h"
13 #include "cc/quads/debug_border_draw_quad.h" 14 #include "cc/quads/debug_border_draw_quad.h"
14 #include "cc/quads/picture_draw_quad.h" 15 #include "cc/quads/picture_draw_quad.h"
15 #include "cc/quads/render_pass_draw_quad.h" 16 #include "cc/quads/render_pass_draw_quad.h"
16 #include "cc/quads/solid_color_draw_quad.h" 17 #include "cc/quads/solid_color_draw_quad.h"
17 #include "cc/quads/stream_video_draw_quad.h" 18 #include "cc/quads/stream_video_draw_quad.h"
18 #include "cc/quads/surface_draw_quad.h" 19 #include "cc/quads/surface_draw_quad.h"
19 #include "cc/quads/texture_draw_quad.h" 20 #include "cc/quads/texture_draw_quad.h"
20 #include "cc/quads/tile_draw_quad.h" 21 #include "cc/quads/tile_draw_quad.h"
21 #include "cc/quads/yuv_video_draw_quad.h" 22 #include "cc/quads/yuv_video_draw_quad.h"
22 #include "ui/gfx/geometry/mojo/geometry_struct_traits.h" 23 #include "ui/gfx/geometry/mojo/geometry_struct_traits.h"
23 24
24 namespace mojo { 25 namespace mojo {
25 26
27 cc::DrawQuad* AllocateAndConstruct(cc::mojom::Material material,
28 cc::QuadList* list);
26 template <> 29 template <>
27 struct EnumTraits<cc::mojom::Material, cc::DrawQuad::Material> { 30 struct EnumTraits<cc::mojom::Material, cc::DrawQuad::Material> {
28 static cc::mojom::Material ToMojom(cc::DrawQuad::Material material); 31 static cc::mojom::Material ToMojom(cc::DrawQuad::Material material);
29 static bool FromMojom(cc::mojom::Material input, cc::DrawQuad::Material* out); 32 static bool FromMojom(cc::mojom::Material input, cc::DrawQuad::Material* out);
30 }; 33 };
31 34
32 template <> 35 template <>
33 struct StructTraits<cc::mojom::DebugBorderQuadState, cc::DrawQuad> { 36 struct StructTraits<cc::mojom::DebugBorderQuadState, cc::DrawQuad> {
34 static bool IsNull(const cc::DrawQuad& input) { 37 static bool IsNull(const cc::DrawQuad& input) {
35 return input.material != cc::DrawQuad::DEBUG_BORDER; 38 return input.material != cc::DrawQuad::DEBUG_BORDER;
(...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after
383 static float resource_multiplier(const cc::DrawQuad& input) { 386 static float resource_multiplier(const cc::DrawQuad& input) {
384 const cc::YUVVideoDrawQuad* quad = 387 const cc::YUVVideoDrawQuad* quad =
385 cc::YUVVideoDrawQuad::MaterialCast(&input); 388 cc::YUVVideoDrawQuad::MaterialCast(&input);
386 return quad->resource_multiplier; 389 return quad->resource_multiplier;
387 } 390 }
388 391
389 static bool Read(cc::mojom::YUVVideoQuadStateDataView data, 392 static bool Read(cc::mojom::YUVVideoQuadStateDataView data,
390 cc::DrawQuad* out); 393 cc::DrawQuad* out);
391 }; 394 };
392 395
396 struct DrawQuadWithSharedQuadState {
397 const cc::DrawQuad* quad;
398 bool include_sqs;
399 };
400
401 template <>
402 struct StructTraits<cc::mojom::DrawQuad, DrawQuadWithSharedQuadState> {
403 static cc::DrawQuad::Material material(
404 const DrawQuadWithSharedQuadState& input) {
405 return input.quad->material;
406 }
407
408 static const gfx::Rect& rect(const DrawQuadWithSharedQuadState& input) {
409 return input.quad->rect;
410 }
411
412 static const gfx::Rect& opaque_rect(
413 const DrawQuadWithSharedQuadState& input) {
414 return input.quad->opaque_rect;
415 }
416
417 static const gfx::Rect& visible_rect(
418 const DrawQuadWithSharedQuadState& input) {
419 return input.quad->visible_rect;
420 }
421
422 static bool needs_blending(const DrawQuadWithSharedQuadState& input) {
423 return input.quad->needs_blending;
424 }
425
426 static const cc::DrawQuad& debug_border_quad_state(
427 const DrawQuadWithSharedQuadState& input) {
428 return *input.quad;
429 }
430
431 static const cc::DrawQuad& render_pass_quad_state(
432 const DrawQuadWithSharedQuadState& input) {
433 return *input.quad;
434 }
435
436 static const cc::DrawQuad& solid_color_quad_state(
437 const DrawQuadWithSharedQuadState& input) {
438 return *input.quad;
439 }
440
441 static const cc::DrawQuad& surface_quad_state(
442 const DrawQuadWithSharedQuadState& input) {
443 return *input.quad;
444 }
445
446 static const cc::DrawQuad& texture_quad_state(
447 const DrawQuadWithSharedQuadState& input) {
448 return *input.quad;
449 }
450
451 static const cc::DrawQuad& tile_quad_state(
452 const DrawQuadWithSharedQuadState& input) {
453 return *input.quad;
454 }
455
456 static const cc::DrawQuad& stream_video_quad_state(
457 const DrawQuadWithSharedQuadState& input) {
458 return *input.quad;
459 }
460
461 static const cc::DrawQuad& yuv_video_quad_state(
462 const DrawQuadWithSharedQuadState& input) {
463 return *input.quad;
464 }
465
466 static OptSharedQuadState sqs(const DrawQuadWithSharedQuadState& input) {
467 OptSharedQuadState sqs;
468 sqs.sqs = input.include_sqs ? input.quad->shared_quad_state : nullptr;
469 return sqs;
470 }
471 };
472
473 // This StructTraits is only used for deserialization within RenderPasses.
393 template <> 474 template <>
394 struct StructTraits<cc::mojom::DrawQuad, cc::DrawQuad> { 475 struct StructTraits<cc::mojom::DrawQuad, cc::DrawQuad> {
395 static cc::DrawQuad::Material material(const cc::DrawQuad& quad) {
396 return quad.material;
397 }
398
399 static const gfx::Rect& rect(const cc::DrawQuad& quad) { return quad.rect; }
400
401 static const gfx::Rect& opaque_rect(const cc::DrawQuad& quad) {
402 return quad.opaque_rect;
403 }
404
405 static const gfx::Rect& visible_rect(const cc::DrawQuad& quad) {
406 return quad.visible_rect;
407 }
408
409 static bool needs_blending(const cc::DrawQuad& quad) {
410 return quad.needs_blending;
411 }
412
413 static const cc::DrawQuad& debug_border_quad_state(const cc::DrawQuad& quad) {
414 return quad;
415 }
416
417 static const cc::DrawQuad& render_pass_quad_state(const cc::DrawQuad& quad) {
418 return quad;
419 }
420
421 static const cc::DrawQuad& solid_color_quad_state(const cc::DrawQuad& quad) {
422 return quad;
423 }
424
425 static const cc::DrawQuad& surface_quad_state(const cc::DrawQuad& quad) {
426 return quad;
427 }
428
429 static const cc::DrawQuad& texture_quad_state(const cc::DrawQuad& quad) {
430 return quad;
431 }
432
433 static const cc::DrawQuad& tile_quad_state(const cc::DrawQuad& quad) {
434 return quad;
435 }
436
437 static const cc::DrawQuad& stream_video_quad_state(const cc::DrawQuad& quad) {
438 return quad;
439 }
440
441 static const cc::DrawQuad& yuv_video_quad_state(const cc::DrawQuad& data) {
442 return data;
443 }
444
445 static bool Read(cc::mojom::DrawQuadDataView data, cc::DrawQuad* out); 476 static bool Read(cc::mojom::DrawQuadDataView data, cc::DrawQuad* out);
446 }; 477 };
447 478
448 struct QuadListArray { 479 template <>
449 // This is the expected size of the array. 480 struct ArrayTraits<cc::QuadList> {
450 size_t size; 481 using Element = DrawQuadWithSharedQuadState;
451 cc::QuadList* list; 482 struct ConstIterator {
452 }; 483 ConstIterator(const cc::QuadList::ConstIterator& it,
484 const cc::DrawQuad* last_quad)
485 : it(it), last_quad(last_quad) {}
453 486
454 template <> 487 cc::QuadList::ConstIterator it;
455 struct ArrayTraits<QuadListArray> { 488 const cc::DrawQuad* last_quad;
456 using Element = cc::DrawQuad; 489 };
457 using Iterator = cc::QuadList::Iterator;
458 using ConstIterator = cc::QuadList::ConstIterator;
459 490
460 static ConstIterator GetBegin(const QuadListArray& input) { 491 static ConstIterator GetBegin(const cc::QuadList& input) {
461 return input.list->begin(); 492 return ConstIterator(input.begin(), nullptr);
462 } 493 }
463 static Iterator GetBegin(QuadListArray& input) { return input.list->begin(); } 494
464 static void AdvanceIterator(ConstIterator& iterator) { ++iterator; } 495 static void AdvanceIterator(ConstIterator& iterator) {
465 static void AdvanceIterator(Iterator& iterator) { ++iterator; } 496 iterator.last_quad = *iterator.it;
466 static const Element& GetValue(ConstIterator& iterator) { return **iterator; } 497 ++iterator.it;
467 static Element& GetValue(Iterator& iterator) { return **iterator; }
468 static size_t GetSize(const QuadListArray& input) {
469 return input.list->size();
470 } 498 }
471 static bool Resize(QuadListArray& input, size_t size) { 499
472 return input.size == size; 500 static Element GetValue(ConstIterator& iterator) {
501 DrawQuadWithSharedQuadState dq;
502 dq.quad = *iterator.it;
503 dq.include_sqs = !iterator.last_quad ||
504 iterator.last_quad->shared_quad_state !=
505 (*iterator.it)->shared_quad_state;
506 return dq;
473 } 507 }
474 };
475 508
476 template <> 509 static size_t GetSize(const cc::QuadList& input) { return input.size(); }
477 struct StructTraits<cc::mojom::QuadList, cc::QuadList> {
478 static void* SetUpContext(const cc::QuadList& quad_list);
479 static void TearDownContext(const cc::QuadList& quad_list, void* context);
480 static const mojo::Array<cc::DrawQuad::Material>& quad_types(
481 const cc::QuadList& quad_list,
482 void* context);
483 static QuadListArray quads(const cc::QuadList& quad_list) {
484 return {quad_list.size(), const_cast<cc::QuadList*>(&quad_list)};
485 }
486 static bool Read(cc::mojom::QuadListDataView data, cc::QuadList* out);
487 }; 510 };
488 511
489 } // namespace mojo 512 } // namespace mojo
490 513
491 #endif // CC_IPC_QUADS_STRUCT_TRAITS_H_ 514 #endif // CC_IPC_QUADS_STRUCT_TRAITS_H_
OLDNEW
« no previous file with comments | « cc/ipc/quads.typemap ('k') | cc/ipc/quads_struct_traits.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698