e_client: reduce the number of IPCs for cloning data 65/318065/1
authorJihoon Kim <jihoon48.kim@samsung.com>
Fri, 13 Sep 2024 05:25:02 +0000 (14:25 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Tue, 24 Sep 2024 06:53:31 +0000 (15:53 +0900)
Change-Id: I386fb93a30219114c7e33080ce9772f498938ac5
Signed-off-by: Jihoon Kim <jihoon48.kim@samsung.com>
src/bin/core/e_client.c

index c6f2261..6691ff8 100644 (file)
@@ -2816,6 +2816,8 @@ _e_client_transform_core_boundary_update(E_Client *ec, E_Util_Transform_Rect_Ver
    int maxx = -99999, maxy = -99999;
    int x, y;
    int i;
+   int w, h;
+   Eina_Bool geometry_change = EINA_FALSE;
 
    if (!ec) return;
    if (!ec->frame) return;
@@ -2835,10 +2837,18 @@ _e_client_transform_core_boundary_update(E_Client *ec, E_Util_Transform_Rect_Ver
         if (y > maxy) maxy = y;
      }
 
+   w = maxx - minx;
+   h = maxy - miny;
+
+   geometry_change = ec->transform_core.result.boundary.x != minx ||
+                     ec->transform_core.result.boundary.y != miny ||
+                     ec->transform_core.result.boundary.w != w ||
+                     ec->transform_core.result.boundary.h != h;
+
    ec->transform_core.result.boundary.x = minx;
    ec->transform_core.result.boundary.y = miny;
-   ec->transform_core.result.boundary.w = maxx - minx;
-   ec->transform_core.result.boundary.h = maxy - miny;
+   ec->transform_core.result.boundary.w = w;
+   ec->transform_core.result.boundary.h = h;
 
    ELOGF("COMP", "[Transform][boundary][%d %d %d %d]",
          ec,
@@ -2847,7 +2857,7 @@ _e_client_transform_core_boundary_update(E_Client *ec, E_Util_Transform_Rect_Ver
          ec->transform_core.result.boundary.w,
          ec->transform_core.result.boundary.h);
 
-   if (e_input_thread_check_client_cloning_needed())
+   if (geometry_change && e_input_thread_check_client_cloning_needed())
      {
         E_Input_Thread_Request_EClient_Data ec_data;
         memset(&ec_data, 0, sizeof(E_Input_Thread_Request_EClient_Data));
@@ -5351,11 +5361,13 @@ e_client_transform_core_update(E_Client *ec)
         Eina_List *l;
         Eina_Bool background;
         E_Util_Transform *temp_trans;
+        Eina_Bool change = EINA_FALSE;
 
         // 1. init state
+        change = ec->transform_core.result.enable != EINA_TRUE;
         ec->transform_core.result.enable = EINA_TRUE;
 
-        if (e_input_thread_check_client_cloning_needed())
+        if (change && e_input_thread_check_client_cloning_needed())
           _e_input_thread_client_transform_core_state_set(ec, EINA_TRUE);
 
         e_util_transform_rect_client_rect_get(&source_rect, ec);
@@ -5480,6 +5492,7 @@ e_client_transform_core_update(E_Client *ec)
         if (ec->transform_core.result.enable)
           {
              ec->transform_core.result.enable = EINA_FALSE;
+
              if (e_input_thread_check_client_cloning_needed())
                _e_input_thread_client_transform_core_state_set(ec, EINA_FALSE);