Apply CPU inheritance to aul window functions 50/317150/1
authorHwankyu Jhun <h.jhun@samsung.com>
Wed, 4 Sep 2024 22:39:42 +0000 (07:39 +0900)
committerHwankyu Jhun <h.jhun@samsung.com>
Wed, 4 Sep 2024 22:39:42 +0000 (07:39 +0900)
To improve IPC performance, this patch applies the CPU inheritance feature to
aul window codes.

Change-Id: I863d8ca4caafdcfd0b76046f1b902666eb1cd76f
Signed-off-by: Hwankyu Jhun <h.jhun@samsung.com>
src/aul/aul_window.cc
src/aul/cpu_inheritance.cc
src/aul/cpu_inheritance.hh

index 4b0f7209c6abff1dc0b5342490b097b21839c806..2bd470519d5a86049e0a71b5b5d51fcf7605f7d2 100644 (file)
@@ -29,6 +29,7 @@
 #include "aul/app_request.h"
 #include "aul/aul_api.h"
 #include "aul/aul_util.h"
+#include "aul/cpu_inheritance.hh"
 #include "aul/include/aul.h"
 #include "aul/include/aul_app_com.h"
 #include "aul/include/aul_cmd.h"
@@ -45,6 +46,7 @@ constexpr const char kWmInterfaceName[] = "org.enlightenment.wm.proc";
 constexpr const char kWmMethodNameInfo[] = "GetVisibleWinInfo";
 constexpr const char kWmMethodNameFocus[] = "GetFocusProc";
 constexpr const unsigned int kWmDbusTimeout = 5000;
+constexpr const char kDestProcess[] = "enlightenment";
 
 GDBusConnection* system_conn;
 
@@ -227,6 +229,7 @@ extern "C" API int aul_window_stack_get(aul_window_stack_h* handle) {
     return AUL_R_EINVAL;
   }
 
+  CPUInheritance inheritance(kDestProcess);
   GDBusConnection* conn = GetConn();
   if (conn == nullptr)
     return AUL_R_ERROR;
@@ -471,6 +474,7 @@ extern "C" API int aul_window_get_focused_pid(pid_t* pid) {
     return AUL_R_EINVAL;
   }
 
+  CPUInheritance inheritance(kDestProcess);
   GDBusConnection* conn = GetConn();
   if (conn == nullptr)
     return AUL_R_ERROR;
index 1a7b6b24e3d7d645263ae6172dea3d4fadb9c1e0..15723923b87213954c39011a8e15455cd203064a 100644 (file)
@@ -29,10 +29,19 @@ constexpr const char DEST_PROCESS[] = "amd";
 
 }  // namespace
 
-CPUInheritance::CPUInheritance(pid_t pid, int cmd) {
+CPUInheritance::CPUInheritance(std::string destination)
+    : destination_(std::move(destination)) {
+  int ret = resource_set_cpu_inheritance(gettid(), destination_.c_str(), -1);
+  if (ret != 0)
+    _E("resource_set_cpu_inheritance() is failed. error(%d)", ret);
+  else
+    inherited_ = true;
+}
+
+CPUInheritance::CPUInheritance(pid_t pid, int cmd)
+    : destination_(DEST_PROCESS) {
   if (pid == -2 && IsLaunchRequest(cmd)) {
-    int ret = resource_set_cpu_inheritance(gettid(),
-        const_cast<char*>(DEST_PROCESS), -1);
+    int ret = resource_set_cpu_inheritance(gettid(), destination_.c_str(), -1);
     if (ret != 0)
       _E("resource_set_cpu_inheritance() is failed. error(%d)", ret);
     else
@@ -40,9 +49,8 @@ CPUInheritance::CPUInheritance(pid_t pid, int cmd) {
   }
 }
 
-CPUInheritance::CPUInheritance() {
-  int ret = resource_set_cpu_inheritance(gettid(),
-      const_cast<char*>(DEST_PROCESS), -1);
+CPUInheritance::CPUInheritance() : destination_(DEST_PROCESS) {
+  int ret = resource_set_cpu_inheritance(gettid(), destination_.c_str(), -1);
   if (ret != 0)
     _E("resource_set_cpu_inheritance() is failed. error(%d)", ret);
   else
@@ -51,8 +59,7 @@ CPUInheritance::CPUInheritance() {
 
 CPUInheritance::~CPUInheritance() {
   if (inherited_) {
-    int ret = resource_clear_cpu_inheritance(gettid(),
-        const_cast<char*>(DEST_PROCESS));
+    int ret = resource_clear_cpu_inheritance(gettid(), destination_.c_str());
     if (ret != 0)
       _E("resource_clear_cpu_inheritance() is failed. error(%d)", ret);
   }
index e25c8c7b8337d536eafc41a019166221cc214fe0..4085927a2b688d8e46268612b2d34859fed53741 100644 (file)
 
 #include <sys/types.h>
 
+#include <string>
+
 namespace aul {
 namespace internal {
 
 class CPUInheritance {
  public:
+  explicit CPUInheritance(std::string destination);
   CPUInheritance(pid_t pid, int cmd);
   CPUInheritance();
   ~CPUInheritance();
@@ -32,6 +35,7 @@ class CPUInheritance {
   static bool IsLaunchRequest(int cmd);
 
  private:
+  std::string destination_;
   bool inherited_ = false;
 };