// third_party/blink/public/mojom/input/synchronous_compositor.mojom-shared.h is auto generated by mojom_bindings_generator.py, do not edit

// Copyright 2016 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef THIRD_PARTY_BLINK_PUBLIC_MOJOM_INPUT_SYNCHRONOUS_COMPOSITOR_MOJOM_SHARED_H_
#define THIRD_PARTY_BLINK_PUBLIC_MOJOM_INPUT_SYNCHRONOUS_COMPOSITOR_MOJOM_SHARED_H_

#include <stdint.h>

#include <functional>
#include <iosfwd>
#include <type_traits>
#include <utility>
#include "mojo/public/cpp/bindings/array_data_view.h"
#include "mojo/public/cpp/bindings/map_data_view.h"
#include "mojo/public/cpp/bindings/string_data_view.h"
#include "mojo/public/cpp/system/message_pipe.h"

#include "third_party/perfetto/include/perfetto/tracing/traced_value_forward.h"

#include "third_party/blink/public/mojom/input/synchronous_compositor.mojom-shared-internal.h"
#include "mojo/public/mojom/base/shared_memory.mojom-shared.h"
#include "services/viz/public/mojom/compositing/begin_frame_args.mojom-shared.h"
#include "services/viz/public/mojom/compositing/compositor_frame.mojom-shared.h"
#include "services/viz/public/mojom/compositing/compositor_frame_metadata.mojom-shared.h"
#include "services/viz/public/mojom/compositing/frame_timing_details.mojom-shared.h"
#include "services/viz/public/mojom/compositing/local_surface_id.mojom-shared.h"
#include "services/viz/public/mojom/compositing/returned_resource.mojom-shared.h"
#include "services/viz/public/mojom/compositing/thread.mojom-shared.h"
#include "services/viz/public/mojom/hit_test/hit_test_region_list.mojom-shared.h"
#include "ui/gfx/geometry/mojom/geometry.mojom-shared.h"
#include "ui/gfx/mojom/transform.mojom-shared.h"
#include "mojo/public/cpp/bindings/lib/interface_serialization.h"
#include "mojo/public/cpp/system/data_pipe.h"



#include "third_party/blink/public/mojom/input/synchronous_compositor.mojom-data-view.h"  // IWYU pragma: export
#include "base/component_export.h"




namespace std {

}  // namespace std

namespace mojo {


namespace internal {

template <typename MaybeConstUserType>
struct Serializer<::blink::mojom::SyncCompositorDemandDrawHwParamsDataView, MaybeConstUserType> {
  using UserType = typename std::remove_const<MaybeConstUserType>::type;
  using Traits = StructTraits<::blink::mojom::SyncCompositorDemandDrawHwParamsDataView, UserType>;

  static void Serialize(
      MaybeConstUserType& input,
      mojo::internal::MessageFragment<::blink::mojom::internal::SyncCompositorDemandDrawHwParams_Data>& fragment) {
    if (CallIsNullIfExists<Traits>(input))
      return;
    fragment.Allocate();

    decltype(Traits::viewport_size(input)) in_viewport_size = Traits::viewport_size(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->viewport_size)::BaseType> viewport_size_fragment(
            fragment.message());
    
    mojo::internal::Serialize<::gfx::mojom::SizeDataView>(
      in_viewport_size,
      viewport_size_fragment);

    fragment->viewport_size.Set(
        viewport_size_fragment.is_null() ? nullptr : viewport_size_fragment.data());

    
    MOJO_INTERNAL_CHECK_SERIALIZATION(
      mojo::internal::SendValidation::kDefault,
      !(fragment->viewport_size.is_null()),
      mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
      "null viewport_size in SyncCompositorDemandDrawHwParams struct");

    decltype(Traits::viewport_rect_for_tile_priority(input)) in_viewport_rect_for_tile_priority = Traits::viewport_rect_for_tile_priority(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->viewport_rect_for_tile_priority)::BaseType> viewport_rect_for_tile_priority_fragment(
            fragment.message());
    
    mojo::internal::Serialize<::gfx::mojom::RectDataView>(
      in_viewport_rect_for_tile_priority,
      viewport_rect_for_tile_priority_fragment);

    fragment->viewport_rect_for_tile_priority.Set(
        viewport_rect_for_tile_priority_fragment.is_null() ? nullptr : viewport_rect_for_tile_priority_fragment.data());

    
    MOJO_INTERNAL_CHECK_SERIALIZATION(
      mojo::internal::SendValidation::kDefault,
      !(fragment->viewport_rect_for_tile_priority.is_null()),
      mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
      "null viewport_rect_for_tile_priority in SyncCompositorDemandDrawHwParams struct");

    decltype(Traits::transform_for_tile_priority(input)) in_transform_for_tile_priority = Traits::transform_for_tile_priority(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->transform_for_tile_priority)::BaseType> transform_for_tile_priority_fragment(
            fragment.message());
    
    mojo::internal::Serialize<::gfx::mojom::TransformDataView>(
      in_transform_for_tile_priority,
      transform_for_tile_priority_fragment);

    fragment->transform_for_tile_priority.Set(
        transform_for_tile_priority_fragment.is_null() ? nullptr : transform_for_tile_priority_fragment.data());

    
    MOJO_INTERNAL_CHECK_SERIALIZATION(
      mojo::internal::SendValidation::kDefault,
      !(fragment->transform_for_tile_priority.is_null()),
      mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
      "null transform_for_tile_priority in SyncCompositorDemandDrawHwParams struct");

    fragment->need_new_local_surface_id = Traits::need_new_local_surface_id(input);
  }

  static bool Deserialize(::blink::mojom::internal::SyncCompositorDemandDrawHwParams_Data* input,
                          UserType* output,
                          Message* message) {
    if (!input)
      return CallSetToNullIfExists<Traits>(output);

    ::blink::mojom::SyncCompositorDemandDrawHwParamsDataView data_view(input, message);
    return CallTraitsRead<Traits>(data_view, output);
  }
};

}  // namespace internal


namespace internal {

template <typename MaybeConstUserType>
struct Serializer<::blink::mojom::SyncCompositorDemandDrawSwParamsDataView, MaybeConstUserType> {
  using UserType = typename std::remove_const<MaybeConstUserType>::type;
  using Traits = StructTraits<::blink::mojom::SyncCompositorDemandDrawSwParamsDataView, UserType>;

  static void Serialize(
      MaybeConstUserType& input,
      mojo::internal::MessageFragment<::blink::mojom::internal::SyncCompositorDemandDrawSwParams_Data>& fragment) {
    if (CallIsNullIfExists<Traits>(input))
      return;
    fragment.Allocate();

    decltype(Traits::size(input)) in_size = Traits::size(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->size)::BaseType> size_fragment(
            fragment.message());
    
    mojo::internal::Serialize<::gfx::mojom::SizeDataView>(
      in_size,
      size_fragment);

    fragment->size.Set(
        size_fragment.is_null() ? nullptr : size_fragment.data());

    
    MOJO_INTERNAL_CHECK_SERIALIZATION(
      mojo::internal::SendValidation::kDefault,
      !(fragment->size.is_null()),
      mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
      "null size in SyncCompositorDemandDrawSwParams struct");

    decltype(Traits::clip(input)) in_clip = Traits::clip(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->clip)::BaseType> clip_fragment(
            fragment.message());
    
    mojo::internal::Serialize<::gfx::mojom::RectDataView>(
      in_clip,
      clip_fragment);

    fragment->clip.Set(
        clip_fragment.is_null() ? nullptr : clip_fragment.data());

    
    MOJO_INTERNAL_CHECK_SERIALIZATION(
      mojo::internal::SendValidation::kDefault,
      !(fragment->clip.is_null()),
      mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
      "null clip in SyncCompositorDemandDrawSwParams struct");

    decltype(Traits::transform(input)) in_transform = Traits::transform(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->transform)::BaseType> transform_fragment(
            fragment.message());
    
    mojo::internal::Serialize<::gfx::mojom::TransformDataView>(
      in_transform,
      transform_fragment);

    fragment->transform.Set(
        transform_fragment.is_null() ? nullptr : transform_fragment.data());

    
    MOJO_INTERNAL_CHECK_SERIALIZATION(
      mojo::internal::SendValidation::kDefault,
      !(fragment->transform.is_null()),
      mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
      "null transform in SyncCompositorDemandDrawSwParams struct");
  }

  static bool Deserialize(::blink::mojom::internal::SyncCompositorDemandDrawSwParams_Data* input,
                          UserType* output,
                          Message* message) {
    if (!input)
      return CallSetToNullIfExists<Traits>(output);

    ::blink::mojom::SyncCompositorDemandDrawSwParamsDataView data_view(input, message);
    return CallTraitsRead<Traits>(data_view, output);
  }
};

}  // namespace internal


namespace internal {

template <typename MaybeConstUserType>
struct Serializer<::blink::mojom::SyncCompositorCommonRendererParamsDataView, MaybeConstUserType> {
  using UserType = typename std::remove_const<MaybeConstUserType>::type;
  using Traits = StructTraits<::blink::mojom::SyncCompositorCommonRendererParamsDataView, UserType>;

  static void Serialize(
      MaybeConstUserType& input,
      mojo::internal::MessageFragment<::blink::mojom::internal::SyncCompositorCommonRendererParams_Data>& fragment) {
    if (CallIsNullIfExists<Traits>(input))
      return;
    fragment.Allocate();

    fragment->version = Traits::version(input);

    decltype(Traits::total_scroll_offset(input)) in_total_scroll_offset = Traits::total_scroll_offset(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->total_scroll_offset)::BaseType> total_scroll_offset_fragment(
            fragment.message());
    
    mojo::internal::Serialize<::gfx::mojom::PointFDataView>(
      in_total_scroll_offset,
      total_scroll_offset_fragment);

    fragment->total_scroll_offset.Set(
        total_scroll_offset_fragment.is_null() ? nullptr : total_scroll_offset_fragment.data());

    
    MOJO_INTERNAL_CHECK_SERIALIZATION(
      mojo::internal::SendValidation::kDefault,
      !(fragment->total_scroll_offset.is_null()),
      mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
      "null total_scroll_offset in SyncCompositorCommonRendererParams struct");

    decltype(Traits::max_scroll_offset(input)) in_max_scroll_offset = Traits::max_scroll_offset(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->max_scroll_offset)::BaseType> max_scroll_offset_fragment(
            fragment.message());
    
    mojo::internal::Serialize<::gfx::mojom::PointFDataView>(
      in_max_scroll_offset,
      max_scroll_offset_fragment);

    fragment->max_scroll_offset.Set(
        max_scroll_offset_fragment.is_null() ? nullptr : max_scroll_offset_fragment.data());

    
    MOJO_INTERNAL_CHECK_SERIALIZATION(
      mojo::internal::SendValidation::kDefault,
      !(fragment->max_scroll_offset.is_null()),
      mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
      "null max_scroll_offset in SyncCompositorCommonRendererParams struct");

    decltype(Traits::scrollable_size(input)) in_scrollable_size = Traits::scrollable_size(input);
    mojo::internal::MessageFragment<
        typename decltype(fragment->scrollable_size)::BaseType> scrollable_size_fragment(
            fragment.message());
    
    mojo::internal::Serialize<::gfx::mojom::SizeFDataView>(
      in_scrollable_size,
      scrollable_size_fragment);

    fragment->scrollable_size.Set(
        scrollable_size_fragment.is_null() ? nullptr : scrollable_size_fragment.data());

    
    MOJO_INTERNAL_CHECK_SERIALIZATION(
      mojo::internal::SendValidation::kDefault,
      !(fragment->scrollable_size.is_null()),
      mojo::internal::VALIDATION_ERROR_UNEXPECTED_NULL_POINTER,
      "null scrollable_size in SyncCompositorCommonRendererParams struct");

    fragment->page_scale_factor = Traits::page_scale_factor(input);

    fragment->min_page_scale_factor = Traits::min_page_scale_factor(input);

    fragment->max_page_scale_factor = Traits::max_page_scale_factor(input);

    fragment->need_invalidate_count = Traits::need_invalidate_count(input);

    fragment->invalidate_needs_draw = Traits::invalidate_needs_draw(input);

    fragment->did_activate_pending_tree_count = Traits::did_activate_pending_tree_count(input);
  }

  static bool Deserialize(::blink::mojom::internal::SyncCompositorCommonRendererParams_Data* input,
                          UserType* output,
                          Message* message) {
    if (!input)
      return CallSetToNullIfExists<Traits>(output);

    ::blink::mojom::SyncCompositorCommonRendererParamsDataView data_view(input, message);
    return CallTraitsRead<Traits>(data_view, output);
  }
};

}  // namespace internal

}  // namespace mojo


namespace blink::mojom {

inline void SyncCompositorDemandDrawHwParamsDataView::GetViewportSizeDataView(
    ::gfx::mojom::SizeDataView* output) {
  auto pointer = data_->viewport_size.Get();
  *output = ::gfx::mojom::SizeDataView(pointer, message_);
}
inline void SyncCompositorDemandDrawHwParamsDataView::GetViewportRectForTilePriorityDataView(
    ::gfx::mojom::RectDataView* output) {
  auto pointer = data_->viewport_rect_for_tile_priority.Get();
  *output = ::gfx::mojom::RectDataView(pointer, message_);
}
inline void SyncCompositorDemandDrawHwParamsDataView::GetTransformForTilePriorityDataView(
    ::gfx::mojom::TransformDataView* output) {
  auto pointer = data_->transform_for_tile_priority.Get();
  *output = ::gfx::mojom::TransformDataView(pointer, message_);
}


inline void SyncCompositorDemandDrawSwParamsDataView::GetSizeDataView(
    ::gfx::mojom::SizeDataView* output) {
  auto pointer = data_->size.Get();
  *output = ::gfx::mojom::SizeDataView(pointer, message_);
}
inline void SyncCompositorDemandDrawSwParamsDataView::GetClipDataView(
    ::gfx::mojom::RectDataView* output) {
  auto pointer = data_->clip.Get();
  *output = ::gfx::mojom::RectDataView(pointer, message_);
}
inline void SyncCompositorDemandDrawSwParamsDataView::GetTransformDataView(
    ::gfx::mojom::TransformDataView* output) {
  auto pointer = data_->transform.Get();
  *output = ::gfx::mojom::TransformDataView(pointer, message_);
}


inline void SyncCompositorCommonRendererParamsDataView::GetTotalScrollOffsetDataView(
    ::gfx::mojom::PointFDataView* output) {
  auto pointer = data_->total_scroll_offset.Get();
  *output = ::gfx::mojom::PointFDataView(pointer, message_);
}
inline void SyncCompositorCommonRendererParamsDataView::GetMaxScrollOffsetDataView(
    ::gfx::mojom::PointFDataView* output) {
  auto pointer = data_->max_scroll_offset.Get();
  *output = ::gfx::mojom::PointFDataView(pointer, message_);
}
inline void SyncCompositorCommonRendererParamsDataView::GetScrollableSizeDataView(
    ::gfx::mojom::SizeFDataView* output) {
  auto pointer = data_->scrollable_size.Get();
  *output = ::gfx::mojom::SizeFDataView(pointer, message_);
}



}  // blink::mojom

// Declare TraceFormatTraits for enums, which should be defined in ::perfetto
// namespace.

#endif  // THIRD_PARTY_BLINK_PUBLIC_MOJOM_INPUT_SYNCHRONOUS_COMPOSITOR_MOJOM_SHARED_H_