From bfc1ad1ac148734ad92d9b4599db838f828bf32c Mon Sep 17 00:00:00 2001 From: Brian Date: Wed, 24 Jan 2024 14:58:56 +0800 Subject: [PATCH] add skia to rtg Signed-off-by: Brian --- .../include/concurrent_task_type.h | 1 + services/include/concurrent_task_controller.h | 3 ++ services/src/concurrent_task_controller.cpp | 28 +++++++++++++++++++ 3 files changed, 32 insertions(+) diff --git a/frameworks/concurrent_task_client/include/concurrent_task_type.h b/frameworks/concurrent_task_client/include/concurrent_task_type.h index 504aa6e..10c0c18 100644 --- a/frameworks/concurrent_task_client/include/concurrent_task_type.h +++ b/frameworks/concurrent_task_client/include/concurrent_task_type.h @@ -48,6 +48,7 @@ enum QueryIntervalItem { QUERY_RENDER_SERVICE = 2, QUERY_COMPOSER = 3, QUERY_HARDWARE = 4, + QUERY_EXECUTOR_START = 5, QURRY_TYPE_MAX }; diff --git a/services/include/concurrent_task_controller.h b/services/include/concurrent_task_controller.h index 44ebdfa..9b5f5e8 100644 --- a/services/include/concurrent_task_controller.h +++ b/services/include/concurrent_task_controller.h @@ -53,6 +53,7 @@ private: void QueryRender(pid_t uid, IntervalReply& queryRs); void QueryRenderService(pid_t uid, pid_t pid, IntervalReply& queryRs); void QueryHardware(pid_t uid, pid_t pid, IntervalReply& queryRs); + void QueryExecutorStart(pid_t uid, pid_t pid, IntervalReply& queryRs); void QueryHwc(pid_t uid, IntervalReply& queryRs); int GetRequestType(std::string strRequstType); void DealSystemRequest(int requestType, const Json::Value& payload); @@ -80,6 +81,7 @@ private: std::mutex appInfoLock_; std::mutex rateInfoLock_; + std::mutex executorStartLock_; std::list foregroundApp_ = {}; std::unordered_map msgType_ = {}; QosPolicy qosPolicy_; @@ -92,6 +94,7 @@ private: bool rtgEnabled_ = false; bool rsAuthed_ = false; std::atomic curGamePid_ = -1; + int executorNum_ = 0; const std::string RENDER_SERVICE_PROCESS_NAME = "render_service"; const std::string RESOURCE_SCHEDULE_PROCESS_NAME = "resource_schedule_service"; diff --git a/services/src/concurrent_task_controller.cpp b/services/src/concurrent_task_controller.cpp index cafd794..1aabe3a 100644 --- a/services/src/concurrent_task_controller.cpp +++ b/services/src/concurrent_task_controller.cpp @@ -42,6 +42,7 @@ namespace { const char RTG_SCHED_IPC_MAGIC = 0xAB; constexpr int RTG_TYPE_MAX = 3; constexpr int RS_UID = 1003; + constexpr int EXECUTOR_LIMIT_NUM = 3; } #define CMD_ID_SET_RTG \ @@ -110,6 +111,9 @@ void TaskController::QueryInterval(int queryItem, IntervalReply& queryRs) case QUERY_HARDWARE: QueryHardware(uid, pid, queryRs); break; + case QUERY_EXECUTOR_START: + QueryExecutorStart(uid, pid, queryRs); + break; default: break; } @@ -207,6 +211,30 @@ void TaskController::QueryHardware(int uid, int pid, IntervalReply& queryRs) queryRs.tid = hardwareGrpId_; } +void TaskController::QueryExecutorStart(int uid, int pid, IntervalReply& queryRs) +{ + if (uid != RS_UID) { + return; + } + if (renderServiceGrpId_ < 0) { + return; + } + std::lock_guard lock(executorStartLock_); + if (executorNum_ >= EXECUTOR_LIMIT_NUM) { + return; + } + if (queryRs.tid <= 0) { + return; + } + int ret = AddThreadToRtg(queryRs.tid, renderServiceGrpId_, PRIO_RT); + if (ret < 0) { + CONCUR_LOGE("uid %{public}d tid %{public}d join executor group failed.", uid, rsTid_); + return; + } + executorNum_++; + queryRs.rtgId = renderServiceGrpId_; +} + void TaskController::QueryHwc(int uid, IntervalReply& queryRs) { pid_t pid = IPCSkeleton::GetInstance().GetCallingPid(); -- Gitee