1 /*
2 * Copyright (c) 2022 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 #include "frame_msg_mgr.h"
17 #include <map>
18 #include <new>
19 #include <utility>
20 #include "rme_log_domain.h"
21
22 namespace OHOS {
23 namespace RME {
24 DEFINE_RMELOG_INTELLISENSE("ueaClient-FrameMsgMgr");
25 IMPLEMENT_SINGLE_INSTANCE(FrameMsgMgr);
26
FrameMsgMgr()27 FrameMsgMgr::FrameMsgMgr()
28 : sceneType(SceneEvent::SLIDE), rmeScene(nullptr)
29 {
30 FrameMapKeyToFunc();
31 }
32
~FrameMsgMgr()33 FrameMsgMgr::~FrameMsgMgr()
34 {
35 if (rmeScene != nullptr) {
36 delete rmeScene;
37 rmeScene = nullptr;
38 }
39 }
40
Init()41 bool FrameMsgMgr::Init()
42 {
43 if (rmeScene == nullptr) {
44 rmeScene = new RmeSceneSched();
45 }
46 if (!rmeScene->Init()) {
47 RME_LOGE("[Init]:inited failed!");
48 return false;
49 }
50 RME_LOGI("[Init]:inited success!");
51 return true;
52 }
53
EventUpdate(FrameEvent event)54 void FrameMsgMgr::EventUpdate(FrameEvent event)
55 {
56 switch (event) {
57 case FrameEvent::EVENT_SET_PARAM:
58 SetSchedParam();
59 break;
60 default:
61 HandleFrameMsgKey(event);
62 break;
63 }
64 }
65
HandleFrameMsgKey(FrameEvent event)66 bool FrameMsgMgr::HandleFrameMsgKey(FrameEvent event)
67 {
68 std::map<FrameEvent, PHandle>::iterator iter = m_frameMsgKeyToFunc.find(event);
69 if (m_frameMsgKeyToFunc.end() == iter) {
70 RME_LOGE("[HandleFrameMsgKey]: search frameEvent:%{public}d failed!",
71 static_cast<int>(event));
72 return false;
73 }
74 PHandle pFunction = iter->second;
75 (this->*pFunction)();
76 return true;
77 }
78
FrameMapKeyToFunc()79 void FrameMsgMgr::FrameMapKeyToFunc()
80 {
81 m_frameMsgKeyToFunc[FrameEvent::EVENT_BEGIN_FRAME] = &FrameMsgMgr::HandleBeginScene;
82 m_frameMsgKeyToFunc[FrameEvent::EVENT_FLUSH_ANIMATION_START] = &FrameMsgMgr::BeginFlushAnimation;
83 m_frameMsgKeyToFunc[FrameEvent::EVENT_FLUSH_ANIMATION_END] = &FrameMsgMgr::EndFlushAnimation;
84 m_frameMsgKeyToFunc[FrameEvent::EVENT_FLUSH_BUILD_START] = &FrameMsgMgr::BeginFlushBuild;
85 m_frameMsgKeyToFunc[FrameEvent::EVENT_FLUSH_BUILD_END] = &FrameMsgMgr::EndFlushBuild;
86 m_frameMsgKeyToFunc[FrameEvent::EVENT_FLUSH_LAYOUT_START] = &FrameMsgMgr::BeginFlushLayout;
87 m_frameMsgKeyToFunc[FrameEvent::EVENT_FLUSH_LAYOUT_END] = &FrameMsgMgr::EndFlushLayout;
88 m_frameMsgKeyToFunc[FrameEvent::EVENT_FLUSH_RENDER_START] = &FrameMsgMgr::BeginFlushRender;
89 m_frameMsgKeyToFunc[FrameEvent::EVENT_FLUSH_RENDER_END] = &FrameMsgMgr::EndFlushRender;
90 m_frameMsgKeyToFunc[FrameEvent::EVENT_FLUSH_RENDER_FINISH_START] = &FrameMsgMgr::BeginFlushRenderFinish;
91 m_frameMsgKeyToFunc[FrameEvent::EVENT_FLUSH_RENDER_FINISH_END] = &FrameMsgMgr::EndFlushRenderFinish;
92 m_frameMsgKeyToFunc[FrameEvent::EVENT_PROCESS_POST_FLUSH_START] = &FrameMsgMgr::BeginProcessPostFlush;
93 m_frameMsgKeyToFunc[FrameEvent::EVENT_PROCESS_COMMANDS_START] = &FrameMsgMgr::ProcessCommandsStart;
94 m_frameMsgKeyToFunc[FrameEvent::EVENT_ANIMATE_START] = &FrameMsgMgr::AnimateStart;
95 m_frameMsgKeyToFunc[FrameEvent::EVENT_RENDER_START] = &FrameMsgMgr::RenderStart;
96 m_frameMsgKeyToFunc[FrameEvent::EVENT_SEND_COMMANDS_START] = &FrameMsgMgr::SendCommandsStart;
97 m_frameMsgKeyToFunc[FrameEvent::EVENT_END_FRAME] = &FrameMsgMgr::HandleEndScene;
98 }
99
GetSceneHandler() const100 FrameSceneSched *FrameMsgMgr::GetSceneHandler() const
101 {
102 if (sceneType == SceneEvent::SCENE_INVALID) {
103 RME_LOGE("[GetSceneHandler]:get nullptr sceneType %{public}d,", static_cast<int>(sceneType));
104 return nullptr;
105 }
106 return rmeScene;
107 }
108
UpdateScene(SceneEvent scene)109 void FrameMsgMgr::UpdateScene(SceneEvent scene)
110 {
111 if (scene < SceneEvent::SCENE_INVALID || scene >= SceneEvent::SCENE_MAX) {
112 scene = SceneEvent::SCENE_INVALID;
113 }
114 sceneType = scene;
115 }
116
HandleBeginScene()117 void FrameMsgMgr::HandleBeginScene()
118 {
119 FrameSceneSched *scene = GetSceneHandler();
120 if (scene == nullptr) {
121 RME_LOGE("[HandleBeginScene]:scene nullptr");
122 return;
123 }
124 scene->HandleBeginScene();
125 }
126
BeginFlushAnimation()127 void FrameMsgMgr::BeginFlushAnimation()
128 {
129 FrameSceneSched *scene = GetSceneHandler();
130 if (scene == nullptr) {
131 RME_LOGE("[BeginFlushAnimation]:scene nullptr");
132 return;
133 }
134 scene->BeginFlushAnimation();
135 }
136
EndFlushAnimation()137 void FrameMsgMgr::EndFlushAnimation()
138 {
139 FrameSceneSched *scene = GetSceneHandler();
140 if (scene == nullptr) {
141 RME_LOGE("[EndFlushAnimation]:scene nullptr");
142 return;
143 }
144 scene->EndFlushAnimation();
145 }
146
BeginFlushBuild()147 void FrameMsgMgr::BeginFlushBuild()
148 {
149 FrameSceneSched *scene = GetSceneHandler();
150 if (scene == nullptr) {
151 RME_LOGE("[BeginFlushBuild]:scene nullptr");
152 return;
153 }
154 scene->BeginFlushBuild();
155 }
156
EndFlushBuild()157 void FrameMsgMgr::EndFlushBuild()
158 {
159 FrameSceneSched *scene = GetSceneHandler();
160 if (scene == nullptr) {
161 RME_LOGE("[EndFlushBuild]:scene nullptr");
162 return;
163 }
164 scene->EndFlushBuild();
165 }
166
BeginFlushLayout()167 void FrameMsgMgr::BeginFlushLayout()
168 {
169 FrameSceneSched *scene = GetSceneHandler();
170 if (scene == nullptr) {
171 RME_LOGE("[BeginFlushLayout]:scene nullptr");
172 return;
173 }
174 scene->BeginFlushLayout();
175 }
176
EndFlushLayout()177 void FrameMsgMgr::EndFlushLayout()
178 {
179 FrameSceneSched *scene = GetSceneHandler();
180 if (scene == nullptr) {
181 RME_LOGE("[EndFlushLayout]:scene nullptr");
182 return;
183 }
184 scene->EndFlushLayout();
185 }
186
BeginFlushRender()187 void FrameMsgMgr::BeginFlushRender()
188 {
189 FrameSceneSched *scene = GetSceneHandler();
190 if (scene == nullptr) {
191 RME_LOGE("[BeginFlushRender]:scene nullptr");
192 return;
193 }
194 scene->BeginFlushRender();
195 }
196
EndFlushRender()197 void FrameMsgMgr::EndFlushRender()
198 {
199 FrameSceneSched *scene = GetSceneHandler();
200 if (scene == nullptr) {
201 RME_LOGE("[EndFlushRender]:scene nullptr");
202 return;
203 }
204 scene->EndFlushRender();
205 }
206
BeginFlushRenderFinish()207 void FrameMsgMgr::BeginFlushRenderFinish()
208 {
209 FrameSceneSched *scene = GetSceneHandler();
210 if (scene == nullptr) {
211 RME_LOGE("[BeginFlushRenderFinish]:scene nullptr");
212 return;
213 }
214 scene->BeginFlushRenderFinish();
215 }
216
EndFlushRenderFinish()217 void FrameMsgMgr::EndFlushRenderFinish()
218 {
219 FrameSceneSched *scene = GetSceneHandler();
220 if (scene == nullptr) {
221 RME_LOGE("[EndFlushRenderFinish]:scene nullptr");
222 return;
223 }
224 scene->EndFlushRenderFinish();
225 }
226
BeginProcessPostFlush()227 void FrameMsgMgr::BeginProcessPostFlush()
228 {
229 FrameSceneSched *scene = GetSceneHandler();
230 if (scene == nullptr) {
231 RME_LOGE("[BeginProcessPostFlush]:scene nullptr");
232 return;
233 }
234 scene->BeginProcessPostFlush();
235 }
236
ProcessCommandsStart()237 void FrameMsgMgr::ProcessCommandsStart()
238 {
239 FrameSceneSched *scene = GetSceneHandler();
240 if (scene == nullptr) {
241 RME_LOGE("[ProcessCommandsStart]:scene nullptr");
242 return;
243 }
244 scene->ProcessCommandsStart();
245 }
246
AnimateStart()247 void FrameMsgMgr::AnimateStart()
248 {
249 FrameSceneSched *scene = GetSceneHandler();
250 if (scene == nullptr) {
251 RME_LOGE("[AnimateStart]:scene nullptr");
252 return;
253 }
254 scene->AnimateStart();
255 }
256
RenderStart()257 void FrameMsgMgr::RenderStart()
258 {
259 FrameSceneSched *scene = GetSceneHandler();
260 if (scene == nullptr) {
261 RME_LOGE("[RenderStart]:scene nullptr");
262 return;
263 }
264 scene->RenderStart();
265 }
266
SendCommandsStart()267 void FrameMsgMgr::SendCommandsStart()
268 {
269 FrameSceneSched *scene = GetSceneHandler();
270 if (scene == nullptr) {
271 RME_LOGE("[SendCommandsStart]:scene nullptr");
272 return;
273 }
274 scene->SendCommandsStart();
275 }
276
HandleEndScene()277 void FrameMsgMgr::HandleEndScene()
278 {
279 FrameSceneSched *scene = GetSceneHandler();
280 if (scene == nullptr) {
281 RME_LOGE("[HandleEndScene]:scene nullptr");
282 return;
283 }
284 scene->HandleEndScene();
285 }
286
SetSchedParam()287 void FrameMsgMgr::SetSchedParam()
288 {
289 RME_LOGI("[SetSchedParam]: set default sched param!");
290 }
291 } // namespace RME
292 } // namespace OHOS
293