blob: 2f3892743f3102ab58a0e4825a12088469fd58cd (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef ScrollAnimatorCompositorCoordinator_h
#define ScrollAnimatorCompositorCoordinator_h
#include "platform/PlatformExport.h"
#include "platform/heap/Handle.h"
#include "public/platform/WebCompositorAnimationDelegate.h"
#include "public/platform/WebCompositorAnimationPlayerClient.h"
#include "wtf/Allocator.h"
#include "wtf/Noncopyable.h"
#include "wtf/OwnPtr.h"
namespace blink {
class ScrollableArea;
class WebCompositorAnimationPlayer;
class WebCompositorAnimationTimeline;
class PLATFORM_EXPORT ScrollAnimatorCompositorCoordinator : public NoBaseWillBeGarbageCollectedFinalized<ScrollAnimatorCompositorCoordinator>, private WebCompositorAnimationPlayerClient, WebCompositorAnimationDelegate {
USING_FAST_MALLOC_WILL_BE_REMOVED(ScrollAnimatorCompositorCoordinator);
WTF_MAKE_NONCOPYABLE(ScrollAnimatorCompositorCoordinator);
public:
virtual ~ScrollAnimatorCompositorCoordinator();
bool hasAnimationThatRequiresService() const;
virtual void resetAnimationState();
virtual void cancelAnimation();
virtual ScrollableArea* scrollableArea() const = 0;
virtual void tickAnimation(double monotonicTime) = 0;
virtual void updateCompositorAnimations() = 0;
virtual void notifyCompositorAnimationFinished(int groupId) = 0;
virtual void notifyCompositorAnimationAborted(int groupId) = 0;
virtual void layerForCompositedScrollingDidChange(WebCompositorAnimationTimeline*) = 0;
DEFINE_INLINE_VIRTUAL_TRACE() { }
protected:
explicit ScrollAnimatorCompositorCoordinator();
bool addAnimation(PassOwnPtr<WebCompositorAnimation>);
void removeAnimation();
void abortAnimation();
void compositorAnimationFinished(int groupId);
void reattachCompositorPlayerIfNeeded(WebCompositorAnimationTimeline*);
// WebCompositorAnimationDelegate implementation.
void notifyAnimationStarted(double monotonicTime, int group) override;
void notifyAnimationFinished(double monotonicTime, int group) override;
void notifyAnimationAborted(double monotonicTime, int group) override;
// WebCompositorAnimationPlayerClient implementation.
WebCompositorAnimationPlayer* compositorPlayer() const override;
friend class Internals;
enum class RunState {
// No animation.
Idle,
// Waiting to send an animation to the compositor. There might also
// already be another animation running on the compositor that will need
// to be canceled first.
WaitingToSendToCompositor,
// Running an animation on the compositor.
RunningOnCompositor,
// Running an animation on the compositor but needs update.
RunningOnCompositorButNeedsUpdate,
// Running an animation on the main thread.
RunningOnMainThread,
// Waiting to cancel the animation currently running on the compositor.
// There is no pending animation to replace the canceled animation.
WaitingToCancelOnCompositor
};
OwnPtr<WebCompositorAnimationPlayer> m_compositorPlayer;
int m_compositorAnimationAttachedToLayerId;
RunState m_runState;
int m_compositorAnimationId;
int m_compositorAnimationGroupId;
};
} // namespace blink
#endif // ScrollAnimatorCompositorCoordinator_h
|