diff --git a/rosen/modules/frame_report/include/rs_frame_report.h b/rosen/modules/frame_report/include/rs_frame_report.h index e474b621347ebbccb6edbb8a2f204abc8ad5728d..2c966bfd459025e5aee993d3bd778e8049223058 100644 --- a/rosen/modules/frame_report/include/rs_frame_report.h +++ b/rosen/modules/frame_report/include/rs_frame_report.h @@ -25,8 +25,10 @@ using InitFunc = void (*)(); using ProcessCommandsStartFunc = void(*)(); using AnimateStartFunc = void(*)(); using RenderStartFunc = void(*)(uint64_t); +using ParallelRenderStartFunc = void(*)(); using RenderEndFunc = void(*)(); using SendCommandsStartFunc = void(*)(); +using ParallelRenderEndFunc = void(*)(); using SetFrameParamFunc = void(*)(int, int, int, int); class RsFrameReport final { public: @@ -37,7 +39,9 @@ public: void ProcessCommandsStart(); void AnimateStart(); void RenderStart(uint64_t timestamp); + void RSRenderStart(); void RenderEnd(); + void RSRenderEnd(); void SendCommandsStart(); void SetFrameParam(int requestId, int load, int schedFrameNum, int value); @@ -55,7 +59,9 @@ private: ProcessCommandsStartFunc processCommandsStartFun_ = nullptr; AnimateStartFunc animateStartFunc_ = nullptr; RenderStartFunc renderStartFunc_ = nullptr; + ParallelRenderStartFunc parallelRenderStartFunc_ = nullptr; RenderEndFunc renderEndFunc_ = nullptr; + ParallelRenderEndFunc parallelRenderEndFunc_ = nullptr; SendCommandsStartFunc sendCommandsStartFunc_ = nullptr; SetFrameParamFunc setFrameParamFunc_ = nullptr; }; diff --git a/rosen/modules/frame_report/src/rs_frame_report.cpp b/rosen/modules/frame_report/src/rs_frame_report.cpp index c4f1630b647031deb71982a2e4bd89fcd7512f68..adb0f2a7849038a1f0528c81a56a3d6b469d597d 100644 --- a/rosen/modules/frame_report/src/rs_frame_report.cpp +++ b/rosen/modules/frame_report/src/rs_frame_report.cpp @@ -159,6 +159,18 @@ void RsFrameReport::RenderStart(uint64_t timestamp) } } +void RsFrameReport::RSRenderStart() +{ + if (parallelRenderStartFunc_ == nullptr) { + parallelRenderStartFunc_ = reinterpret_cast(LoadSymbol("RSRenderStart")); + } + if (parallelRenderStartFunc_ != nullptr) { + parallelRenderStartFunc_(); + } else { + LOGE("RsFrameReport:[RSRenderStart]load RSRenderStart function failed!"); + } +} + void RsFrameReport::RenderEnd() { if (renderEndFunc_ == nullptr) { @@ -172,6 +184,18 @@ void RsFrameReport::RenderEnd() } } +void RsFrameReport::RSRenderEnd() +{ + if (parallelRenderEndFunc_ == nullptr) { + parallelRenderEndFunc_ = reinterpret_cast(LoadSymbol("RSRenderEnd")); + } + if (parallelRenderEndFunc_ != nullptr) { + parallelRenderEndFunc_(); + } else { + LOGE("RsFrameReport:[RSRenderEnd]load RSRenderEnd function failed!"); + } +} + void RsFrameReport::SendCommandsStart() { if (sendCommandsStartFunc_ == nullptr) { diff --git a/rosen/modules/render_service/core/pipeline/rs_draw_frame.cpp b/rosen/modules/render_service/core/pipeline/rs_draw_frame.cpp index 66029a321dae6e72aea269588fadf2f782bce0ae..136db0cf14d71db3efc041da05d7b8c6e408512e 100644 --- a/rosen/modules/render_service/core/pipeline/rs_draw_frame.cpp +++ b/rosen/modules/render_service/core/pipeline/rs_draw_frame.cpp @@ -21,6 +21,7 @@ #include "pipeline/rs_uifirst_manager.h" #include "pipeline/rs_uni_render_thread.h" #include "property/rs_filter_cache_manager.h" +#include "rs_frame_report.h" namespace OHOS { namespace Rosen { @@ -38,6 +39,9 @@ void RSDrawFrame::SetRenderThreadParams(std::unique_ptr& s void RSDrawFrame::RenderFrame() { RS_TRACE_NAME_FMT("RenderFrame"); + if (RsFrameReport::GetInstance().GetEnable()) { + RsFrameReport::GetInstance().RSRenderStart(); + } JankStatsRenderFrameStart(); RSUifirstManager::Instance().ProcessSubDoneNode(); Sync(); @@ -48,6 +52,9 @@ void RSDrawFrame::RenderFrame() Render(); ReleaseSelfDrawingNodeBuffer(); NotifyClearGpuCache(); + if (RsFrameReport::GetInstance().GetEnable()) { + RsFrameReport::GetInstance().RSRenderEnd(); + } JankStatsRenderFrameEnd(doJankStats); }