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 67d842b9a9f9dfcf0e2acdffe987b3177f186aea..c81be8b6de17558dab780e35fb4decc9df5ecd2e 100644 --- a/frameworks/core/frame_aware_collector/include/frame_msg_mgr.h +++ b/frameworks/core/frame_aware_collector/include/frame_msg_mgr.h @@ -38,7 +38,7 @@ private: void UpdateScene(SceneEvent scene); void SetSchedParam(); - void HandleBeginFrame(); + void HandleBeginScene(); void BeginFlushAnimation(); void EndFlushAnimation(); void BeginFlushBuild(); @@ -55,7 +55,7 @@ private: void AnimateStart(); void RenderStart(); void SendCommandsStart(); - void HandleEndFrame(); + void HandleEndScene(); FrameSceneSched *GetSceneHandler() const; typedef void (FrameMsgMgr:: *PHandle)(void); 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 768c55722dc527bb33a1a78395991fdfb7da03d3..39443fb63e5ffc9f4f1e5c403d61ee715e97b2e1 100644 --- a/frameworks/core/frame_aware_collector/include/frame_scene_sched.h +++ b/frameworks/core/frame_aware_collector/include/frame_scene_sched.h @@ -25,8 +25,8 @@ public: FrameSceneSched() {}; virtual ~FrameSceneSched() = default; - virtual void HandleBeginFrame() = 0; - virtual void HandleEndFrame() = 0; + virtual void HandleBeginScene() = 0; + virtual void HandleEndScene() = 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 94afb6746cbef36ea0146787632963aa8daeb05b..f5ef86af2a22c4943c0d72ffded10f24c7402488 100644 --- a/frameworks/core/frame_aware_collector/include/rme_core_sched.h +++ b/frameworks/core/frame_aware_collector/include/rme_core_sched.h @@ -28,8 +28,8 @@ public: ~RmeCoreSched(); bool Init(); - void HandleBeginFrame(); - void HandleEndFrame(); + void HandleBeginScene(); + void HandleEndScene(); void BeginFlushAnimation(); void EndFlushAnimation(); void BeginFlushBuild(); @@ -54,6 +54,8 @@ private: int m_rtg = -1; int m_renderTid = -1; int m_uiTid = -1; + bool m_renderHasSend = false; + bool m_uiHasSend = false; }; } // namespace RME } // namespace OHOS 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 e66e702b6e7b5d49e94c41560348212613ead752..72012ba2094e3189daf17436280885287ad94105 100644 --- a/frameworks/core/frame_aware_collector/include/rme_scene_sched.h +++ b/frameworks/core/frame_aware_collector/include/rme_scene_sched.h @@ -30,8 +30,8 @@ public: ~RmeSceneSched() override; bool Init(); - void HandleBeginFrame() override; - void HandleEndFrame() override; + void HandleBeginScene() override; + void HandleEndScene() 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 a6a66af7ad558b84c387b4b66d3d21380732c0d0..d373c33aee6ec73d4810660d22240017db7af5f0 100644 --- a/frameworks/core/frame_aware_collector/src/frame_msg_mgr.cpp +++ b/frameworks/core/frame_aware_collector/src/frame_msg_mgr.cpp @@ -74,7 +74,7 @@ bool FrameMsgMgr::HandleFrameMsgKey(FrameEvent event) void FrameMsgMgr::FrameMapKeyToFunc() { - m_frameMsgKeyToFunc[FrameEvent::EVENT_BEGIN_FRAME] = &FrameMsgMgr::HandleBeginFrame; + m_frameMsgKeyToFunc[FrameEvent::EVENT_BEGIN_FRAME] = &FrameMsgMgr::HandleBeginScene; 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; @@ -90,7 +90,7 @@ void FrameMsgMgr::FrameMapKeyToFunc() 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; + m_frameMsgKeyToFunc[FrameEvent::EVENT_END_FRAME] = &FrameMsgMgr::HandleEndScene; } FrameSceneSched *FrameMsgMgr::GetSceneHandler() const @@ -110,15 +110,15 @@ void FrameMsgMgr::UpdateScene(SceneEvent scene) sceneType = scene; } -void FrameMsgMgr::HandleBeginFrame() +void FrameMsgMgr::HandleBeginScene() { - RME_LOGI("[HandleBeginFrame]:start"); + RME_LOGI("[HandleBeginScene]:start"); FrameSceneSched *scene = GetSceneHandler(); if (scene == nullptr) { - RME_LOGE("[HandleBeginFrame]:scene nullptr"); + RME_LOGE("[HandleBeginScene]:scene nullptr"); return; } - scene->HandleBeginFrame(); + scene->HandleBeginScene(); } void FrameMsgMgr::BeginFlushAnimation() @@ -271,14 +271,14 @@ void FrameMsgMgr::SendCommandsStart() scene->SendCommandsStart(); } -void FrameMsgMgr::HandleEndFrame() +void FrameMsgMgr::HandleEndScene() { FrameSceneSched *scene = GetSceneHandler(); if (scene == nullptr) { - RME_LOGE("[HandleEndFrame]:scene nullptr"); + RME_LOGE("[HandleEndScene]:scene nullptr"); return; } - scene->HandleEndFrame(); + scene->HandleEndScene(); } void FrameMsgMgr::SetSchedParam() diff --git a/frameworks/core/frame_aware_collector/src/frame_window_mgr.cpp b/frameworks/core/frame_aware_collector/src/frame_window_mgr.cpp index 7b100030b05403eda5d97f256cf3a8e7a8f59418..5505f0a5590accb024aebc1b3658bb52396e2f17 100644 --- a/frameworks/core/frame_aware_collector/src/frame_window_mgr.cpp +++ b/frameworks/core/frame_aware_collector/src/frame_window_mgr.cpp @@ -35,6 +35,11 @@ int FrameWindowMgr::GetEnable() void FrameWindowMgr::SetStartFlag(bool flag) { + if (flag) { + RME_LOGI("fling start"); + } else { + RME_LOGI("fling end"); + } m_startFlag = flag; } 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 7c8f75d2ed9205ec68cbd686940a714179283917..1763ffd17a296a47979834af7efd31eb088ca061 100644 --- a/frameworks/core/frame_aware_collector/src/rme_core_sched.cpp +++ b/frameworks/core/frame_aware_collector/src/rme_core_sched.cpp @@ -19,9 +19,9 @@ namespace OHOS { namespace RME { namespace { - constexpr int MARGIN_THREE = -3; - constexpr int MARGIN_FIVE = -5; - constexpr int MARGIN_SEVEN = -7; + constexpr int MARGIN_BEGIN = -3; + constexpr int MARGIN_MIDDLE = -5; + constexpr int MARGIN_END = -13; } DEFINE_RMELOG_INTELLISENSE("ueaClient-RmeCoreSched"); RmeCoreSched::RmeCoreSched() {} @@ -45,7 +45,7 @@ bool RmeCoreSched::Init() return ret; } -void RmeCoreSched::HandleBeginFrame() +void RmeCoreSched::HandleBeginScene() { RME_FUNCTION_TRACE(); } @@ -53,7 +53,7 @@ void RmeCoreSched::HandleBeginFrame() void RmeCoreSched::BeginFlushAnimation() { m_pid = getpid(); - if (m_rtg == -1) { + if (m_rtg <= 0) { m_rtg = SearchRtgForTid(m_pid); if (m_rtg <= 0) { RME_LOGW("[BeginFlushAnimation]:Search rtg empty!pid %{public}d,Rtg: %{public}d", @@ -66,7 +66,10 @@ void RmeCoreSched::BeginFlushAnimation() int ret = BeginFrameFreq(m_rtg, 0); RmeTraceBegin(("FrameS-Begin&AddThread-rtg:" + to_string(m_rtg) + " ret:" + to_string(ret)).c_str()); m_uiTid = gettid(); - AddThreadToRtg(m_uiTid, m_rtg); + if (!m_uiHasSend) { + AddThreadToRtg(m_uiTid, m_rtg); + m_uiHasSend = true; + } RmeTraceEnd(); return; } @@ -75,8 +78,8 @@ void RmeCoreSched::EndFlushAnimation() {} void RmeCoreSched::BeginFlushBuild() { - RmeTraceBegin(("FrameS-SetMargin-rtg:" + to_string(m_rtg) + " margin:" + to_string(MARGIN_THREE)).c_str()); - SetMargin(m_rtg, MARGIN_THREE); + RmeTraceBegin(("FrameS-SetMargin-rtg:" + to_string(m_rtg) + " margin:" + to_string(MARGIN_BEGIN)).c_str()); + SetMargin(m_rtg, MARGIN_BEGIN); RmeTraceEnd(); } @@ -88,19 +91,14 @@ void RmeCoreSched::EndFlushLayout() {} void RmeCoreSched::BeginFlushRender() { - RmeTraceBegin(("FrameS-SetMargin-rtg:" + to_string(m_rtg) + " margin:" + to_string(MARGIN_FIVE)).c_str()); - SetMargin(m_rtg, MARGIN_FIVE); + RmeTraceBegin(("FrameS-SetMargin-rtg:" + to_string(m_rtg) + " margin:" + to_string(MARGIN_MIDDLE)).c_str()); + SetMargin(m_rtg, MARGIN_MIDDLE); RmeTraceEnd(); } void RmeCoreSched::EndFlushRender() {} -void RmeCoreSched::BeginFlushRenderFinish() -{ - RmeTraceBegin(("FrameS-SetMargin-rtg:" + to_string(m_rtg) + " margin:" + to_string(MARGIN_SEVEN)).c_str()); - SetMargin(m_rtg, MARGIN_SEVEN); - RmeTraceEnd(); -} +void RmeCoreSched::BeginFlushRenderFinish() {} void RmeCoreSched::EndFlushRenderFinish() {} @@ -114,35 +112,43 @@ void RmeCoreSched::AnimateStart() RME_LOGW("[AnimateStart]: search rtg empty! Rtg:%{public}d, Pid:%{public}d", m_rtg, m_pid); return; } - m_renderTid = gettid(); - int ret = AddThreadToRtg(m_renderTid, m_rtg); - RmeTraceBegin(("FrameS-Add rtg:" + to_string(m_rtg) + " ret:" + to_string(ret)).c_str()); - RmeTraceEnd(); + if (!m_renderHasSend) { + m_renderTid = gettid(); + int ret = AddThreadToRtg(m_renderTid, m_rtg); + RmeTraceBegin(("FrameS-Add rtg:" + to_string(m_rtg) + " ret:" + to_string(ret)).c_str()); + m_renderHasSend = true; + RmeTraceEnd(); + } } void RmeCoreSched::RenderStart() { - RmeTraceBegin(("FrameS-SetMargin:" + to_string(m_rtg) + " margin:" + to_string(MARGIN_THREE)).c_str()); - SetMargin(m_rtg, MARGIN_THREE); + RmeTraceBegin(("FrameS-SetMargin-rtg:" + to_string(m_rtg) + " margin:" + to_string(MARGIN_END)).c_str()); + SetMargin(m_rtg, MARGIN_END); RmeTraceEnd(); } void RmeCoreSched::SendCommandsStart() { - RmeTraceBegin(("FrameS-SetMargin:" + to_string(m_rtg) + " margin:" + to_string(MARGIN_THREE)).c_str()); - SetMargin(m_rtg, MARGIN_THREE); + if (m_rtg <= 0) { + return; + } + RmeTraceBegin("SendCommandsStart-EndFreq"); + EndFrameFreq(m_rtg); RmeTraceEnd(); } -void RmeCoreSched::HandleEndFrame() +void RmeCoreSched::HandleEndScene() { RME_FUNCTION_TRACE(); if (m_rtg <= 0) { - RME_LOGW("[HandleEndFrame]: search rtg empty! rtGrp:%{public}d, m_pid:%{public}d!", + RME_LOGW("[HandleEndScene]: search rtg empty! rtGrp:%{public}d, m_pid:%{public}d!", m_rtg, m_pid); return; } - int ret = EndFrameFreq(m_rtg); + int ret = EndScene(m_rtg); + m_renderHasSend = false; + m_uiHasSend = false; RmeTraceBegin(("FrameS-EndFrameFreq-rtg:" + to_string(m_rtg) + " ret:" + to_string(ret)).c_str()); RmeTraceEnd(); } 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 ef8e27ba3835db84672720967d0acf70b8474a4e..6473a64c2ce88950164364945ba1dedf73b2c42d 100644 --- a/frameworks/core/frame_aware_collector/src/rme_scene_sched.cpp +++ b/frameworks/core/frame_aware_collector/src/rme_scene_sched.cpp @@ -42,11 +42,11 @@ bool RmeSceneSched::Init() return ret; } -void RmeSceneSched::HandleBeginFrame() +void RmeSceneSched::HandleBeginScene() { curWorkingStatus = 1; FrameWindowMgr::GetInstance().SetStartFlag(true); - rmeCoreSched->HandleBeginFrame(); + rmeCoreSched->HandleBeginScene(); RmeTraceBegin(("FrameS-curWorkingStatus" + std::to_string(curWorkingStatus)).c_str()); RmeTraceEnd(); } @@ -156,15 +156,13 @@ void RmeSceneSched::SendCommandsStart() } } -void RmeSceneSched::HandleEndFrame() +void RmeSceneSched::HandleEndScene() { + FrameWindowMgr::GetInstance().SetStartFlag(false); if (curWorkingStatus == 0) { return; } - rmeCoreSched->HandleEndFrame(); - if (FrameWindowMgr::GetInstance().GetStartFlag()) { - FrameWindowMgr::GetInstance().SetStartFlag(false); - } + rmeCoreSched->HandleEndScene(); curWorkingStatus = 0; RmeTraceBegin(("FrameS-curWorkingStatus" + std::to_string(curWorkingStatus)).c_str()); RmeTraceEnd(); diff --git a/frameworks/core/frame_aware_policy/src/rtg_msg_mgr.cpp b/frameworks/core/frame_aware_policy/src/rtg_msg_mgr.cpp index a961b94f6e8291f1731fbfede7e8db4344d2a567..9294efbcbca71655130b44feb1ef8c502038fa4a 100644 --- a/frameworks/core/frame_aware_policy/src/rtg_msg_mgr.cpp +++ b/frameworks/core/frame_aware_policy/src/rtg_msg_mgr.cpp @@ -20,7 +20,7 @@ namespace OHOS { namespace RME { namespace { constexpr int PRIO_TYPE = 0; - constexpr int RT_NUM = 0; + constexpr int RT_NUM = 4; constexpr int PID_PRIO_TYPE = 2; } DEFINE_RMELOG_INTELLISENSE("ueaServer-RtgMsgMgr"); diff --git a/interfaces/innerkits/frameintf/rtg_interface.cpp b/interfaces/innerkits/frameintf/rtg_interface.cpp index c2c524083cc80716bec0867933a84384c6d4d8c6..7b595d3d741c85c5b78265a73ed6b5974bb34311 100644 --- a/interfaces/innerkits/frameintf/rtg_interface.cpp +++ b/interfaces/innerkits/frameintf/rtg_interface.cpp @@ -67,7 +67,7 @@ const char RTG_SCHED_IPC_MAGIC = 0xAB; int BasicOpenRtgNode() { - char fileName[] = "/dev/sched_rtg_ctrl"; + char fileName[] = "/proc/self/sched_rtg_ctrl"; int fd = open(fileName, O_RDWR); if (fd < 0) { RME_LOGE("Open fail, errno = %{public}d(%{public}s), dev = %{public}s", errno, strerror(errno), fileName);