From 5471e351e17b935b3f478784a06eaf2f4e3aa7e2 Mon Sep 17 00:00:00 2001 From: rongkunshi Date: Sun, 6 Mar 2022 21:58:11 +0800 Subject: [PATCH 1/6] slide-trace-add Signed-off-by: rongkunshi --- common/include/frame_info_const.h | 2 ++ .../include/frame_scene_sched.h | 2 ++ .../include/rme_core_sched.h | 2 ++ .../include/rme_scene_sched.h | 5 ++++ .../src/frame_msg_mgr.cpp | 6 ++++ .../src/rme_core_sched.cpp | 21 +++++++++++--- .../src/rme_scene_sched.cpp | 29 +++++++++++++++---- .../innerkits/frameintf/frame_ui_intf.cpp | 28 ++++++++++++++++-- .../innerkits/frameintf/frame_ui_intf.h | 3 ++ 9 files changed, 87 insertions(+), 11 deletions(-) diff --git a/common/include/frame_info_const.h b/common/include/frame_info_const.h index d1e4bf4..b25d845 100644 --- a/common/include/frame_info_const.h +++ b/common/include/frame_info_const.h @@ -32,6 +32,8 @@ enum class FrameEvent { EVENT_SET_PARAM, EVENT_RTG_ENABLE, EVENT_BUFFER_COUNT, + EVENT_BEGIN_FRAME, + EVENT_END_FRAME, UNKNOWN, }; diff --git a/frameworks/core/frame_aware_collector/include/frame_scene_sched.h b/frameworks/core/frame_aware_collector/include/frame_scene_sched.h index 66ae8f4..768c557 100644 --- a/frameworks/core/frame_aware_collector/include/frame_scene_sched.h +++ b/frameworks/core/frame_aware_collector/include/frame_scene_sched.h @@ -25,6 +25,8 @@ public: FrameSceneSched() {}; virtual ~FrameSceneSched() = default; + virtual void HandleBeginFrame() = 0; + virtual void HandleEndFrame() = 0; virtual void BeginFlushAnimation() = 0; virtual void EndFlushAnimation() = 0; virtual void BeginFlushBuild() = 0; diff --git a/frameworks/core/frame_aware_collector/include/rme_core_sched.h b/frameworks/core/frame_aware_collector/include/rme_core_sched.h index cd9d48f..94afb67 100644 --- a/frameworks/core/frame_aware_collector/include/rme_core_sched.h +++ b/frameworks/core/frame_aware_collector/include/rme_core_sched.h @@ -28,6 +28,8 @@ public: ~RmeCoreSched(); bool Init(); + void HandleBeginFrame(); + void HandleEndFrame(); void BeginFlushAnimation(); void EndFlushAnimation(); void BeginFlushBuild(); diff --git a/frameworks/core/frame_aware_collector/include/rme_scene_sched.h b/frameworks/core/frame_aware_collector/include/rme_scene_sched.h index d94660d..e66e702 100644 --- a/frameworks/core/frame_aware_collector/include/rme_scene_sched.h +++ b/frameworks/core/frame_aware_collector/include/rme_scene_sched.h @@ -20,6 +20,8 @@ #include "frame_window_mgr.h" #include "rme_core_sched.h" +#include + namespace OHOS { namespace RME { class RmeSceneSched : public FrameSceneSched { @@ -28,6 +30,9 @@ public: ~RmeSceneSched() override; bool Init(); + void HandleBeginFrame() override; + void HandleEndFrame() override; + void BeginFlushAnimation() override; void EndFlushAnimation() override; diff --git a/frameworks/core/frame_aware_collector/src/frame_msg_mgr.cpp b/frameworks/core/frame_aware_collector/src/frame_msg_mgr.cpp index 3096491..4526b30 100644 --- a/frameworks/core/frame_aware_collector/src/frame_msg_mgr.cpp +++ b/frameworks/core/frame_aware_collector/src/frame_msg_mgr.cpp @@ -122,6 +122,12 @@ void FrameMsgMgr::HandleDefaultEvent(FrameEvent event, EventState value) case FrameEvent::SEND_COMMANDS: scene->SendCommandsStart(); break; + case FrameEvent::EVENT_END_FRAME: + scene->HandleEndFrame(); + break; + case FrameEvent::EVENT_BEGIN_FRAME: + scene->HandleBeginFrame(); + break; default: RME_LOGE("[HandleDefaultEvent]: unknown event id: %{public}d, event state:%{public}d\n", static_cast(event), static_cast(value)); diff --git a/frameworks/core/frame_aware_collector/src/rme_core_sched.cpp b/frameworks/core/frame_aware_collector/src/rme_core_sched.cpp index 298e9b4..7c8f75d 100644 --- a/frameworks/core/frame_aware_collector/src/rme_core_sched.cpp +++ b/frameworks/core/frame_aware_collector/src/rme_core_sched.cpp @@ -45,13 +45,18 @@ bool RmeCoreSched::Init() return ret; } +void RmeCoreSched::HandleBeginFrame() +{ + RME_FUNCTION_TRACE(); +} + void RmeCoreSched::BeginFlushAnimation() { m_pid = getpid(); if (m_rtg == -1) { m_rtg = SearchRtgForTid(m_pid); if (m_rtg <= 0) { - RME_LOGE("[BeginFlushAnimation]:Search rtg empty!pid %{public}d,Rtg: %{public}d", + RME_LOGW("[BeginFlushAnimation]:Search rtg empty!pid %{public}d,Rtg: %{public}d", m_pid, m_rtg); return; } else { @@ -106,7 +111,7 @@ void RmeCoreSched::ProcessCommandsStart() {} void RmeCoreSched::AnimateStart() { if (m_rtg <= 0) { - RME_LOGE("[AnimateStart]: search rtg empty! Rtg:%{public}d, Pid:%{public}d", m_rtg, m_pid); + RME_LOGW("[AnimateStart]: search rtg empty! Rtg:%{public}d, Pid:%{public}d", m_rtg, m_pid); return; } m_renderTid = gettid(); @@ -124,13 +129,21 @@ void RmeCoreSched::RenderStart() void RmeCoreSched::SendCommandsStart() { + RmeTraceBegin(("FrameS-SetMargin:" + to_string(m_rtg) + " margin:" + to_string(MARGIN_THREE)).c_str()); + SetMargin(m_rtg, MARGIN_THREE); + RmeTraceEnd(); +} + +void RmeCoreSched::HandleEndFrame() +{ + RME_FUNCTION_TRACE(); if (m_rtg <= 0) { - RME_LOGW("[SendCommandStart]: search rtg empty! rtGrp:%{public}d, m_pid:%{public}d!", + RME_LOGW("[HandleEndFrame]: search rtg empty! rtGrp:%{public}d, m_pid:%{public}d!", m_rtg, m_pid); return; } int ret = EndFrameFreq(m_rtg); - RmeTraceBegin(("FrameS-EndFrameFreq-rtg:" + to_string(m_rtg)+" ret:" + to_string(ret)).c_str()); + RmeTraceBegin(("FrameS-EndFrameFreq-rtg:" + to_string(m_rtg) + " ret:" + to_string(ret)).c_str()); RmeTraceEnd(); } } // namespace RME diff --git a/frameworks/core/frame_aware_collector/src/rme_scene_sched.cpp b/frameworks/core/frame_aware_collector/src/rme_scene_sched.cpp index aa36180..a3571e6 100644 --- a/frameworks/core/frame_aware_collector/src/rme_scene_sched.cpp +++ b/frameworks/core/frame_aware_collector/src/rme_scene_sched.cpp @@ -34,7 +34,6 @@ bool RmeSceneSched::Init() rmeCoreSched = new RmeCoreSched(); } - curWorkingStatus = 1; if (rmeCoreSched == nullptr) { return false; } @@ -42,11 +41,17 @@ bool RmeSceneSched::Init() return ret; } +void RmeSceneSched::HandleBeginFrame() +{ + curWorkingStatus = 1; + FrameWindowMgr::GetInstance().SetStartFlag(true); + rmeCoreSched->HandleBeginFrame(); + RmeTraceBegin(("FrameS-curWorkingStatus" + std::to_string(curWorkingStatus)).c_str()); + RmeTraceEnd(); +} + void RmeSceneSched::BeginFlushAnimation() { - if (!FrameWindowMgr::GetInstance().GetEnable()) { - return; - } if (curWorkingStatus == 1) { rmeCoreSched->BeginFlushAnimation(); } @@ -54,7 +59,7 @@ void RmeSceneSched::BeginFlushAnimation() void RmeSceneSched::EndFlushAnimation() { - if (curWorkingStatus == 1) { + if (curWorkingStatus == 1) { rmeCoreSched->EndFlushAnimation(); } } @@ -149,5 +154,19 @@ void RmeSceneSched::SendCommandsStart() rmeCoreSched->SendCommandsStart(); } } + +void RmeSceneSched::HandleEndFrame() +{ + if (curWorkingStatus == 0) { + return; + } + rmeCoreSched->HandleEndFrame(); + if (FrameWindowMgr::GetInstance().GetStartFlag()) { + FrameWindowMgr::GetInstance().SetStartFlag(false); + } + curWorkingStatus = 0; + RmeTraceBegin(("FrameS-curWorkingStatus" + std::to_string(curWorkingStatus)).c_str()); + RmeTraceEnd(); +} } // namespace RME } // namespace OHOS diff --git a/interfaces/innerkits/frameintf/frame_ui_intf.cpp b/interfaces/innerkits/frameintf/frame_ui_intf.cpp index f01980b..370b46f 100644 --- a/interfaces/innerkits/frameintf/frame_ui_intf.cpp +++ b/interfaces/innerkits/frameintf/frame_ui_intf.cpp @@ -166,12 +166,26 @@ void FrameUiIntf::RenderStart() const void FrameUiIntf::SendCommandsStart() const { - RME_LOGI("[SendCommandsStart]:start"); if (!inited) { return; } FrameMsgMgr::GetInstance().EventUpdate(FrameEvent::SEND_COMMANDS, EventState::EVENT_ENTER); - RME_LOGI("[SendCommandsStart]:success"); +} + +void FrameUiIntf::BeginListFling() const +{ + if (!inited) { + return; + } + FrameMsgMgr::GetInstance().EventUpdate(FrameEvent::EVENT_BEGIN_FRAME, EventState::EVENT_ENTER); +} + +void FrameUiIntf::EndListFling() const +{ + if (!inited) { + return; + } + FrameMsgMgr::GetInstance().EventUpdate(FrameEvent::EVENT_END_FRAME, EventState::EVENT_ENTER); } extern "C" void Init() @@ -258,5 +272,15 @@ extern "C" void SendCommandsStart() { FrameUiIntf::GetInstance().SendCommandsStart(); } + +extern "C" void BeginListFling() +{ + FrameUiIntf::GetInstance().BeginListFling(); +} + +extern "C" void EndListFling() +{ + FrameUiIntf::GetInstance().EndListFling(); +} } // namespace RME } // namespace OHOS diff --git a/interfaces/innerkits/frameintf/frame_ui_intf.h b/interfaces/innerkits/frameintf/frame_ui_intf.h index 2801fbd..fbdb42c 100644 --- a/interfaces/innerkits/frameintf/frame_ui_intf.h +++ b/interfaces/innerkits/frameintf/frame_ui_intf.h @@ -42,6 +42,9 @@ public: void AnimateStart() const; void RenderStart() const; void SendCommandsStart() const; + + void BeginListFling() const; + void EndListFling() const; private: bool inited = false; }; -- Gitee From 8c777ada93c4ed014685979f139b6f206950d026 Mon Sep 17 00:00:00 2001 From: rongkunshi Date: Mon, 7 Mar 2022 21:49:18 +0800 Subject: [PATCH 2/6] csec--switch case modify Signed-off-by: rongkunshi --- common/include/frame_info_const.h | 37 ++- .../include/frame_msg_mgr.h | 29 +- .../src/frame_msg_mgr.cpp | 284 +++++++++++++----- .../innerkits/frameintf/frame_ui_intf.cpp | 34 +-- 4 files changed, 271 insertions(+), 113 deletions(-) diff --git a/common/include/frame_info_const.h b/common/include/frame_info_const.h index b25d845..d525abf 100644 --- a/common/include/frame_info_const.h +++ b/common/include/frame_info_const.h @@ -19,32 +19,29 @@ namespace OHOS { namespace RME { enum class FrameEvent { - FLUSH_ANIMATION, - FLUSH_BUILD, - FLUSH_LAYOUT, - FLUSH_RENDER, - FLUSH_RENDER_FINISH, // to add, do not realize - PROCESS_POST_FLUSH, - PROCESS_COMMANDS, - ANIMATE, - RENDER, - SEND_COMMANDS, + EVENT_BEGIN_FRAME, + EVENT_FLUSH_ANIMATION_START, + EVENT_FLUSH_ANIMATION_END, + EVENT_FLUSH_BUILD_START, + EVENT_FLUSH_BUILD_END, + EVENT_FLUSH_LAYOUT_START, + EVENT_FLUSH_LAYOUT_END, + EVENT_FLUSH_RENDER_START, + EVENT_FLUSH_RENDER_END, + EVENT_FLUSH_RENDER_FINISH_START, + EVENT_FLUSH_RENDER_FINISH_END, + EVENT_PROCESS_POST_FLUSH_START, + EVENT_PROCESS_COMMANDS_START, + EVENT_ANIMATE_START, + EVENT_RENDER_START, + EVENT_SEND_COMMANDS_START, + EVENT_END_FRAME, EVENT_SET_PARAM, EVENT_RTG_ENABLE, EVENT_BUFFER_COUNT, - EVENT_BEGIN_FRAME, - EVENT_END_FRAME, UNKNOWN, }; -enum class EventState { - EVENT_ENTER, - EVENT_CONSUMED, - EVENT_EXIT, - ENABLE, - DISABLE, -}; - enum class SceneEvent { SCENE_INVALID = 0, VIDEO, diff --git a/frameworks/core/frame_aware_collector/include/frame_msg_mgr.h b/frameworks/core/frame_aware_collector/include/frame_msg_mgr.h index dfcaef3..410b3d2 100644 --- a/frameworks/core/frame_aware_collector/include/frame_msg_mgr.h +++ b/frameworks/core/frame_aware_collector/include/frame_msg_mgr.h @@ -17,6 +17,7 @@ #define FRAME_MSG_MGR_H #include +#include #include "rme_log_domain.h" #include "frame_info_const.h" @@ -32,12 +33,36 @@ public: FrameMsgMgr(); ~FrameMsgMgr(); bool Init(); - void EventUpdate(FrameEvent eventType, EventState state); + void EventUpdate(FrameEvent eventType); private: + bool HandleFrameMsgKey(FrameEvent event); + void FrameMapKeyToFunc(); void UpdateScene(SceneEvent scene); - void HandleDefaultEvent(FrameEvent event, EventState state); void SetSchedParam(); + + void HandleBeginFrame(); + void BeginFlushAnimation(); + void EndFlushAnimation(); + void BeginFlushBuild(); + void EndFlushBuild(); + void BeginFlushLayout(); + void EndFlushLayout(); + void BeginFlushRender(); + void EndFlushRender(); + void BeginFlushRenderFinish(); + void EndFlushRenderFinish(); + + void BeginProcessPostFlush(); + void ProcessCommandsStart(); + void AnimateStart(); + void RenderStart(); + void SendCommandsStart(); + void HandleEndFrame(); + FrameSceneSched *GetSceneHandler() const; + typedef void (FrameMsgMgr:: *PHandle)(void); + std::map m_frameMsgKeyToFunc; + SceneEvent sceneType; RmeSceneSched *rmeScene; }; diff --git a/frameworks/core/frame_aware_collector/src/frame_msg_mgr.cpp b/frameworks/core/frame_aware_collector/src/frame_msg_mgr.cpp index 4526b30..63b9c3e 100644 --- a/frameworks/core/frame_aware_collector/src/frame_msg_mgr.cpp +++ b/frameworks/core/frame_aware_collector/src/frame_msg_mgr.cpp @@ -22,7 +22,9 @@ IMPLEMENT_SINGLE_INSTANCE(FrameMsgMgr); FrameMsgMgr::FrameMsgMgr() : sceneType(SceneEvent::SLIDE), rmeScene(nullptr) -{} +{ + FrameMapKeyToFunc(); +} FrameMsgMgr::~FrameMsgMgr() { @@ -44,17 +46,59 @@ bool FrameMsgMgr::Init() return true; } -void FrameMsgMgr::EventUpdate(FrameEvent event, EventState value) +void FrameMsgMgr::EventUpdate(FrameEvent event) { switch (event) { case FrameEvent::EVENT_SET_PARAM: SetSchedParam(); break; default: - HandleDefaultEvent(event, value); - break; + HandleFrameMsgKey(event); + break; + } +} + +bool FrameMsgMgr::HandleFrameMsgKey(FrameEvent event) +{ + std::map::iterator iter = m_frameMsgKeyToFunc.find(event); + if (m_frameMsgKeyToFunc.end() == iter) { + RME_LOGE("[HandleFrameMsgKey]: search frameEvent:%{public}d failed!", + static_cast(event)); + return false; + } + PHandle pFunction = iter->second; + (this->*pFunction)(); + return true; +} + +void FrameMsgMgr::FrameMapKeyToFunc() +{ + m_frameMsgKeyToFunc[FrameEvent::EVENT_BEGIN_FRAME] = &FrameMsgMgr::HandleBeginFrame; + m_frameMsgKeyToFunc[FrameEvent::EVENT_FLUSH_ANIMATION_START] = &FrameMsgMgr::BeginFlushAnimation; + m_frameMsgKeyToFunc[FrameEvent::EVENT_FLUSH_ANIMATION_END] = &FrameMsgMgr::EndFlushAnimation; + m_frameMsgKeyToFunc[FrameEvent::EVENT_FLUSH_BUILD_START] = &FrameMsgMgr::BeginFlushBuild; + m_frameMsgKeyToFunc[FrameEvent::EVENT_FLUSH_BUILD_END] = &FrameMsgMgr::EndFlushBuild; + m_frameMsgKeyToFunc[FrameEvent::EVENT_FLUSH_LAYOUT_START] = &FrameMsgMgr::BeginFlushLayout; + m_frameMsgKeyToFunc[FrameEvent::EVENT_FLUSH_LAYOUT_END] = &FrameMsgMgr::EndFlushLayout; + m_frameMsgKeyToFunc[FrameEvent::EVENT_FLUSH_RENDER_START] = &FrameMsgMgr::BeginFlushRender; + m_frameMsgKeyToFunc[FrameEvent::EVENT_FLUSH_RENDER_END] = &FrameMsgMgr::EndFlushRender; + m_frameMsgKeyToFunc[FrameEvent::EVENT_FLUSH_RENDER_FINISH_START] = &FrameMsgMgr::BeginFlushRenderFinish; + m_frameMsgKeyToFunc[FrameEvent::EVENT_FLUSH_RENDER_FINISH_END] = &FrameMsgMgr::EndFlushRenderFinish; + m_frameMsgKeyToFunc[FrameEvent::EVENT_PROCESS_POST_FLUSH_START] = &FrameMsgMgr::BeginProcessPostFlush; + m_frameMsgKeyToFunc[FrameEvent::EVENT_PROCESS_COMMANDS_START] = &FrameMsgMgr::ProcessCommandsStart; + m_frameMsgKeyToFunc[FrameEvent::EVENT_ANIMATE_START] = &FrameMsgMgr::AnimateStart; + m_frameMsgKeyToFunc[FrameEvent::EVENT_RENDER_START] = &FrameMsgMgr::RenderStart; + m_frameMsgKeyToFunc[FrameEvent::EVENT_SEND_COMMANDS_START] = &FrameMsgMgr::SendCommandsStart; + m_frameMsgKeyToFunc[FrameEvent::EVENT_END_FRAME] = &FrameMsgMgr::HandleEndFrame; +} + +FrameSceneSched *FrameMsgMgr::GetSceneHandler() const +{ + if (sceneType == SceneEvent::SCENE_INVALID) { + RME_LOGE("[GetSceneHandler]:get nullptr sceneType %{public}d,", static_cast(sceneType)); + return nullptr; } - return; + return rmeScene; } void FrameMsgMgr::UpdateScene(SceneEvent scene) @@ -65,88 +109,180 @@ void FrameMsgMgr::UpdateScene(SceneEvent scene) sceneType = scene; } -void FrameMsgMgr::HandleDefaultEvent(FrameEvent event, EventState value) +void FrameMsgMgr::HandleBeginFrame() { + RME_LOGI("[HandleBeginFrame]:start"); FrameSceneSched *scene = GetSceneHandler(); if (scene == nullptr) { - RME_LOGE("[HandleDefaultEvent]:scene nullptr"); + RME_LOGE("[HandleBeginFrame]:scene nullptr"); return; } - switch (event) { - case FrameEvent::FLUSH_ANIMATION: - if (value == EventState::EVENT_ENTER) { - scene->BeginFlushAnimation(); - } else { - scene->EndFlushAnimation(); - } - break; - case FrameEvent::FLUSH_BUILD: - if (value == EventState::EVENT_ENTER) { - scene->BeginFlushBuild(); - } else { - scene->EndFlushBuild(); - } - break; - case FrameEvent::FLUSH_LAYOUT: - if (value == EventState::EVENT_ENTER) { - scene->BeginFlushLayout(); - } else { - scene->EndFlushLayout(); - } - break; - case FrameEvent::FLUSH_RENDER: - if (value == EventState::EVENT_ENTER) { - scene->BeginFlushRender(); - } else { - scene->EndFlushRender(); - } - break; - case FrameEvent::FLUSH_RENDER_FINISH: - if (value == EventState::EVENT_ENTER) { - scene->BeginFlushRenderFinish(); - } else { - scene->EndFlushRenderFinish(); - } - case FrameEvent::PROCESS_POST_FLUSH: - scene->BeginProcessPostFlush(); - break; - case FrameEvent::PROCESS_COMMANDS: - scene->ProcessCommandsStart(); - break; - case FrameEvent::ANIMATE: - scene->AnimateStart(); - break; - case FrameEvent::RENDER: - scene->RenderStart(); - break; - case FrameEvent::SEND_COMMANDS: - scene->SendCommandsStart(); - break; - case FrameEvent::EVENT_END_FRAME: - scene->HandleEndFrame(); - break; - case FrameEvent::EVENT_BEGIN_FRAME: - scene->HandleBeginFrame(); - break; - default: - RME_LOGE("[HandleDefaultEvent]: unknown event id: %{public}d, event state:%{public}d\n", - static_cast(event), static_cast(value)); - return; + scene->HandleBeginFrame(); +} + +void FrameMsgMgr::BeginFlushAnimation() +{ + FrameSceneSched *scene = GetSceneHandler(); + if (scene == nullptr) { + RME_LOGE("[BeginFlushAnimation]:scene nullptr"); + return; } + scene->BeginFlushAnimation(); } -void FrameMsgMgr::SetSchedParam() +void FrameMsgMgr::EndFlushAnimation() { - RME_LOGI("[SetSchedParam]: set default sched param!"); + FrameSceneSched *scene = GetSceneHandler(); + if (scene == nullptr) { + RME_LOGE("[EndFlushAnimation]:scene nullptr"); + return; + } + scene->EndFlushAnimation(); } -FrameSceneSched *FrameMsgMgr::GetSceneHandler() const +void FrameMsgMgr::BeginFlushBuild() { - if (sceneType == SceneEvent::SCENE_INVALID) { - RME_LOGE("[GetSceneHandler]:get nullptr sceneType %{public}d,", static_cast(sceneType)); - return nullptr; + FrameSceneSched *scene = GetSceneHandler(); + if (scene == nullptr) { + RME_LOGE("[BeginFlushBuild]:scene nullptr"); + return; } - return rmeScene; + scene->BeginFlushBuild(); +} + +void FrameMsgMgr::EndFlushBuild() +{ + FrameSceneSched *scene = GetSceneHandler(); + if (scene == nullptr) { + RME_LOGE("[EndFlushBuild]:scene nullptr"); + return; + } + scene->EndFlushBuild(); +} + +void FrameMsgMgr::BeginFlushLayout() +{ + FrameSceneSched *scene = GetSceneHandler(); + if (scene == nullptr) { + RME_LOGE("[BeginFlushLayout]:scene nullptr"); + return; + } + scene->BeginFlushLayout(); +} + +void FrameMsgMgr::EndFlushLayout() +{ + FrameSceneSched *scene = GetSceneHandler(); + if (scene == nullptr) { + RME_LOGE("[EndFlushLayout]:scene nullptr"); + return; + } + scene->EndFlushLayout(); +} + +void FrameMsgMgr::BeginFlushRender() +{ + FrameSceneSched *scene = GetSceneHandler(); + if (scene == nullptr) { + RME_LOGE("[BeginFlushRender]:scene nullptr"); + return; + } + scene->BeginFlushRender(); +} + +void FrameMsgMgr::EndFlushRender() +{ + FrameSceneSched *scene = GetSceneHandler(); + if (scene == nullptr) { + RME_LOGE("[EndFlushRender]:scene nullptr"); + return; + } + scene->EndFlushRender(); +} + +void FrameMsgMgr::BeginFlushRenderFinish() +{ + FrameSceneSched *scene = GetSceneHandler(); + if (scene == nullptr) { + RME_LOGE("[BeginFlushRenderFinish]:scene nullptr"); + return; + } + scene->BeginFlushRenderFinish(); +} + +void FrameMsgMgr::EndFlushRenderFinish() +{ + FrameSceneSched *scene = GetSceneHandler(); + if (scene == nullptr) { + RME_LOGE("[EndFlushRenderFinish]:scene nullptr"); + return; + } + scene->EndFlushRenderFinish(); +} + +void FrameMsgMgr::BeginProcessPostFlush() +{ + FrameSceneSched *scene = GetSceneHandler(); + if (scene == nullptr) { + RME_LOGE("[BeginProcessPostFlush]:scene nullptr"); + return; + } + scene->BeginProcessPostFlush(); +} + +void FrameMsgMgr::ProcessCommandsStart() +{ + FrameSceneSched *scene = GetSceneHandler(); + if (scene == nullptr) { + RME_LOGE("[ProcessCommandsStart]:scene nullptr"); + return; + } + scene->ProcessCommandsStart(); +} + +void FrameMsgMgr::AnimateStart() +{ + FrameSceneSched *scene = GetSceneHandler(); + if (scene == nullptr) { + RME_LOGE("[AnimateStart]:scene nullptr"); + return; + } + scene->AnimateStart(); +} + +void FrameMsgMgr::RenderStart() +{ + FrameSceneSched *scene = GetSceneHandler(); + if (scene == nullptr) { + RME_LOGE("[RenderStart]:scene nullptr"); + return; + } + scene->RenderStart(); +} + +void FrameMsgMgr::SendCommandsStart() +{ + FrameSceneSched *scene = GetSceneHandler(); + if (scene == nullptr) { + RME_LOGE("[SendCommandsStart]:scene nullptr"); + return; + } + scene->SendCommandsStart(); +} + +void FrameMsgMgr::HandleEndFrame() +{ + FrameSceneSched *scene = GetSceneHandler(); + if (scene == nullptr) { + RME_LOGE("[HandleEndFrame]:scene nullptr"); + return; + } + scene->HandleEndFrame(); +} + +void FrameMsgMgr::SetSchedParam() +{ + RME_LOGI("[SetSchedParam]: set default sched param!"); } } // namespace RME } // namespace OHOS diff --git a/interfaces/innerkits/frameintf/frame_ui_intf.cpp b/interfaces/innerkits/frameintf/frame_ui_intf.cpp index 370b46f..f96f4c2 100644 --- a/interfaces/innerkits/frameintf/frame_ui_intf.cpp +++ b/interfaces/innerkits/frameintf/frame_ui_intf.cpp @@ -57,7 +57,7 @@ void FrameUiIntf::BeginFlushAnimation() const if (!inited) { return; } - FrameMsgMgr::GetInstance().EventUpdate(FrameEvent::FLUSH_ANIMATION, EventState::EVENT_ENTER); + FrameMsgMgr::GetInstance().EventUpdate(FrameEvent::EVENT_FLUSH_ANIMATION_START); } void FrameUiIntf::EndFlushAnimation() const @@ -65,7 +65,7 @@ void FrameUiIntf::EndFlushAnimation() const if (!inited) { return; } - FrameMsgMgr::GetInstance().EventUpdate(FrameEvent::FLUSH_BUILD, EventState::EVENT_EXIT); + FrameMsgMgr::GetInstance().EventUpdate(FrameEvent::EVENT_FLUSH_ANIMATION_END); } void FrameUiIntf::BeginFlushBuild() const @@ -73,7 +73,7 @@ void FrameUiIntf::BeginFlushBuild() const if (!inited) { return; } - FrameMsgMgr::GetInstance().EventUpdate(FrameEvent::FLUSH_BUILD, EventState::EVENT_ENTER); + FrameMsgMgr::GetInstance().EventUpdate(FrameEvent::EVENT_FLUSH_BUILD_START); } void FrameUiIntf::EndFlushBuild() const @@ -81,7 +81,7 @@ void FrameUiIntf::EndFlushBuild() const if (!inited) { return; } - FrameMsgMgr::GetInstance().EventUpdate(FrameEvent::FLUSH_BUILD, EventState::EVENT_EXIT); + FrameMsgMgr::GetInstance().EventUpdate(FrameEvent::EVENT_FLUSH_BUILD_END); } void FrameUiIntf::BeginFlushLayout() const @@ -89,7 +89,7 @@ void FrameUiIntf::BeginFlushLayout() const if (!inited) { return; } - FrameMsgMgr::GetInstance().EventUpdate(FrameEvent::FLUSH_LAYOUT, EventState::EVENT_ENTER); + FrameMsgMgr::GetInstance().EventUpdate(FrameEvent::EVENT_FLUSH_LAYOUT_START); } void FrameUiIntf::EndFlushLayout() const @@ -97,7 +97,7 @@ void FrameUiIntf::EndFlushLayout() const if (!inited) { return; } - FrameMsgMgr::GetInstance().EventUpdate(FrameEvent::FLUSH_LAYOUT, EventState::EVENT_EXIT); + FrameMsgMgr::GetInstance().EventUpdate(FrameEvent::EVENT_FLUSH_LAYOUT_END); } void FrameUiIntf::BeginFlushRender() const @@ -105,7 +105,7 @@ void FrameUiIntf::BeginFlushRender() const if (!inited) { return; } - FrameMsgMgr::GetInstance().EventUpdate(FrameEvent::FLUSH_RENDER, EventState::EVENT_ENTER); + FrameMsgMgr::GetInstance().EventUpdate(FrameEvent::EVENT_FLUSH_RENDER_START); } void FrameUiIntf::EndFlushRender() const @@ -113,7 +113,7 @@ void FrameUiIntf::EndFlushRender() const if (!inited) { return; } - FrameMsgMgr::GetInstance().EventUpdate(FrameEvent::FLUSH_RENDER, EventState::EVENT_EXIT); + FrameMsgMgr::GetInstance().EventUpdate(FrameEvent::EVENT_FLUSH_RENDER_END); } void FrameUiIntf::BeginFlushRenderFinish() const @@ -121,7 +121,7 @@ void FrameUiIntf::BeginFlushRenderFinish() const if (!inited) { return; } - FrameMsgMgr::GetInstance().EventUpdate(FrameEvent::FLUSH_RENDER_FINISH, EventState::EVENT_ENTER); + FrameMsgMgr::GetInstance().EventUpdate(FrameEvent::EVENT_FLUSH_RENDER_FINISH_START); } void FrameUiIntf::EndFlushRenderFinish() const @@ -129,7 +129,7 @@ void FrameUiIntf::EndFlushRenderFinish() const if (!inited) { return; } - FrameMsgMgr::GetInstance().EventUpdate(FrameEvent::FLUSH_RENDER_FINISH, EventState::EVENT_EXIT); + FrameMsgMgr::GetInstance().EventUpdate(FrameEvent::EVENT_FLUSH_RENDER_FINISH_END); } void FrameUiIntf::BeginProcessPostFlush() const @@ -137,7 +137,7 @@ void FrameUiIntf::BeginProcessPostFlush() const if (!inited) { return; } - FrameMsgMgr::GetInstance().EventUpdate(FrameEvent::PROCESS_POST_FLUSH, EventState::EVENT_ENTER); + FrameMsgMgr::GetInstance().EventUpdate(FrameEvent::EVENT_PROCESS_POST_FLUSH_START); } void FrameUiIntf::ProcessCommandsStart() const @@ -145,7 +145,7 @@ void FrameUiIntf::ProcessCommandsStart() const if (!inited) { return; } - FrameMsgMgr::GetInstance().EventUpdate(FrameEvent::PROCESS_COMMANDS, EventState::EVENT_ENTER); + FrameMsgMgr::GetInstance().EventUpdate(FrameEvent::EVENT_PROCESS_COMMANDS_START); } void FrameUiIntf::AnimateStart() const @@ -153,7 +153,7 @@ void FrameUiIntf::AnimateStart() const if (!inited) { return; } - FrameMsgMgr::GetInstance().EventUpdate(FrameEvent::ANIMATE, EventState::EVENT_ENTER); + FrameMsgMgr::GetInstance().EventUpdate(FrameEvent::EVENT_ANIMATE_START); } void FrameUiIntf::RenderStart() const @@ -161,7 +161,7 @@ void FrameUiIntf::RenderStart() const if (!inited) { return; } - FrameMsgMgr::GetInstance().EventUpdate(FrameEvent::RENDER, EventState::EVENT_ENTER); + FrameMsgMgr::GetInstance().EventUpdate(FrameEvent::EVENT_RENDER_START); } void FrameUiIntf::SendCommandsStart() const @@ -169,7 +169,7 @@ void FrameUiIntf::SendCommandsStart() const if (!inited) { return; } - FrameMsgMgr::GetInstance().EventUpdate(FrameEvent::SEND_COMMANDS, EventState::EVENT_ENTER); + FrameMsgMgr::GetInstance().EventUpdate(FrameEvent::EVENT_SEND_COMMANDS_START); } void FrameUiIntf::BeginListFling() const @@ -177,7 +177,7 @@ void FrameUiIntf::BeginListFling() const if (!inited) { return; } - FrameMsgMgr::GetInstance().EventUpdate(FrameEvent::EVENT_BEGIN_FRAME, EventState::EVENT_ENTER); + FrameMsgMgr::GetInstance().EventUpdate(FrameEvent::EVENT_BEGIN_FRAME); } void FrameUiIntf::EndListFling() const @@ -185,7 +185,7 @@ void FrameUiIntf::EndListFling() const if (!inited) { return; } - FrameMsgMgr::GetInstance().EventUpdate(FrameEvent::EVENT_END_FRAME, EventState::EVENT_ENTER); + FrameMsgMgr::GetInstance().EventUpdate(FrameEvent::EVENT_END_FRAME); } extern "C" void Init() -- Gitee From 37017b43444038369da379be5aa4194f7ab8faf8 Mon Sep 17 00:00:00 2001 From: rongkunshi Date: Tue, 8 Mar 2022 11:26:56 +0800 Subject: [PATCH 3/6] csec for old code Signed-off-by: rongkunshi --- common/include/rtg_interface.h | 5 +---- .../include/frame_msg_mgr.h | 2 -- .../include/frame_window_mgr.h | 1 - .../frame_aware_policy/include/rtg_msg_mgr.h | 2 -- .../core/frame_aware_policy/src/para_config.cpp | 17 ++++++++++------- interfaces/innerkits/frameintf/frame_msg_intf.h | 5 ----- .../innerkits/frameintf/rtg_interface.cpp | 2 +- test/unittest/phone/frame_msg_intf_test.cpp | 1 - test/unittest/phone/rtg_interface_test.cpp | 2 +- 9 files changed, 13 insertions(+), 24 deletions(-) diff --git a/common/include/rtg_interface.h b/common/include/rtg_interface.h index f409dc7..68d5a60 100644 --- a/common/include/rtg_interface.h +++ b/common/include/rtg_interface.h @@ -27,8 +27,6 @@ using namespace std; #define MAX_SUBPROCESS_NUM 8 #define MULTI_FRAME_NUM 5 -typedef int pid_t; - struct rtg_enable_data { int enable; int len; @@ -85,9 +83,8 @@ enum rtg_sched_cmdid { RTG_CTRL_MAX_NR, }; -extern "C"{ +extern "C" { int EnableRtg(bool flag); - //-----for frame rtg-----// int CreateNewRtgGrp(int prioType = 0, int rtNum = 0); // Return GrpId if success int AddThreadToRtg(int tid, int grpId, int prioType = 0); int AddThreadsToRtg(vector tids, int grpId, int prioType = 0); diff --git a/frameworks/core/frame_aware_collector/include/frame_msg_mgr.h b/frameworks/core/frame_aware_collector/include/frame_msg_mgr.h index 410b3d2..67d842b 100644 --- a/frameworks/core/frame_aware_collector/include/frame_msg_mgr.h +++ b/frameworks/core/frame_aware_collector/include/frame_msg_mgr.h @@ -25,8 +25,6 @@ namespace OHOS { namespace RME { -class RmeSceneSched; - class FrameMsgMgr { DECLARE_SINGLE_INSTANCE_BASE(FrameMsgMgr); public: diff --git a/frameworks/core/frame_aware_collector/include/frame_window_mgr.h b/frameworks/core/frame_aware_collector/include/frame_window_mgr.h index 5e112c9..56860fc 100644 --- a/frameworks/core/frame_aware_collector/include/frame_window_mgr.h +++ b/frameworks/core/frame_aware_collector/include/frame_window_mgr.h @@ -32,7 +32,6 @@ private: int m_enable = -1; bool m_startFlag; }; - } // namespace RME } // namespace OHOS #endif diff --git a/frameworks/core/frame_aware_policy/include/rtg_msg_mgr.h b/frameworks/core/frame_aware_policy/include/rtg_msg_mgr.h index e94761d..1725df0 100644 --- a/frameworks/core/frame_aware_policy/include/rtg_msg_mgr.h +++ b/frameworks/core/frame_aware_policy/include/rtg_msg_mgr.h @@ -26,7 +26,6 @@ namespace OHOS { namespace RME { - class RtgMsgMgr { DECLARE_SINGLE_INSTANCE(RtgMsgMgr); public: @@ -38,7 +37,6 @@ public: void FpsChanged(); void FocusChanged(const int pid, bool isFocus); // for multiwindow }; - } // RME } // OHOS #endif diff --git a/frameworks/core/frame_aware_policy/src/para_config.cpp b/frameworks/core/frame_aware_policy/src/para_config.cpp index 06f14f8..1ac54cc 100644 --- a/frameworks/core/frame_aware_policy/src/para_config.cpp +++ b/frameworks/core/frame_aware_policy/src/para_config.cpp @@ -51,7 +51,7 @@ bool ParaConfig::IsXmlPrepared(const std::string& filePath) continue; } auto nodeName = curNodePtr->name; // char* to string - if (!xmlStrcmp(nodeName, reinterpret_cast("log_open")) || + if (!xmlStrcmp(nodeName, reinterpret_cast("log_open")) || !xmlStrcmp(nodeName, reinterpret_cast("enable")) || !xmlStrcmp(nodeName, reinterpret_cast("SOC")) || !xmlStrcmp(nodeName, reinterpret_cast("frame_sched_reset_count"))) { @@ -114,11 +114,12 @@ void ParaConfig::ReadRenderType(const xmlNodePtr& root) RME_LOGE("[GetRenderType]: renderType read failed!"); return; } - SplitString(std::string(reinterpret_cast(context)), " ", m_renderTypeList, RENDER_TYPE_MAX_VALUE, "renderType"); + SplitString(std::string(reinterpret_cast(context)), " ", + m_renderTypeList, RENDER_TYPE_MAX_VALUE, "renderType"); xmlFree(context); } -void ParaConfig::SplitString(const std::string& context, const std::string& character,std::vector &mList, +void ParaConfig::SplitString(const std::string& context, const std::string& character, std::vector &mList, const int maxVal, const std::string& attrName) { if (context == "") { @@ -136,7 +137,7 @@ void ParaConfig::SplitString(const std::string& context, const std::string& char } mList.push_back(curVal); - toSplitStr = toSplitStr.substr(pos + 1,toSplitStr.size()); + toSplitStr = toSplitStr.substr(pos + 1, toSplitStr.size()); pos = toSplitStr.find(character); } RME_LOGI("[SplitString]:get data success!attr name:%{public}s", attrName.c_str()); @@ -162,12 +163,14 @@ void ParaConfig::ReadFrameConfig(const xmlNodePtr& root) std::string nodeName = reinterpret_cast(curSubNode->name); // char* to string xmlChar* context = xmlNodeGetContent(curSubNode); if (context == nullptr) { // if one config wrong then this config dilscard. - RME_LOGE("[GetFrameConfig]: frame config get error! nodeName:%{public}s, key:%{public}s", nodeName.c_str(), key.c_str()); + RME_LOGE("[GetFrameConfig]: frame config get error! nodeName:%{public}s, key:%{public}s", + nodeName.c_str(), key.c_str()); xmlFree(context); break; } frameConfigTmp[nodeName] = atoi(reinterpret_cast(context)); - RME_LOGI("[GetFrameConfig]: nodeName:%{public}s, val:%{public}s", nodeName.c_str(), reinterpret_cast(context)); + RME_LOGI("[GetFrameConfig]: nodeName:%{public}s, val:%{public}s", + nodeName.c_str(), reinterpret_cast(context)); xmlFree(context); } m_subEventConfig[key] = frameConfigTmp; @@ -191,7 +194,7 @@ std::map ParaConfig::GetGeneralConfig() return m_generalConfig; } -std::map> ParaConfig::GetSubEventConfig() +std::map> ParaConfig::GetSubEventConfig() { return m_subEventConfig; } diff --git a/interfaces/innerkits/frameintf/frame_msg_intf.h b/interfaces/innerkits/frameintf/frame_msg_intf.h index de317e1..a417fa3 100644 --- a/interfaces/innerkits/frameintf/frame_msg_intf.h +++ b/interfaces/innerkits/frameintf/frame_msg_intf.h @@ -22,7 +22,6 @@ namespace OHOS { namespace RME { - class FrameMsgIntf { public: static FrameMsgIntf& GetInstance(); @@ -32,17 +31,13 @@ public: void ReportWindowFocus(const int pid, const int isFocus); void ReportProcessInfo(const int pid, const int tid, ThreadState state); void Stop(); - protected: FrameMsgIntf() = default; virtual ~FrameMsgIntf() = default; std::shared_ptr threadHandler_; - private: DISALLOW_COPY_AND_MOVE(FrameMsgIntf); - }; - } // namespace RME } // namespace OHOS #endif diff --git a/interfaces/innerkits/frameintf/rtg_interface.cpp b/interfaces/innerkits/frameintf/rtg_interface.cpp index 17f940c..a393463 100644 --- a/interfaces/innerkits/frameintf/rtg_interface.cpp +++ b/interfaces/innerkits/frameintf/rtg_interface.cpp @@ -36,7 +36,7 @@ namespace { } DEFINE_RMELOG_INTELLISENSE("rtg_interface"); -#define RTG_SCHED_IPC_MAGIC 0xAB +const char RTG_SCHED_IPC_MAGIC = 0xAB; #define CMD_ID_SET_ENABLE \ _IOWR(RTG_SCHED_IPC_MAGIC, SET_ENABLE, struct rtg_enable_data) diff --git a/test/unittest/phone/frame_msg_intf_test.cpp b/test/unittest/phone/frame_msg_intf_test.cpp index 115c403..4904104 100644 --- a/test/unittest/phone/frame_msg_intf_test.cpp +++ b/test/unittest/phone/frame_msg_intf_test.cpp @@ -198,6 +198,5 @@ HWTEST_F(FrameMsgIntfTest, FrameMsgIntfReportProcessInfoRenderDiedFore, TestSize std::map> mapList2 = AppInfoMgr::GetInstance().GetForegroundApp(); EXPECT_EQ(mapList2.count(pid_2), 1); } - } // namespace RME } // namespace OHOS diff --git a/test/unittest/phone/rtg_interface_test.cpp b/test/unittest/phone/rtg_interface_test.cpp index 9e48d98..2d99fd0 100644 --- a/test/unittest/phone/rtg_interface_test.cpp +++ b/test/unittest/phone/rtg_interface_test.cpp @@ -28,7 +28,7 @@ using namespace testing::ext; #define RTG_INTERFACE_SO_PATH "/system/lib/librtg_interface.z.so" -enum rtg_type { +enum rtg_type : int { VIP = 0, TOP_TASK_KEY, NORMAL_TASK, -- Gitee From e83e573df86e9525c0c43280f3493aa1112c30d3 Mon Sep 17 00:00:00 2001 From: rongkunshi Date: Sun, 13 Mar 2022 20:20:51 +0800 Subject: [PATCH 4/6] stable-fix Signed-off-by: rongkunshi --- common/include/single_instance.h | 13 +++++------ .../frame_aware_policy/src/app_info_mgr.cpp | 4 +++- .../innerkits/frameintf/frame_msg_intf.cpp | 22 +++++++++++++++---- .../innerkits/frameintf/frame_msg_intf.h | 4 +++- 4 files changed, 29 insertions(+), 14 deletions(-) diff --git a/common/include/single_instance.h b/common/include/single_instance.h index 087f4a2..a586551 100644 --- a/common/include/single_instance.h +++ b/common/include/single_instance.h @@ -18,7 +18,6 @@ namespace OHOS { namespace RME { - #define DECLARE_SINGLE_INSTANCE_BASE(className) \ public: \ static className& GetInstance(); \ @@ -28,13 +27,11 @@ private: \ className(className&&) = delete; \ className& operator=(className&&) = delete; \ - -#define DECLARE_SINGLE_INSTANCE(className) \ - DECLARE_SINGLE_INSTANCE_BASE(className) \ -private: \ - className() = default; \ - ~className() = default; \ - +#define DECLARE_SINGLE_INSTANCE(className) \ + DECLARE_SINGLE_INSTANCE_BASE(className) \ +private: \ + className() = default; \ + ~className() = default; \ #define IMPLEMENT_SINGLE_INSTANCE(className) \ className& className::GetInstance() \ diff --git a/frameworks/core/frame_aware_policy/src/app_info_mgr.cpp b/frameworks/core/frame_aware_policy/src/app_info_mgr.cpp index cd0821e..3fc6dc4 100644 --- a/frameworks/core/frame_aware_policy/src/app_info_mgr.cpp +++ b/frameworks/core/frame_aware_policy/src/app_info_mgr.cpp @@ -49,7 +49,9 @@ void AppInfoMgr::OnBackgroundChanged(const int pid, const std::string appName) mBackgroundAppList[pid] = mForegroundAppList[pid]; mForegroundAppList.erase(pid); } else { - RME_LOGE("[OnBackgroundChanged]:unfind app in foreground app when go to background! pid:%{public}d", pid); + RME_LOGI("[OnBackgroundChanged]: fore No! pid:%{public}d", pid); + auto appInfo = std::make_shared(appName, pid, INIT_VAL, INIT_VAL, INIT_VAL, AppState::APP_BACKGROUND); + mBackgroundAppList[pid] = appInfo; } mBackgroundAppList[pid]->SetRtgrp(INIT_VAL); RME_LOGI("[OnBackgroundChanged]:pid:%{public}d, appName:%{public}s", pid, appName.c_str()); diff --git a/interfaces/innerkits/frameintf/frame_msg_intf.cpp b/interfaces/innerkits/frameintf/frame_msg_intf.cpp index b827b83..70e2fee 100644 --- a/interfaces/innerkits/frameintf/frame_msg_intf.cpp +++ b/interfaces/innerkits/frameintf/frame_msg_intf.cpp @@ -30,6 +30,7 @@ FrameMsgIntf& FrameMsgIntf::GetInstance() bool FrameMsgIntf::Init() { + std::lock_guard autoLock(frameMsgIntfMutex_); RME_LOGI("init begin!"); if (!GetThreadHandler()) { return false; @@ -43,9 +44,14 @@ bool FrameMsgIntf::Init() bool FrameMsgIntf::GetThreadHandler() { if (threadHandler_ == nullptr) { - threadHandler_ = std::make_shared(AppExecFwk::EventRunner::Create()); + runner_ = AppExecFwk::EventRunner::Create("frame_aware_sched_msg"); + if (runner_ == nullptr) { + RME_LOGE("failed to create eventRunner!"); + return false; + } + threadHandler_ = std::make_shared(runner_); if (threadHandler_ == nullptr) { - RME_LOGI("failed to create thread handler!"); + RME_LOGE("failed to create thread handler!"); return false; } } @@ -56,6 +62,7 @@ bool FrameMsgIntf::GetThreadHandler() void FrameMsgIntf::ReportAppInfo(std::string appName, std::string processName, int pid, AppStateUpdateReason reason) { + std::lock_guard autoLock(frameMsgIntfMutex_); if (threadHandler_ == nullptr) { RME_LOGI("[ReportAppInfo]:threandHandler none!"); return; @@ -67,8 +74,9 @@ void FrameMsgIntf::ReportAppInfo(std::string appName, std::string processName, i void FrameMsgIntf::ReportWindowFocus(const int pid, const int isFocus) { + std::lock_guard autoLock(frameMsgIntfMutex_); if (threadHandler_ == nullptr) { - RME_LOGI("[ReportWindowFocus]:threandHandler none!"); + RME_LOGE("[ReportWindowFocus]:threandHandler none!"); return; } threadHandler_->PostTask([pid, isFocus] { @@ -78,8 +86,9 @@ void FrameMsgIntf::ReportWindowFocus(const int pid, const int isFocus) void FrameMsgIntf::ReportProcessInfo(const int pid, const int tid, ThreadState state) { + std::lock_guard autoLock(frameMsgIntfMutex_); if (threadHandler_ == nullptr) { - RME_LOGI("[ReportWindowFocus]:threandHandler none!"); + RME_LOGI("[ReportProcessInfo]:threandHandler none!"); return; } threadHandler_->PostTask([pid, tid, state] { @@ -89,10 +98,15 @@ void FrameMsgIntf::ReportProcessInfo(const int pid, const int tid, ThreadState s void FrameMsgIntf::Stop() { + std::lock_guard autoLock(frameMsgIntfMutex_); if (threadHandler_ != nullptr) { threadHandler_->RemoveAllEvents(); threadHandler_ = nullptr; } + if (runner_ != nullptr) { + runner_->Stop(); + runner_ = nullptr; + } RME_LOGI("stop eventRunner success!"); } } // namespace RME diff --git a/interfaces/innerkits/frameintf/frame_msg_intf.h b/interfaces/innerkits/frameintf/frame_msg_intf.h index a417fa3..3f60508 100644 --- a/interfaces/innerkits/frameintf/frame_msg_intf.h +++ b/interfaces/innerkits/frameintf/frame_msg_intf.h @@ -34,8 +34,10 @@ public: protected: FrameMsgIntf() = default; virtual ~FrameMsgIntf() = default; - std::shared_ptr threadHandler_; private: + std::mutex frameMsgIntfMutex_; + std::shared_ptr runner_; + std::shared_ptr threadHandler_; DISALLOW_COPY_AND_MOVE(FrameMsgIntf); }; } // namespace RME -- Gitee From 45d187f174b510d928b2a4160937e350e43f1d48 Mon Sep 17 00:00:00 2001 From: rongkunshi Date: Sun, 13 Mar 2022 20:21:31 +0800 Subject: [PATCH 5/6] xmlSwitchOpen Signed-off-by: rongkunshi --- .../include/intellisense_server.h | 1 + .../src/intellisense_server.cpp | 27 ++++++++++-- .../frame_aware_policy/src/para_config.cpp | 42 ++++++++++--------- profiles/hwrme.xml | 2 +- 4 files changed, 49 insertions(+), 23 deletions(-) diff --git a/frameworks/core/frame_aware_policy/include/intellisense_server.h b/frameworks/core/frame_aware_policy/include/intellisense_server.h index 6d55c0f..79e1bbe 100644 --- a/frameworks/core/frame_aware_policy/include/intellisense_server.h +++ b/frameworks/core/frame_aware_policy/include/intellisense_server.h @@ -48,6 +48,7 @@ private: std::vector m_renderTypeList {}; bool m_readXmlSuc = false; bool m_needReadXml = true; + bool m_switch = false; }; } // namespace RME } // namesapce OHOS diff --git a/frameworks/core/frame_aware_policy/src/intellisense_server.cpp b/frameworks/core/frame_aware_policy/src/intellisense_server.cpp index 3abc88a..f7335de 100644 --- a/frameworks/core/frame_aware_policy/src/intellisense_server.cpp +++ b/frameworks/core/frame_aware_policy/src/intellisense_server.cpp @@ -35,6 +35,15 @@ IMPLEMENT_SINGLE_INSTANCE(IntelliSenseServer); void IntelliSenseServer::Init() { + if (!ReadXml()) { + RME_LOGI("[Init]: readXml failed!"); + return; + } + m_switch = std::stoi(m_generalPara["enable"]); + if (!m_switch) { + RME_LOGI("[Init]:xml switch close!"); + return; + } RtgMsgMgr::GetInstance().Init(); RME_LOGI("[Init]:Init rtg and readXml finish!"); } @@ -51,9 +60,9 @@ bool IntelliSenseServer::ReadXml() m_fpsList = ParaConfig::GetFpsList(); m_renderTypeList = ParaConfig::GetRenderTypeList(); if (!m_generalPara.empty() && !m_subEventPara.empty() && !m_fpsList.empty() && !m_renderTypeList.empty()) { - m_readXmlSuc = true; - RME_LOGI("[ReadXml]: read slide scene xml success!"); - return true; + m_readXmlSuc = true; + RME_LOGI("[ReadXml]: read slide scene xml success!"); + return true; } } RME_LOGE("[ReadXml]: read slide scene xml not success!"); @@ -63,6 +72,9 @@ bool IntelliSenseServer::ReadXml() void IntelliSenseServer::ReportMessage(std::string appName, std::string processName, int pid, AppStateUpdateReason reason) { + if (!m_switch) { + return; + } RME_FUNCTION_TRACE(); int rtGrp = AppInfoMgr::GetInstance().GetAppRtgrp(pid); switch (reason) { @@ -96,6 +108,9 @@ void IntelliSenseServer::ReportMessage(std::string appName, std::string processN void IntelliSenseServer::ReportWindowFocus(const int pid, int isFocus) { + if (!m_switch) { + return; + } RME_FUNCTION_TRACE(); int rtGrp = AppInfoMgr::GetInstance().GetAppRtgrp(pid); switch (isFocus) { @@ -123,6 +138,9 @@ void IntelliSenseServer::ReportWindowFocus(const int pid, int isFocus) void IntelliSenseServer::ReportProcessInfo(const int pid, const int tid, ThreadState state) { + if (!m_switch) { + return; + } RME_FUNCTION_TRACE(); switch (state) { case ThreadState::DIED: @@ -151,6 +169,9 @@ void IntelliSenseServer::ReportProcessInfo(const int pid, const int tid, ThreadS void IntelliSenseServer::SetPara(const int32_t currentFps, const int32_t currentRenderType) { + if (!m_switch) { + return; + } RME_LOGI("[SetPara]:ioctl SetPara!\n"); std::string key = std::to_string(currentRenderType) + " " + std::to_string(currentFps); map tempMap = m_subEventPara[key]; diff --git a/frameworks/core/frame_aware_policy/src/para_config.cpp b/frameworks/core/frame_aware_policy/src/para_config.cpp index 1ac54cc..a086872 100644 --- a/frameworks/core/frame_aware_policy/src/para_config.cpp +++ b/frameworks/core/frame_aware_policy/src/para_config.cpp @@ -31,7 +31,6 @@ std::vector ParaConfig::m_renderTypeList; bool ParaConfig::IsXmlPrepared(const std::string& filePath) { - RME_LOGI("[IsXmlPrepared]:begin!"); xmlDocPtr docPtr = xmlReadFile(filePath.c_str(), nullptr, XML_PARSE_NOBLANKS); RME_LOGI("[IsXmlPrepared]:filePath:%{public}s", filePath.c_str()); if (docPtr == nullptr) { @@ -50,12 +49,12 @@ bool ParaConfig::IsXmlPrepared(const std::string& filePath) RME_LOGE("[IsXmlPrepared]: invalid node!"); continue; } - auto nodeName = curNodePtr->name; // char* to string + auto nodeName = curNodePtr->name; if (!xmlStrcmp(nodeName, reinterpret_cast("log_open")) || !xmlStrcmp(nodeName, reinterpret_cast("enable")) || !xmlStrcmp(nodeName, reinterpret_cast("SOC")) || !xmlStrcmp(nodeName, reinterpret_cast("frame_sched_reset_count"))) { - ReadConfigInfo(curNodePtr); // is this transform ok? + ReadConfigInfo(curNodePtr); continue; } if (!xmlStrcmp(nodeName, reinterpret_cast("fps_list"))) { @@ -63,7 +62,7 @@ bool ParaConfig::IsXmlPrepared(const std::string& filePath) continue; } if (!xmlStrcmp(nodeName, reinterpret_cast("render_type"))) { - ReadFpsConfig(curNodePtr); + ReadRenderType(curNodePtr); continue; } if (!xmlStrcmp(nodeName, reinterpret_cast("framedetect"))) { @@ -131,14 +130,16 @@ void ParaConfig::SplitString(const std::string& context, const std::string& char while (pos != toSplitStr.npos) { int curVal = atoi(toSplitStr.substr(0, pos).c_str()); - if (curVal <= 0 && curVal > maxVal) { - RME_LOGI("[SplitString]:get data error! attr name:%{public}s", attrName.c_str()); - return; + if (curVal <= 0 && curVal > maxVal) { + RME_LOGE("[SplitString]:get data error! attr name:%{public}s", attrName.c_str()); + return; + } + mList.push_back(curVal); + toSplitStr = toSplitStr.substr(pos + 1, toSplitStr.size()); + pos = toSplitStr.find(character); } - mList.push_back(curVal); - - toSplitStr = toSplitStr.substr(pos + 1, toSplitStr.size()); - pos = toSplitStr.find(character); + for (auto m : mList) { + RME_LOGI("[SplitString]: attrName: %{public}s, list_val:%{public}d", attrName.c_str(), m); } RME_LOGI("[SplitString]:get data success!attr name:%{public}s", attrName.c_str()); } @@ -153,10 +154,10 @@ void ParaConfig::ReadFrameConfig(const xmlNodePtr& root) } std::string key1 = ""; std::string key2 = ""; - ReadAttr(curNode, "renderType", key1); + ReadAttr(curNode, "render_type", key1); ReadAttr(curNode, "fps_list", key2); std::string key = key1 + " " + key2; - + RME_LOGI("ReadFrameConfig-key:%{public}s", key.c_str()); std::map frameConfigTmp; xmlNodePtr curSubNode = curNode->xmlChildrenNode; for (; curSubNode != nullptr; curSubNode = curSubNode->next) { @@ -180,13 +181,16 @@ void ParaConfig::ReadFrameConfig(const xmlNodePtr& root) void ParaConfig::ReadAttr(xmlNodePtr& root, const std::string& attrName, std::string& res) { - xmlChar* attr = xmlGetProp(root, reinterpret_cast(attrName.c_str())); - if (attr == nullptr) { - RME_LOGE("[ReadAttr]: attr <%{public}s> read error!", attrName.c_str()); + xmlAttrPtr attrPtr = root->properties; + while (attrPtr != nullptr) { + if (!xmlStrcmp(attrPtr->name, reinterpret_cast(attrName.c_str()))) { + xmlChar* resAttr = xmlGetProp(root, reinterpret_cast(attrName.c_str())); + res = std::to_string(atoi((char*)resAttr)); + RME_LOGI("[ReadAttr]: attr <%{public}s> read res: %{public}s!", attrName.c_str(), res.c_str()); + xmlFree(resAttr); + } + attrPtr = attrPtr->next; } - const char* tmp = reinterpret_cast(attr); // char* to string - res = tmp; - xmlFree(attr); } std::map ParaConfig::GetGeneralConfig() diff --git a/profiles/hwrme.xml b/profiles/hwrme.xml index a41326e..4398e58 100644 --- a/profiles/hwrme.xml +++ b/profiles/hwrme.xml @@ -21,7 +21,7 @@ 60 90 0 1 2 - + 600 -- Gitee From 7ea5500e863df017a4b6087402bc06efb9152170 Mon Sep 17 00:00:00 2001 From: rongkunshi Date: Sun, 13 Mar 2022 20:28:51 +0800 Subject: [PATCH 6/6] add readme for OAT Signed-off-by: rongkunshi --- README.md | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++ README_ZH.md | 2 +- 2 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..04efe2e --- /dev/null +++ b/README.md @@ -0,0 +1,90 @@ +# The Part of Frame Aware Sched + +- [ Introduction](#section_introduction) +- [ Directory Structure](#section_catalogue) +- [Framework](#section_framework) + - [The component of Frame Information Collection ](#section_collection) + - [The component of Frame Aware Policy](#section_policy) +- [ Usage Guidelines](#section_usage) +- [ Repositories Involved](#section_projects) + +## Introduction + +The part of Frame Aware Sched belongs to subsystem named *Resource Schedule Subsystem*. + +In order to ensure the cpu scheduling supply, it updates the process scheduling groups and adjust the kernel schedule parameters to influence the kernel scheduling behavior according to the information of the application frame drawing and the application life cycle status. + +## Directory Structure + +``` +//foundation/resourceschedule/frame_aware_sched +├── common # 部件通用工具类 +│ └── include +│ ├── frame_info_const.h # 绘帧过程信息 +│ ├── frame_aware_constants.h # 通用参数配置 +│ ├── frame_aware_log_domain.h # 封装hilog,用于日志打印 +│ └── single_instance.h # 封装了单例模式的类模板 +│ +├── interfaces +│ └── innerkits # 对内接口目录 +│ +├── frameworks +│ └── core +│ ├── frame_aware_collector # 应用绘帧信息收集组件 +│ └── frame_aware_policy # 帧感知调度机制组件 +│ +├── profiles # 组件配置文件 +└── test # 自测试用例目录 +``` +## Framework + +According to the thread it belongs to during execution, the *Farme Aware Sched* is devided into two parts, which are *Frame Aware Collector* and *Frame Aware Policy*. The framework is shown in the following picture. + +- *Frame Aware Collector*: which is the core strategy of drawing frames, including frame event processing module, slide scene strategy module, and model processing module. + + Module-frame event processing : responsible for coordinating and dispatching the message information of the frame drawing sub-process of the JS-UI subsystem and the Graphic subsystem. + + Module-slide scene strategy: responsible for the sliding scene recognize and provide the scenario-based fine scheduling by the interface of the model processing module. + + Module-model processing module: responsible for providing the adjustment and scheduling algorithm of each sub-process. + +- *Frame Aware Policy*: which is consists of four part: event processing module, application management module, and RTG (Related-Thread-Group) management module and scheduling parameter control module. + + Module-Application state event processing: which is responsible for registering and receiving messages from the global resource management and control subsystem, such as application state switch, window focus state change, etc, and distributing messages to the application management and control module and RTG grouping module. + + Module-Application management: responsible for the unified management of the application messages of the event processing module. + + Module-RTG Managerment: the kernel interface set, sets the RTG accoding to the application state to realize thread scheduling management. + + Module-Scheduling Parameter Control:responsible for reading the default scheduling prameter configuration. + +![](figures/zh-cn_image_fwk.png) + +### The component of Frame Information Collection + +The *frame information collection* is mainly responsible for adjusting the parameters of kernel scheduling and scaling the thread load. When the user slides on the application, it recognizes the key threads (such as draw frame thread and render thread) , perceives the sub-process of the application frame drawing, and adjust the kernel scheduling parameters according to the task timeout status to perform real-time resources. + +- According to the screen refresh rate, it analyze the current frame rate information. The resource supply of key threads is increased according to the time to end of the drawing frame. +- Adjust resource supply according to the duration of each sub-process during graphics rendering process. +- Adjust resource supply for frame sub-process task with high frame loss rate. + +### The component of Frame Aware Policy + +As the basis for the realization of application frame perception, the *frame aware policy* is mainly reposible for controlling thread groups and thread priorities, realizing the unified management of application threads and ensuring the performance of the entire system. + +### Usage Guidelines + +System developers can add or remove this part by configuring the product definition JSON file under **/productdefine/common/products** to enable or disable this part: + +` "resourceschedule:frame_aware_sched":{} ` + +## Repositories Involved + +- [resource_schedule_service](https://gitee.com/openharmony/resourceschedule_resource_schedule_service) +- [ace_ace_engine]( https://gitee.com/openharmony/ace_ace_engine) +- [graphic_standard](https://gitee.com/openharmony/graphic_standard) +- [aafwk_standard](https://gitee.com/openharmony/aafwk_standard ) +- **frame_aware_sched** + + + diff --git a/README_ZH.md b/README_ZH.md index c092e6c..3407d7e 100644 --- a/README_ZH.md +++ b/README_ZH.md @@ -11,7 +11,7 @@ ## 目录 ``` -//foundation/resourceschedule/plugins/frame_aware_sched +//foundation/resourceschedule/frame_aware_sched ├── common # 部件通用工具类 │ └── include │ ├── frame_info_const.h # 绘帧过程信息 -- Gitee