• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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