blob: ecd0d6671bdfe1b8a119b474f7dbe25dc3780749 [file] [log] [blame]
Majid Valipoure9855f72017-10-20 02:08:581// Copyright 2017 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "cc/trees/layer_tree_mutator.h"
6
Majid Valipourc035b5fc2018-07-04 15:17:217#include <algorithm>
8
Majid Valipoure9855f72017-10-20 02:08:589namespace cc {
10
Majid Valipourc035b5fc2018-07-04 15:17:2111AnimationWorkletInput::AddAndUpdateState::AddAndUpdateState(
12 WorkletAnimationId worklet_animation_id,
Yi Gua5a3bb6c2018-06-01 22:16:0713 std::string name,
14 double current_time,
Yi Gu859ff152018-10-16 19:17:0915 std::unique_ptr<AnimationOptions> options,
Jordan Taylorfc0cdda02019-05-20 18:01:2516 std::unique_ptr<AnimationEffectTimings> effect_timings)
Majid Valipourc035b5fc2018-07-04 15:17:2117 : worklet_animation_id(worklet_animation_id),
Yi Gua5a3bb6c2018-06-01 22:16:0718 name(name),
19 current_time(current_time),
Yi Gu859ff152018-10-16 19:17:0920 options(std::move(options)),
Jordan Taylorfc0cdda02019-05-20 18:01:2521 effect_timings(std::move(effect_timings)) {}
Majid Valipourc035b5fc2018-07-04 15:17:2122AnimationWorkletInput::AddAndUpdateState::AddAndUpdateState(
23 AddAndUpdateState&&) = default;
24AnimationWorkletInput::AddAndUpdateState::~AddAndUpdateState() = default;
25
26#if DCHECK_IS_ON()
Kevin Ellis3080186c2019-01-17 22:26:4827bool AnimationWorkletInput::ValidateId(int worklet_id) const {
Majid Valipourc035b5fc2018-07-04 15:17:2128 return std::all_of(added_and_updated_animations.cbegin(),
29 added_and_updated_animations.cend(),
Kevin Ellis3080186c2019-01-17 22:26:4830 [worklet_id](auto& it) {
31 return it.worklet_animation_id.worklet_id == worklet_id;
Majid Valipourc035b5fc2018-07-04 15:17:2132 }) &&
33 std::all_of(updated_animations.cbegin(), updated_animations.cend(),
Kevin Ellis3080186c2019-01-17 22:26:4834 [worklet_id](auto& it) {
35 return it.worklet_animation_id.worklet_id == worklet_id;
Majid Valipourc035b5fc2018-07-04 15:17:2136 }) &&
Yi Gufeb2f7e2018-09-13 03:27:4037 std::all_of(
38 removed_animations.cbegin(), removed_animations.cend(),
Kevin Ellis3080186c2019-01-17 22:26:4839 [worklet_id](auto& it) { return it.worklet_id == worklet_id; });
Majid Valipourc035b5fc2018-07-04 15:17:2140}
41#endif
42
43AnimationWorkletInput::AnimationWorkletInput() = default;
44AnimationWorkletInput::~AnimationWorkletInput() = default;
Yi Gua5a3bb6c2018-06-01 22:16:0745
Majid Valipoure9855f72017-10-20 02:08:5846MutatorInputState::MutatorInputState() = default;
47MutatorInputState::~MutatorInputState() = default;
48
Majid Valipourc035b5fc2018-07-04 15:17:2149bool MutatorInputState::IsEmpty() const {
50 // If there is an AnimationWorkletInput entry in the map then that entry is
51 // guranteed to be non-empty. So checking |inputs_| map emptiness is
52 // sufficient.
53 return inputs_.empty();
54}
55
56AnimationWorkletInput& MutatorInputState::EnsureWorkletEntry(int id) {
57 auto it = inputs_.find(id);
58 if (it == inputs_.end())
59 it = inputs_.emplace_hint(it, id, new AnimationWorkletInput);
60
61 return *it->second;
62}
63
64void MutatorInputState::Add(AnimationWorkletInput::AddAndUpdateState&& state) {
65 AnimationWorkletInput& worklet_input =
Kevin Ellis3080186c2019-01-17 22:26:4866 EnsureWorkletEntry(state.worklet_animation_id.worklet_id);
Majid Valipourc035b5fc2018-07-04 15:17:2167 worklet_input.added_and_updated_animations.push_back(std::move(state));
68}
69void MutatorInputState::Update(AnimationWorkletInput::UpdateState&& state) {
70 AnimationWorkletInput& worklet_input =
Kevin Ellis3080186c2019-01-17 22:26:4871 EnsureWorkletEntry(state.worklet_animation_id.worklet_id);
Majid Valipourc035b5fc2018-07-04 15:17:2172 worklet_input.updated_animations.push_back(std::move(state));
73}
74void MutatorInputState::Remove(WorkletAnimationId worklet_animation_id) {
75 AnimationWorkletInput& worklet_input =
Kevin Ellis3080186c2019-01-17 22:26:4876 EnsureWorkletEntry(worklet_animation_id.worklet_id);
Majid Valipourc035b5fc2018-07-04 15:17:2177 worklet_input.removed_animations.push_back(worklet_animation_id);
78}
79
80std::unique_ptr<AnimationWorkletInput> MutatorInputState::TakeWorkletState(
Kevin Ellis3080186c2019-01-17 22:26:4881 int worklet_id) {
82 auto it = inputs_.find(worklet_id);
Majid Valipourc035b5fc2018-07-04 15:17:2183 if (it == inputs_.end())
84 return nullptr;
85
86 std::unique_ptr<AnimationWorkletInput> result = std::move(it->second);
87 inputs_.erase(it);
88 return result;
89}
90
91AnimationWorkletOutput::AnimationWorkletOutput() = default;
92AnimationWorkletOutput::~AnimationWorkletOutput() = default;
Majid Valipoure9855f72017-10-20 02:08:5893
Yi Gu859ff152018-10-16 19:17:0994AnimationWorkletOutput::AnimationState::AnimationState(WorkletAnimationId id)
95 : worklet_animation_id(id) {}
Majid Valipour82b3d452018-08-24 15:30:0196AnimationWorkletOutput::AnimationState::AnimationState(const AnimationState&) =
97 default;
Yi Gu859ff152018-10-16 19:17:0998AnimationWorkletOutput::AnimationState::~AnimationState() = default;
Majid Valipour82b3d452018-08-24 15:30:0199
Majid Valipoure9855f72017-10-20 02:08:58100} // namespace cc