| Index: cc/ipc/quads_struct_traits.h
|
| diff --git a/cc/ipc/quads_struct_traits.h b/cc/ipc/quads_struct_traits.h
|
| index ed602beb8f1aed81776fde2c93b702e2fca5fa19..a1e4e71af3aff9e829d0358709726ede076be606 100644
|
| --- a/cc/ipc/quads_struct_traits.h
|
| +++ b/cc/ipc/quads_struct_traits.h
|
| @@ -9,6 +9,7 @@
|
| #include "cc/ipc/filter_operations_struct_traits.h"
|
| #include "cc/ipc/quads.mojom.h"
|
| #include "cc/ipc/render_pass_id_struct_traits.h"
|
| +#include "cc/ipc/shared_quad_state_struct_traits.h"
|
| #include "cc/ipc/surface_id_struct_traits.h"
|
| #include "cc/quads/debug_border_draw_quad.h"
|
| #include "cc/quads/picture_draw_quad.h"
|
| @@ -23,6 +24,8 @@
|
|
|
| namespace mojo {
|
|
|
| +cc::DrawQuad* AllocateAndConstruct(cc::mojom::Material material,
|
| + cc::QuadList* list);
|
| template <>
|
| struct EnumTraits<cc::mojom::Material, cc::DrawQuad::Material> {
|
| static cc::mojom::Material ToMojom(cc::DrawQuad::Material material);
|
| @@ -390,100 +393,120 @@ struct StructTraits<cc::mojom::YUVVideoQuadState, cc::DrawQuad> {
|
| cc::DrawQuad* out);
|
| };
|
|
|
| +struct DrawQuadWithSharedQuadState {
|
| + const cc::DrawQuad* quad;
|
| + bool include_sqs;
|
| +};
|
| +
|
| template <>
|
| -struct StructTraits<cc::mojom::DrawQuad, cc::DrawQuad> {
|
| - static cc::DrawQuad::Material material(const cc::DrawQuad& quad) {
|
| - return quad.material;
|
| +struct StructTraits<cc::mojom::DrawQuad, DrawQuadWithSharedQuadState> {
|
| + static cc::DrawQuad::Material material(
|
| + const DrawQuadWithSharedQuadState& input) {
|
| + return input.quad->material;
|
| }
|
|
|
| - static const gfx::Rect& rect(const cc::DrawQuad& quad) { return quad.rect; }
|
| + static const gfx::Rect& rect(const DrawQuadWithSharedQuadState& input) {
|
| + return input.quad->rect;
|
| + }
|
|
|
| - static const gfx::Rect& opaque_rect(const cc::DrawQuad& quad) {
|
| - return quad.opaque_rect;
|
| + static const gfx::Rect& opaque_rect(
|
| + const DrawQuadWithSharedQuadState& input) {
|
| + return input.quad->opaque_rect;
|
| }
|
|
|
| - static const gfx::Rect& visible_rect(const cc::DrawQuad& quad) {
|
| - return quad.visible_rect;
|
| + static const gfx::Rect& visible_rect(
|
| + const DrawQuadWithSharedQuadState& input) {
|
| + return input.quad->visible_rect;
|
| }
|
|
|
| - static bool needs_blending(const cc::DrawQuad& quad) {
|
| - return quad.needs_blending;
|
| + static bool needs_blending(const DrawQuadWithSharedQuadState& input) {
|
| + return input.quad->needs_blending;
|
| }
|
|
|
| - static const cc::DrawQuad& debug_border_quad_state(const cc::DrawQuad& quad) {
|
| - return quad;
|
| + static const cc::DrawQuad& debug_border_quad_state(
|
| + const DrawQuadWithSharedQuadState& input) {
|
| + return *input.quad;
|
| }
|
|
|
| - static const cc::DrawQuad& render_pass_quad_state(const cc::DrawQuad& quad) {
|
| - return quad;
|
| + static const cc::DrawQuad& render_pass_quad_state(
|
| + const DrawQuadWithSharedQuadState& input) {
|
| + return *input.quad;
|
| }
|
|
|
| - static const cc::DrawQuad& solid_color_quad_state(const cc::DrawQuad& quad) {
|
| - return quad;
|
| + static const cc::DrawQuad& solid_color_quad_state(
|
| + const DrawQuadWithSharedQuadState& input) {
|
| + return *input.quad;
|
| }
|
|
|
| - static const cc::DrawQuad& surface_quad_state(const cc::DrawQuad& quad) {
|
| - return quad;
|
| + static const cc::DrawQuad& surface_quad_state(
|
| + const DrawQuadWithSharedQuadState& input) {
|
| + return *input.quad;
|
| }
|
|
|
| - static const cc::DrawQuad& texture_quad_state(const cc::DrawQuad& quad) {
|
| - return quad;
|
| + static const cc::DrawQuad& texture_quad_state(
|
| + const DrawQuadWithSharedQuadState& input) {
|
| + return *input.quad;
|
| }
|
|
|
| - static const cc::DrawQuad& tile_quad_state(const cc::DrawQuad& quad) {
|
| - return quad;
|
| + static const cc::DrawQuad& tile_quad_state(
|
| + const DrawQuadWithSharedQuadState& input) {
|
| + return *input.quad;
|
| }
|
|
|
| - static const cc::DrawQuad& stream_video_quad_state(const cc::DrawQuad& quad) {
|
| - return quad;
|
| + static const cc::DrawQuad& stream_video_quad_state(
|
| + const DrawQuadWithSharedQuadState& input) {
|
| + return *input.quad;
|
| }
|
|
|
| - static const cc::DrawQuad& yuv_video_quad_state(const cc::DrawQuad& data) {
|
| - return data;
|
| + static const cc::DrawQuad& yuv_video_quad_state(
|
| + const DrawQuadWithSharedQuadState& input) {
|
| + return *input.quad;
|
| }
|
|
|
| - static bool Read(cc::mojom::DrawQuadDataView data, cc::DrawQuad* out);
|
| + static OptSharedQuadState sqs(const DrawQuadWithSharedQuadState& input) {
|
| + OptSharedQuadState sqs;
|
| + sqs.sqs = input.include_sqs ? input.quad->shared_quad_state : nullptr;
|
| + return sqs;
|
| + }
|
| };
|
|
|
| -struct QuadListArray {
|
| - // This is the expected size of the array.
|
| - size_t size;
|
| - cc::QuadList* list;
|
| +// This StructTraits is only used for deserialization within RenderPasses.
|
| +template <>
|
| +struct StructTraits<cc::mojom::DrawQuad, cc::DrawQuad> {
|
| + static bool Read(cc::mojom::DrawQuadDataView data, cc::DrawQuad* out);
|
| };
|
|
|
| template <>
|
| -struct ArrayTraits<QuadListArray> {
|
| - using Element = cc::DrawQuad;
|
| - using Iterator = cc::QuadList::Iterator;
|
| - using ConstIterator = cc::QuadList::ConstIterator;
|
| +struct ArrayTraits<cc::QuadList> {
|
| + using Element = DrawQuadWithSharedQuadState;
|
| + struct ConstIterator {
|
| + ConstIterator(const cc::QuadList::ConstIterator& it,
|
| + const cc::DrawQuad* last_quad)
|
| + : it(it), last_quad(last_quad) {}
|
|
|
| - static ConstIterator GetBegin(const QuadListArray& input) {
|
| - return input.list->begin();
|
| + cc::QuadList::ConstIterator it;
|
| + const cc::DrawQuad* last_quad;
|
| + };
|
| +
|
| + static ConstIterator GetBegin(const cc::QuadList& input) {
|
| + return ConstIterator(input.begin(), nullptr);
|
| }
|
| - static Iterator GetBegin(QuadListArray& input) { return input.list->begin(); }
|
| - static void AdvanceIterator(ConstIterator& iterator) { ++iterator; }
|
| - static void AdvanceIterator(Iterator& iterator) { ++iterator; }
|
| - static const Element& GetValue(ConstIterator& iterator) { return **iterator; }
|
| - static Element& GetValue(Iterator& iterator) { return **iterator; }
|
| - static size_t GetSize(const QuadListArray& input) {
|
| - return input.list->size();
|
| +
|
| + static void AdvanceIterator(ConstIterator& iterator) {
|
| + iterator.last_quad = *iterator.it;
|
| + ++iterator.it;
|
| }
|
| - static bool Resize(QuadListArray& input, size_t size) {
|
| - return input.size == size;
|
| +
|
| + static Element GetValue(ConstIterator& iterator) {
|
| + DrawQuadWithSharedQuadState dq;
|
| + dq.quad = *iterator.it;
|
| + dq.include_sqs = !iterator.last_quad ||
|
| + iterator.last_quad->shared_quad_state !=
|
| + (*iterator.it)->shared_quad_state;
|
| + return dq;
|
| }
|
| -};
|
|
|
| -template <>
|
| -struct StructTraits<cc::mojom::QuadList, cc::QuadList> {
|
| - static void* SetUpContext(const cc::QuadList& quad_list);
|
| - static void TearDownContext(const cc::QuadList& quad_list, void* context);
|
| - static const mojo::Array<cc::DrawQuad::Material>& quad_types(
|
| - const cc::QuadList& quad_list,
|
| - void* context);
|
| - static QuadListArray quads(const cc::QuadList& quad_list) {
|
| - return {quad_list.size(), const_cast<cc::QuadList*>(&quad_list)};
|
| - }
|
| - static bool Read(cc::mojom::QuadListDataView data, cc::QuadList* out);
|
| + static size_t GetSize(const cc::QuadList& input) { return input.size(); }
|
| };
|
|
|
| } // namespace mojo
|
|
|