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