#ifndef COMPONENTS_VIZ_COMMON_QUADS_COMPOSITOR_FRAME_TRANSITION_DIRECTIVE_H_
#define COMPONENTS_VIZ_COMMON_QUADS_COMPOSITOR_FRAME_TRANSITION_DIRECTIVE_H_
#include <string>
#include <vector>
#include "base/time/time.h"
#include "components/viz/common/quads/compositor_render_pass.h"
#include "components/viz/common/view_transition_element_resource_id.h"
#include "components/viz/common/viz_common_export.h"
#include "ui/gfx/display_color_spaces.h"
namespace base::trace_event {
class TracedValue;
}
namespace viz {
class VIZ_COMMON_EXPORT CompositorFrameTransitionDirective {
public:
enum class Type { kSave, kAnimateRenderer, kRelease };
struct VIZ_COMMON_EXPORT SharedElement {
SharedElement();
~SharedElement();
SharedElement(const SharedElement&);
SharedElement& operator=(const SharedElement&);
SharedElement(SharedElement&&);
SharedElement& operator=(SharedElement&&);
friend bool operator==(const SharedElement&,
const SharedElement&) = default;
void AsValueInto(base::trace_event::TracedValue* value) const;
CompositorRenderPassId render_pass_id;
ViewTransitionElementResourceId view_transition_element_resource_id;
};
CompositorFrameTransitionDirective();
static CompositorFrameTransitionDirective CreateSave(
const blink::ViewTransitionToken& transition_token,
bool maybe_cross_frame_sink,
uint32_t sequence_id,
std::vector<SharedElement> shared_elements,
const gfx::DisplayColorSpaces& display_color_spaces);
static CompositorFrameTransitionDirective CreateAnimate(
const blink::ViewTransitionToken& transition_token,
bool maybe_cross_frame_sink,
uint32_t sequence_id);
static CompositorFrameTransitionDirective CreateRelease(
const blink::ViewTransitionToken& transition_token,
bool maybe_cross_frame_sink,
uint32_t sequence_id);
CompositorFrameTransitionDirective(const CompositorFrameTransitionDirective&);
~CompositorFrameTransitionDirective();
CompositorFrameTransitionDirective& operator=(
const CompositorFrameTransitionDirective&);
void AsValueInto(base::trace_event::TracedValue* value) const;
uint32_t sequence_id() const { return sequence_id_; }
Type type() const { return type_; }
blink::ViewTransitionToken transition_token() const {
return transition_token_;
}
const std::vector<SharedElement>& shared_elements() const {
return shared_elements_;
}
bool maybe_cross_frame_sink() const { return maybe_cross_frame_sink_; }
const gfx::DisplayColorSpaces& display_color_spaces() const {
return display_color_spaces_;
}
private:
CompositorFrameTransitionDirective(
const blink::ViewTransitionToken& transition_token,
bool maybe_cross_frame_sink,
uint32_t sequence_id,
Type type,
std::vector<SharedElement> shared_elements = {},
const gfx::DisplayColorSpaces& display_color_spaces = {});
blink::ViewTransitionToken transition_token_;
bool maybe_cross_frame_sink_ = false;
uint32_t sequence_id_ = 0;
Type type_ = Type::kSave;
std::vector<SharedElement> shared_elements_;
gfx::DisplayColorSpaces display_color_spaces_;
};
}
#endif