1 /*
2 * Copyright (c) 2021 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_TEST_MOCK_ANIMATION_UTILS_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_TEST_MOCK_ANIMATION_UTILS_H
18
19 #include <cstdint>
20
21 #include "adapter/aosp/entrance/java/jni/ace_application_info.h"
22 #include "base/json/json_util.h"
23 #include "core/common/platform_window.h"
24 #include "core/common/window.h"
25 #include "core/components/box/render_box.h"
26 #include "core/components/display/render_display.h"
27 #include "core/components/root/render_root.h"
28 #include "core/components/stack/render_stack.h"
29 #include "core/components/transform/render_transform.h"
30 #include "core/pipeline/base/render_context.h"
31
32 namespace OHOS::Ace {
33
34 class MockPlatformWindow final : public PlatformWindow {
35 public:
36 MockPlatformWindow() = default;
37 ~MockPlatformWindow() override = default;
38
39 // Request next vsync.
RequestFrame()40 void RequestFrame() override
41 {
42 requestFrameCnt_++;
43 }
44
GetRequestFrameCnt()45 int32_t GetRequestFrameCnt() const
46 {
47 return requestFrameCnt_;
48 }
49
ResetRequestFrameCnt()50 void ResetRequestFrameCnt()
51 {
52 requestFrameCnt_ = 0;
53 }
54
TriggerOneFrame()55 void TriggerOneFrame()
56 {
57 TriggerFrame(nanoFrameTime_, 1);
58 }
59
TriggerFrames(int32_t frameCount)60 void TriggerFrames(int32_t frameCount)
61 {
62 for (int32_t loop = 0; loop < frameCount; loop++) {
63 TriggerOneFrame();
64 }
65 }
66
GetCurrentTimestampNano()67 uint64_t GetCurrentTimestampNano() const
68 {
69 return nanoTimestamp_;
70 }
71
TriggerFrame(uint64_t deltaNanoTimestamp,uint32_t deltaFrameCount)72 void TriggerFrame(uint64_t deltaNanoTimestamp, uint32_t deltaFrameCount)
73 {
74 nanoTimestamp_ += deltaNanoTimestamp;
75 frameCount_ += deltaFrameCount;
76 if (callback_) {
77 callback_(nanoTimestamp_, frameCount_);
78 }
79 }
80
81 // Register Vsync callback.
RegisterVsyncCallback(AceVsyncCallback && callback)82 void RegisterVsyncCallback(AceVsyncCallback&& callback) override
83 {
84 callback_ = std::move(callback);
85 }
86
87 // Attach root render node to container
SetRootRenderNode(const RefPtr<RenderNode> & root)88 void SetRootRenderNode(const RefPtr<RenderNode>& root) override {}
89
SetNanoFrameTime(uint64_t nanoFrameTime)90 void SetNanoFrameTime(uint64_t nanoFrameTime)
91 {
92 nanoFrameTime_ = nanoFrameTime;
93 }
94
95 private:
96 static constexpr uint16_t SCREEN_FREQUENCY = 60;
97 static constexpr uint64_t NANO_FRAME_TIME = static_cast<const uint64_t>(1e9 / SCREEN_FREQUENCY);
98 uint32_t frameCount_ = 0;
99 uint32_t requestFrameCnt_ = 0;
100 uint64_t nanoFrameTime_ = NANO_FRAME_TIME;
101 uint64_t nanoTimestamp_ = 0;
102 AceVsyncCallback callback_;
103 };
104
105 class MockRenderContext : public RenderContext {
106 public:
Repaint(const RefPtr<RenderNode> & node)107 void Repaint(const RefPtr<RenderNode>& node) override {};
PaintChild(const RefPtr<RenderNode> & child,const Offset & offset)108 void PaintChild(const RefPtr<RenderNode>& child, const Offset& offset) override {};
Restore()109 void Restore() override {};
110 };
111
Create()112 RefPtr<RenderContext> RenderContext::Create()
113 {
114 return AceType::MakeRefPtr<MockRenderContext>();
115 }
116
117 class MockRenderRoot : public RenderRoot {};
118 class MockRenderStack : public RenderStack {};
119 class MockRenderDisplay : public RenderDisplay {};
120 class MockRenderPositioned : public RenderPositioned {};
121 class MockRenderTransform : public RenderTransform {};
122 class MockRenderBox : public RenderBox {};
123 class MockRenderBoxBase : public RenderBoxBase {};
124 class MockRenderImage : public RenderImage {
125 public:
Measure()126 Size Measure() override
127 {
128 return Size();
129 }
130 };
131
Create()132 RefPtr<RenderNode> RenderRoot::Create()
133 {
134 return AceType::MakeRefPtr<MockRenderRoot>();
135 }
136
Create()137 RefPtr<RenderNode> RenderStack::Create()
138 {
139 return AceType::MakeRefPtr<MockRenderStack>();
140 }
141
Create()142 RefPtr<RenderNode> RenderDisplay::Create()
143 {
144 return AceType::MakeRefPtr<MockRenderDisplay>();
145 }
146
Create()147 RefPtr<RenderNode> RenderTransform::Create()
148 {
149 return AceType::MakeRefPtr<MockRenderTransform>();
150 }
151
Create()152 RefPtr<RenderNode> RenderBox::Create()
153 {
154 return AceType::MakeRefPtr<MockRenderBox>();
155 }
156
Create()157 RefPtr<RenderNode> RenderImage::Create()
158 {
159 return AceType::MakeRefPtr<MockRenderImage>();
160 }
161
162 class AnimationTestUtils {
163 public:
164 AnimationTestUtils() = delete;
165 ~AnimationTestUtils() = delete;
166
CreatePlatformWindow()167 static std::unique_ptr<PlatformWindow> CreatePlatformWindow()
168 {
169 return std::make_unique<MockPlatformWindow>();
170 }
171
CreateWindow(std::unique_ptr<PlatformWindow> platformWindow)172 static std::unique_ptr<Window> CreateWindow(std::unique_ptr<PlatformWindow> platformWindow)
173 {
174 return std::make_unique<Window>(std::move(platformWindow));
175 }
176 };
177 } // namespace OHOS::Ace
178 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_TEST_MOCK_ANIMATION_UTILS_H
179