diff --git a/common/include/rtg_interface.h b/common/include/rtg_interface.h index 71c472b63e2f95f28ccbca7893fb9cf9d483dcbf..1f88c90720bed2566b5257b056e3e003be81ed60 100644 --- a/common/include/rtg_interface.h +++ b/common/include/rtg_interface.h @@ -49,7 +49,9 @@ enum grp_ctrl_cmd { CMD_ADD_RTG_THREAD, CMD_REMOVE_RTG_THREAD, CMD_CLEAR_RTG_GRP, - CMD_DESTROY_RTG_GRP + CMD_DESTROY_RTG_GRP, + CMD_ADD_SELF_RENDER_RTG_THREAD, + CMD_REMOVE_SELF_RENDER_RTG_THREAD, }; struct rtg_grp_data { @@ -86,9 +88,10 @@ enum rtg_sched_cmdid { extern "C" { int EnableRtg(bool flag); - int AddThreadToRtg(int tid, int grpId, int prioType = 0); - int AddThreadsToRtg(vector tids, int grpId, int prioType = 0); - int RemoveRtgThread(int tid); + int AddThreadToRtg(int tid, int grpId, int prioType = 0, bool isSelfRender = false); + int AddThreadsToRtg(vector tids, int grpId, int prioType = 0, bool isSelfRender = false); + int RemoveRtgThread(int tid, bool isSelfRender = false); + int RemoveRtgThreads(vector tids, bool isSelfRender = false); int DestroyRtgGrp(int grpId); int SetFrameRateAndPrioType(int rtgId, int rate, int rtgType); int BeginFrameFreq(int stateParam); diff --git a/interfaces/innerkits/frameintf/BUILD.gn b/interfaces/innerkits/frameintf/BUILD.gn index 4fab553dc9a5c90462e841aa2c7be1f0606c15c0..7d3e688d274c4c06d51e51d20a41c2a9aef5366d 100644 --- a/interfaces/innerkits/frameintf/BUILD.gn +++ b/interfaces/innerkits/frameintf/BUILD.gn @@ -86,7 +86,6 @@ ohos_shared_library("frame_ui_intf") { "hitrace:hitrace_meter", ] - innerapi_tags = [ "platformsdk" ] subsystem_name = "resourceschedule" part_name = "frame_aware_sched" } diff --git a/interfaces/innerkits/frameintf/rtg_interface.cpp b/interfaces/innerkits/frameintf/rtg_interface.cpp index 804183e8e890e05ad71513526533d565674e1afd..0cbfef321a18a3789faa137ba69c7198771a9708 100644 --- a/interfaces/innerkits/frameintf/rtg_interface.cpp +++ b/interfaces/innerkits/frameintf/rtg_interface.cpp @@ -108,7 +108,7 @@ int EnableRtg(bool flag) return 0; }; -int AddThreadToRtg(int tid, int grpId, int prioType) +int AddThreadToRtg(int tid, int grpId, int prioType, bool isSelfRender) { if (g_fd < 0) { return g_fd; @@ -119,8 +119,13 @@ int AddThreadToRtg(int tid, int grpId, int prioType) grp_data.tid_num = 1; grp_data.tids[0] = tid; grp_data.grp_id = grpId; - grp_data.rtg_cmd = CMD_ADD_RTG_THREAD; + grp_data.prio_type = prioType; + if (isSelfRender) { + grp_data.rtg_cmd = CMD_ADD_SELF_RENDER_RTG_THREAD; + } else { + grp_data.rtg_cmd = CMD_ADD_RTG_THREAD; + } ret = ioctl(g_fd, CMD_ID_SET_RTG, &grp_data); if (ret != 0) { RME_LOGE("add thread to rtg failed, grpId = %{public}d, ret = %{public}d, errno = %{public}d (%{public}s)", @@ -134,7 +139,7 @@ int AddThreadToRtg(int tid, int grpId, int prioType) return ret; } -int AddThreadsToRtg(vector tids, int grpId, int prioType) +int AddThreadsToRtg(vector tids, int grpId, int prioType, bool isSelfRender) { struct rtg_grp_data grp_data; int ret; @@ -148,8 +153,13 @@ int AddThreadsToRtg(vector tids, int grpId, int prioType) } grp_data.tid_num = num; grp_data.grp_id = grpId; - grp_data.rtg_cmd = CMD_ADD_RTG_THREAD; + grp_data.prio_type = prioType; + if (isSelfRender) { + grp_data.rtg_cmd = CMD_ADD_SELF_RENDER_RTG_THREAD; + } else { + grp_data.rtg_cmd = CMD_ADD_RTG_THREAD; + } for (int i = 0; i < num; i++) { if (tids[i] < 0) { return -1; @@ -169,7 +179,7 @@ int AddThreadsToRtg(vector tids, int grpId, int prioType) return ret; }; -int RemoveRtgThread(int tid) +int RemoveRtgThread(int tid, isSelfRender) { if (g_fd < 0) { return g_fd; @@ -179,7 +189,11 @@ int RemoveRtgThread(int tid) (void)memset_s(&grp_data, sizeof(struct rtg_grp_data), 0, sizeof(struct rtg_grp_data)); grp_data.tid_num = 1; grp_data.tids[0] = tid; - grp_data.rtg_cmd = CMD_REMOVE_RTG_THREAD; + if (isSelfRender) { + grp_data.rtg_cmd = CMD_REMOVE_SELF_RENDER_RTG_THREAD; + } else { + grp_data.rtg_cmd = CMD_REMOVE_RTG_THREAD; + } ret = ioctl(g_fd, CMD_ID_SET_RTG, &grp_data); if (ret != 0) { RME_LOGE("remove grp failed, ret = %{public}d, errno = %{public}d (%{public}s)", ret, errno, strerror(errno)); @@ -189,6 +203,39 @@ int RemoveRtgThread(int tid) return ret; }; +int RemoveRtgThreads(vector tids, bool isSelfRender) +{ + struct rtg_grp_data grp_data; + int ret; + if (g_fd < 0) { + return g_fd; + } + (void)memset_s(&grp_data, sizeof(struct rtg_grp_data), 0, sizeof(struct rtg_grp_data)); + int num = static_cast(tids.size()); + if (num > MAX_TID_NUM) { + return -1; + } + grp_data.tid_num = num; + if (isSelfRender) { + grp_data.rtg_cmd = CMD_REMOVE_SELF_RENDER_RTG_THREAD; + } else { + grp_data.rtg_cmd = CMD_REMOVE_RTG_THREAD; + } + for (int i = 0; i < num; i++) { + if (tids[i] < 0) { + return -1; + } + grp_data.tids[i] = tids[i]; + } + ret = ioctl(g_fd, CMD_ID_SET_RTG, &grp_data); + if (ret < 0) { + RME_LOGE("remove grp threads failed, errno = %{public}d (%{public}s)", errno, strerror(errno)); + } else { + RME_LOGI("remove grp threads success, get rtg id %{public}d.", ret); + } + return ret; +} + int DestroyRtgGrp(int grpId) { if (g_fd < 0) {