From 4e6b2a2acdebcf7c15d382f7270d151ed9eb913a Mon Sep 17 00:00:00 2001 From: mengyiping <1091773127@qq.com> Date: Mon, 30 Oct 2023 11:27:04 +0800 Subject: [PATCH] bugfix Signed-off-by: mengyiping <1091773127@qq.com> --- services/include/concurrent_task_controller.h | 1 + services/src/concurrent_task_controller.cpp | 53 ++++++++++++++++--- 2 files changed, 46 insertions(+), 8 deletions(-) diff --git a/services/include/concurrent_task_controller.h b/services/include/concurrent_task_controller.h index 837a0d3..f50d8f9 100644 --- a/services/include/concurrent_task_controller.h +++ b/services/include/concurrent_task_controller.h @@ -39,6 +39,7 @@ public: void QueryDeadline(int queryItem, DeadlineReply& ddlReply, const Json::Value& payload); void Init(); void Release(); + int CreateNewRtgGrp(int prioType, int rtNum); private: bool CheckUid(pid_t uid); diff --git a/services/src/concurrent_task_controller.cpp b/services/src/concurrent_task_controller.cpp index 5d56ab4..9d82fcf 100644 --- a/services/src/concurrent_task_controller.cpp +++ b/services/src/concurrent_task_controller.cpp @@ -13,14 +13,16 @@ * limitations under the License. */ -#include -#include +#include +#include +#include #include -#include +#include #include + +#include "concurrent_task_log.h" #include "rtg_interface.h" #include "ipc_skeleton.h" -#include "concurrent_task_log.h" #include "parameters.h" #include "concurrent_task_controller.h" @@ -29,9 +31,16 @@ using namespace OHOS::RME; namespace OHOS { namespace ConcurrentTask { -const std::string INTERVAL_DDL = "ffrt.interval.renderthread"; -constexpr int CURRENT_RATE = 90; -constexpr int PARAM_TYPE = 1; +namespace { + const std::string INTERVAL_DDL = "ffrt.interval.renderthread"; + constexpr int CURRENT_RATE = 90; + constexpr int PARAM_TYPE = 1; + const char RTG_SCHED_IPC_MAGIC = 0xAB; + constexpr int RTG_TYPE_MAX = 3; +} + +#define CMD_ID_SET_RTG \ + _IOWR(RTG_SCHED_IPC_MAGIC, SET_RTG, struct rtg_str_data) TaskController& TaskController::GetInstance() { @@ -556,12 +565,40 @@ void TaskController::PrintInfo() } } +int TaskController::CreateNewRtgGrp(int prioType, int rtNum) +{ + struct rtg_grp_data grp_data; + int ret; + char fileName[] = "/proc/self/sched_rtg_ctrl"; + int fd = open(fileName, O_RDWR); + if (fd < 0) { + CONCUR_LOGE("Open file /proc/self/sched_rth_ctrl, errno = %{public}d", errno); + return fd; + } + (void)memset_s(&grp_data, sizeof(struct rtg_grp_data), 0, sizeof(struct rtg_grp_data)); + if ((prioType > 0) && (prioType < RTG_TYPE_MAX)) { + grp_data.prio_type = prioType; + } + if (rtNum > 0) { + grp_data.rt_cnt = rtNum; + } + grp_data.rtg_cmd = CMD_CREATE_RTG_GRP; + ret = ioctl(fd, CMD_ID_SET_RTG, &grp_data); + if (ret < 0) { + CONCUR_LOGE("create rtg grp failed, errno = %{public}d (%{public}s)", errno, strerror(errno)); + } else { + CONCUR_LOGI("create rtg grp success, get rtg id %{public}d.", ret); + } + close(fd); + return ret; +} + ForegroundAppRecord::ForegroundAppRecord(int uid, int uiTid) { uid_ = uid; uiTid_ = uiTid; if (OHOS::system::GetBoolParameter(INTERVAL_DDL, false)) { - grpId_ = CreateNewRtgGrp(PRIO_RT, MAX_KEY_THREADS); + grpId_ = TaskController::GetInstance().CreateNewRtgGrp(PRIO_RT, MAX_KEY_THREADS); } else { grpId_ = -1; } -- Gitee