blob: 3b8f54536ee9a54796ef2c3e59b7652ec1580686 [file] [log] [blame]
// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/viz/common/quads/compositor_frame_transition_directive.h"
#include <string>
#include <utility>
#include "base/time/time.h"
#include "base/trace_event/traced_value.h"
namespace viz {
namespace {
const char* TypeToString(CompositorFrameTransitionDirective::Type type) {
switch (type) {
case CompositorFrameTransitionDirective::Type::kSave:
return "kSave";
case CompositorFrameTransitionDirective::Type::kAnimateRenderer:
return "kAnimateRenderer";
case CompositorFrameTransitionDirective::Type::kRelease:
return "kRelease";
}
NOTREACHED();
}
} // namespace
// static
CompositorFrameTransitionDirective
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) {
return CompositorFrameTransitionDirective(
transition_token, maybe_cross_frame_sink, sequence_id, Type::kSave,
std::move(shared_elements), display_color_spaces);
}
// static
CompositorFrameTransitionDirective
CompositorFrameTransitionDirective::CreateAnimate(
const blink::ViewTransitionToken& transition_token,
bool maybe_cross_frame_sink,
uint32_t sequence_id) {
return CompositorFrameTransitionDirective(transition_token,
maybe_cross_frame_sink, sequence_id,
Type::kAnimateRenderer);
}
// static
CompositorFrameTransitionDirective
CompositorFrameTransitionDirective::CreateRelease(
const blink::ViewTransitionToken& transition_token,
bool maybe_cross_frame_sink,
uint32_t sequence_id) {
return CompositorFrameTransitionDirective(
transition_token, maybe_cross_frame_sink, sequence_id, Type::kRelease);
}
CompositorFrameTransitionDirective::CompositorFrameTransitionDirective() =
default;
CompositorFrameTransitionDirective::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)
: transition_token_(transition_token),
maybe_cross_frame_sink_(maybe_cross_frame_sink),
sequence_id_(sequence_id),
type_(type),
shared_elements_(std::move(shared_elements)),
display_color_spaces_(display_color_spaces) {}
CompositorFrameTransitionDirective::CompositorFrameTransitionDirective(
const CompositorFrameTransitionDirective&) = default;
CompositorFrameTransitionDirective::~CompositorFrameTransitionDirective() =
default;
CompositorFrameTransitionDirective&
CompositorFrameTransitionDirective::operator=(
const CompositorFrameTransitionDirective&) = default;
CompositorFrameTransitionDirective::SharedElement::SharedElement() = default;
CompositorFrameTransitionDirective::SharedElement::~SharedElement() = default;
CompositorFrameTransitionDirective::SharedElement::SharedElement(
const SharedElement&) = default;
CompositorFrameTransitionDirective::SharedElement&
CompositorFrameTransitionDirective::SharedElement::operator=(
const SharedElement&) = default;
CompositorFrameTransitionDirective::SharedElement::SharedElement(
SharedElement&&) = default;
CompositorFrameTransitionDirective::SharedElement&
CompositorFrameTransitionDirective::SharedElement::operator=(SharedElement&&) =
default;
void CompositorFrameTransitionDirective::SharedElement::AsValueInto(
base::trace_event::TracedValue* value) const {
value->SetInteger("render_pass_id", render_pass_id.GetUnsafeValue());
value->SetString("view_transition_element_resource_id",
view_transition_element_resource_id.ToString());
}
void CompositorFrameTransitionDirective::AsValueInto(
base::trace_event::TracedValue* value) const {
value->SetString("type", TypeToString(type_));
value->SetInteger("sequence_id", sequence_id_);
value->SetString("transition_token", transition_token_.ToString());
value->SetBoolean("maybe_cross_frame_sink", maybe_cross_frame_sink_);
value->BeginDictionary("display_color_spaces");
display_color_spaces_.AsValueInto(value);
value->EndDictionary();
value->BeginArray("shared_elements");
for (const auto& element : shared_elements_) {
value->BeginDictionary();
element.AsValueInto(value);
value->EndDictionary();
}
value->EndArray();
}
} // namespace viz