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

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: A little bit of cleanup Created 4 years, 5 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
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 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
393 template <> 473 template <>
394 struct StructTraits<cc::mojom::DrawQuad, cc::DrawQuad> { 474 struct StructTraits<cc::mojom::DrawQuad, cc::DrawQuad> {
yzshen1 2016/07/26 17:56:03 Is this StructTraits still needed after we introdu
Fady Samuel 2016/07/27 23:52:22 No, I added a TODO to move over tests.
395 static cc::DrawQuad::Material material(const cc::DrawQuad& quad) { 475 static cc::DrawQuad::Material material(const cc::DrawQuad& quad) {
396 return quad.material; 476 return quad.material;
397 } 477 }
398 478
399 static const gfx::Rect& rect(const cc::DrawQuad& quad) { return quad.rect; } 479 static const gfx::Rect& rect(const cc::DrawQuad& quad) { return quad.rect; }
400 480
401 static const gfx::Rect& opaque_rect(const cc::DrawQuad& quad) { 481 static const gfx::Rect& opaque_rect(const cc::DrawQuad& quad) {
402 return quad.opaque_rect; 482 return quad.opaque_rect;
403 } 483 }
404 484
405 static const gfx::Rect& visible_rect(const cc::DrawQuad& quad) { 485 static const gfx::Rect& visible_rect(const cc::DrawQuad& quad) {
406 return quad.visible_rect; 486 return quad.visible_rect;
407 } 487 }
408 488
409 static bool needs_blending(const cc::DrawQuad& quad) { 489 static bool needs_blending(const cc::DrawQuad& quad) {
410 return quad.needs_blending; 490 return quad.needs_blending;
411 } 491 }
412 492
493 static cc::mojom::SharedQuadStatePtr sqs(const cc::DrawQuad& quad) {
494 return nullptr;
495 }
496
413 static const cc::DrawQuad& debug_border_quad_state(const cc::DrawQuad& quad) { 497 static const cc::DrawQuad& debug_border_quad_state(const cc::DrawQuad& quad) {
414 return quad; 498 return quad;
415 } 499 }
416 500
417 static const cc::DrawQuad& render_pass_quad_state(const cc::DrawQuad& quad) { 501 static const cc::DrawQuad& render_pass_quad_state(const cc::DrawQuad& quad) {
418 return quad; 502 return quad;
419 } 503 }
420 504
421 static const cc::DrawQuad& solid_color_quad_state(const cc::DrawQuad& quad) { 505 static const cc::DrawQuad& solid_color_quad_state(const cc::DrawQuad& quad) {
422 return quad; 506 return quad;
(...skipping 19 matching lines...) Expand all
442 return data; 526 return data;
443 } 527 }
444 528
445 static bool Read(cc::mojom::DrawQuadDataView data, cc::DrawQuad* out); 529 static bool Read(cc::mojom::DrawQuadDataView data, cc::DrawQuad* out);
446 }; 530 };
447 531
448 struct QuadListArray { 532 struct QuadListArray {
449 // This is the expected size of the array. 533 // This is the expected size of the array.
450 size_t size; 534 size_t size;
451 cc::QuadList* list; 535 cc::QuadList* list;
536 const cc::DrawQuad* last_quad;
452 }; 537 };
453 538
454 template <> 539 template <>
455 struct ArrayTraits<QuadListArray> { 540 struct ArrayTraits<QuadListArray> {
456 using Element = cc::DrawQuad; 541 using Element = DrawQuadWithSharedQuadState;
457 using Iterator = cc::QuadList::Iterator; 542 using Iterator = cc::QuadList::Iterator;
458 using ConstIterator = cc::QuadList::ConstIterator; 543 using ConstIterator = cc::QuadList::ConstIterator;
459 544
460 static ConstIterator GetBegin(const QuadListArray& input) { 545 static ConstIterator GetBegin(const QuadListArray& input) {
461 return input.list->begin(); 546 return input.list->begin();
462 } 547 }
463 static Iterator GetBegin(QuadListArray& input) { return input.list->begin(); } 548 static Iterator GetBegin(QuadListArray& input) { return input.list->begin(); }
464 static void AdvanceIterator(ConstIterator& iterator) { ++iterator; } 549 static void AdvanceIterator(QuadListArray& input, ConstIterator& iterator) {
yzshen1 2016/07/26 17:56:03 This API change seems pretty weird. |input| is non
Fady Samuel 2016/07/27 23:52:23 Done.
465 static void AdvanceIterator(Iterator& iterator) { ++iterator; } 550 input.last_quad = *iterator;
466 static const Element& GetValue(ConstIterator& iterator) { return **iterator; } 551 ++iterator;
467 static Element& GetValue(Iterator& iterator) { return **iterator; } 552 }
553 static void AdvanceIterator(QuadListArray& input, Iterator& iterator) {
554 input.last_quad = *iterator;
555 ++iterator;
556 }
557 static const Element& GetValue(QuadListArray& input,
558 ConstIterator& iterator) {
559 static DrawQuadWithSharedQuadState dq;
yzshen1 2016/07/26 17:56:03 This is pretty hacky. It won't work, for example,
Fady Samuel 2016/07/27 23:52:22 I added support for returning Element by value.
560 dq.quad = const_cast<cc::DrawQuad*>(*iterator);
561 dq.include_sqs =
562 !input.last_quad ||
563 input.last_quad->shared_quad_state != (*iterator)->shared_quad_state;
564 return dq;
565 }
566 static Element& GetValue(QuadListArray& input, Iterator& iterator) {
567 static DrawQuadWithSharedQuadState dq;
568 dq.quad = *iterator;
569 dq.include_sqs =
570 !input.last_quad ||
571 input.last_quad->shared_quad_state != (*iterator)->shared_quad_state;
572 return dq;
573 }
468 static size_t GetSize(const QuadListArray& input) { 574 static size_t GetSize(const QuadListArray& input) {
469 return input.list->size(); 575 return input.list->size();
470 } 576 }
471 static bool Resize(QuadListArray& input, size_t size) { 577 static bool Resize(QuadListArray& input, size_t size) {
472 return input.size == size; 578 return input.size == size;
473 } 579 }
474 }; 580 };
475 581
476 template <> 582 template <>
477 struct StructTraits<cc::mojom::QuadList, cc::QuadList> { 583 struct StructTraits<cc::mojom::QuadList, cc::QuadList> {
yzshen1 2016/07/26 17:56:03 Is it possible that we remove cc::mojom::QuadList?
Fady Samuel 2016/07/27 23:52:23 Done.
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) { 584 static QuadListArray quads(const cc::QuadList& quad_list) {
484 return {quad_list.size(), const_cast<cc::QuadList*>(&quad_list)}; 585 return {quad_list.size(), const_cast<cc::QuadList*>(&quad_list), nullptr};
485 } 586 }
486 static bool Read(cc::mojom::QuadListDataView data, cc::QuadList* out); 587 static bool Read(cc::mojom::QuadListDataView data, cc::QuadList* out);
487 }; 588 };
488 589
489 } // namespace mojo 590 } // namespace mojo
490 591
491 #endif // CC_IPC_QUADS_STRUCT_TRAITS_H_ 592 #endif // CC_IPC_QUADS_STRUCT_TRAITS_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698