#include "components/viz/service/transitions/surface_animation_manager.h"
#include <algorithm>
#include <memory>
#include <utility>
#include <vector>
#include "base/check_op.h"
#include "base/containers/flat_map.h"
#include "base/functional/bind.h"
#include "base/logging.h"
#include "base/memory/ptr_util.h"
#include "base/time/time.h"
#include "cc/base/math_util.h"
#include "components/viz/common/quads/compositor_frame.h"
#include "components/viz/common/quads/compositor_render_pass.h"
#include "components/viz/common/quads/compositor_render_pass_draw_quad.h"
#include "components/viz/common/quads/shared_element_draw_quad.h"
#include "components/viz/common/quads/texture_draw_quad.h"
#include "components/viz/common/resources/resource_id.h"
#include "components/viz/common/resources/returned_resource.h"
#include "components/viz/common/resources/transferable_resource.h"
#include "components/viz/common/switches.h"
#include "components/viz/common/transition_utils.h"
#include "components/viz/common/viz_utils.h"
#include "components/viz/service/surfaces/surface.h"
#include "third_party/skia/include/core/SkBlendMode.h"
#include "ui/gfx/animation/keyframe/animation_curve.h"
#include "ui/gfx/animation/keyframe/keyframed_animation_curve.h"
#include "ui/gfx/animation/keyframe/timing_function.h"
#include "ui/gfx/geometry/point.h"
#include "ui/gfx/geometry/rect.h"
#include "ui/gfx/geometry/rect_conversions.h"
#include "ui/gfx/geometry/size.h"
#include "ui/gfx/geometry/size_conversions.h"
#include "ui/gfx/geometry/size_f.h"
#include "ui/gfx/geometry/transform.h"
#include "ui/gfx/geometry/transform_operations.h"
#include "ui/gfx/geometry/vector2d_f.h"
namespace viz {
namespace {
void ReplaceSharedElementWithRenderPass(
CompositorRenderPass* target_render_pass,
const SharedElementDrawQuad& shared_element_quad,
CompositorRenderPass* shared_element_content_pass) { … }
void ReplaceSharedElementWithTexture(
CompositorRenderPass* target_render_pass,
const SharedElementDrawQuad& shared_element_quad,
ResourceId resource_id) { … }
}
std::unique_ptr<SurfaceAnimationManager>
SurfaceAnimationManager::CreateWithSave(
const CompositorFrameTransitionDirective& directive,
Surface* surface,
SharedBitmapManager* shared_bitmap_manager,
gpu::SharedImageInterface* shared_image_interface,
ReservedResourceIdTracker* id_tracker,
SaveDirectiveCompleteCallback sequence_id_finished_callback) { … }
SurfaceAnimationManager::SurfaceAnimationManager(
const CompositorFrameTransitionDirective& directive,
Surface* surface,
SharedBitmapManager* shared_bitmap_manager,
gpu::SharedImageInterface* shared_image_interface,
ReservedResourceIdTracker* id_tracker,
SaveDirectiveCompleteCallback sequence_id_finished_callback)
: … { … }
SurfaceAnimationManager::~SurfaceAnimationManager() { … }
void SurfaceAnimationManager::OnSaveDirectiveProcessed(
SaveDirectiveCompleteCallback callback,
const CompositorFrameTransitionDirective& directive) { … }
bool SurfaceAnimationManager::Animate() { … }
void SurfaceAnimationManager::ImportTextures() { … }
void SurfaceAnimationManager::ReceiveFromChild(
const std::vector<TransferableResource>& resources) { … }
void SurfaceAnimationManager::RefResources(
const std::vector<TransferableResource>& resources) { … }
void SurfaceAnimationManager::UnrefResources(
const std::vector<ReturnedResource>& resources) { … }
bool SurfaceAnimationManager::FilterSharedElementsWithRenderPassOrResource(
std::vector<TransferableResource>* resource_list,
const base::flat_map<ViewTransitionElementResourceId,
CompositorRenderPass*>* element_id_to_pass,
const base::flat_map<blink::ViewTransitionToken,
std::unique_ptr<SurfaceAnimationManager>>*
token_to_animation_manager,
const DrawQuad& quad,
CompositorRenderPass& copy_pass) { … }
void SurfaceAnimationManager::ReplaceSharedElementResources(
Surface* surface,
const base::flat_map<blink::ViewTransitionToken,
std::unique_ptr<SurfaceAnimationManager>>&
token_to_animation_manager) { … }
}