e_comp_wl: Deprecate input of E_Comp_Wl_Surface_State 94/315794/1
authorSeunghun Lee <shiin.lee@samsung.com>
Thu, 22 Aug 2024 03:29:47 +0000 (12:29 +0900)
committerSeunghun Lee <shiin@samsung.com>
Wed, 4 Dec 2024 23:45:31 +0000 (08:45 +0900)
Change-Id: I2d407909dba10d5ce4b965062a7160fb24452532

src/bin/server/e_comp_wl.c
src/bin/server/e_comp_wl_intern.h
src/bin/server/e_compositor.c
src/include/e_comp_wl.h

index 449d7c57b535fca4b5c459fdc9ac7999b2888c53..2ef1e29dedff2cd5e8951276824064b2227c402d 100644 (file)
@@ -2723,9 +2723,6 @@ _e_comp_wl_surface_state_init(E_Comp_Wl_Surface_State *state, int w, int h)
      _e_comp_wl_surface_state_cb_buffer_destroy;
    state->sx = state->sy = 0;
 
-   state->input = eina_tiler_new(w, h);
-   eina_tiler_tile_size_set(state->input, 1, 1);
-
    state->buffer_viewport.buffer.transform = WL_OUTPUT_TRANSFORM_NORMAL;
    state->buffer_viewport.buffer.scale = 1;
    state->buffer_viewport.buffer.src_width = wl_fixed_from_int(-1);
@@ -2743,9 +2740,6 @@ _e_comp_wl_surface_state_finish(E_Comp_Wl_Surface_State *state)
    EINA_LIST_FREE(state->frames, cb)
      wl_resource_destroy(cb);
 
-   if (state->input) eina_tiler_free(state->input);
-   state->input = NULL;
-
    if (state->buffer) wl_list_remove(&state->buffer_destroy_listener.link);
    state->buffer = NULL;
 
@@ -2943,6 +2937,89 @@ _e_comp_wl_client_pixmap_opaque_region_update(E_Client *ec, int buffer_width, in
    pixman_region32_fini(&region);
 }
 
+static void
+_e_comp_wl_client_input_region_update(E_Client *ec)
+{
+   E_Surface *surface = e_surface_from_ec(ec);
+   pixman_region32_t *input_region = e_surface_input_region_get(surface);
+   pixman_region32_t region;
+   pixman_box32_t *rects;
+   int nrects, i;
+   int x, y, w, h;
+   int sw = ec->w;
+   int sh = ec->h;
+
+   if (!input_region || !pixman_region32_not_empty(input_region) || !ec->first_mapped)
+     return;
+
+   pixman_region32_init(&region);
+
+   pixman_region32_intersect_rect(&region, input_region, 0, 0, sw, sh);
+   if (pixman_region32_not_empty(&region))
+     {
+        E_Input_Thread_Request_EClient_Data ec_data;
+        memset(&ec_data, 0, sizeof(E_Input_Thread_Request_EClient_Data));
+
+        e_view_client_input_objs_del(e_client_view_get(ec));
+        if (e_input_thread_check_client_cloning_needed())
+          {
+             ec_data.ec = ec;
+             INF("[%s] ec(%p)\n", __func__, ec);
+             e_input_backend_thread_safe_call(_e_comp_wl_input_thread_input_area_clear, &ec_data, sizeof(E_Input_Thread_Request_EClient_Data));
+          }
+
+        rects = pixman_region32_rectangles(&region, &nrects);
+        for (i = 0; i < nrects; i++)
+          {
+             x = rects[i].x1;
+             y = rects[i].y1;
+             w = rects[i].x2 - x;
+             h = rects[i].y2 - y;
+
+             ELOGF("COMP", "Set Input Area x:%d, y:%d, w:%d, h:%d, ec(%dx%d)",
+                   ec, x, y, w, h, sw, sh);
+             e_view_client_input_area_set(e_client_view_get(ec), x, y, w, h);
+
+             if (e_input_thread_check_client_cloning_needed())
+               {
+                 Eina_Rectangle *input_rect;
+                 input_rect = eina_rectangle_new(x, y, w, h);
+
+                 if (input_rect)
+                   {
+                      ec_data.rect = input_rect;
+                      INF("[%s] ec(%p), x(%d), y(%d), w(%d), h(%d)\n", __func__, ec, EINA_RECTANGLE_ARGS(input_rect));
+                      e_input_backend_thread_safe_call(_e_comp_wl_input_thread_input_area_append, &ec_data, sizeof(E_Input_Thread_Request_EClient_Data));
+                   }
+               }
+          }
+     }
+   else
+     {
+        e_view_client_input_area_set(e_client_view_get(ec), 0, 0, sw, sh);
+
+        if (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));
+
+             Eina_Rectangle *input_rect;
+             input_rect = eina_rectangle_new(0, 0, sw, sh);
+
+            if (input_rect)
+              {
+                 ec_data.ec = ec;
+                 ec_data.rect = input_rect;
+
+                 INF("[%s] ec(%p), x(0), y(0), w(%d), h(%d)\n", __func__, ec, sw, sh);
+                 e_input_backend_thread_safe_call(_e_comp_wl_input_thread_input_area_append, &ec_data, sizeof(E_Input_Thread_Request_EClient_Data));
+              }
+          }
+     }
+
+   pixman_region32_fini(&region);
+}
+
 static void
 _e_comp_wl_surface_state_commit(E_Client *ec, E_Comp_Wl_Surface_State *state)
 {
@@ -3134,92 +3211,7 @@ _e_comp_wl_surface_state_commit(E_Client *ec, E_Comp_Wl_Surface_State *state)
      _e_comp_wl_surface_damage_update(ec);
 
    _e_comp_wl_client_pixmap_opaque_region_update(ec, state->bw, state->bh);
-
-   /* put state input into surface */
-   if ((state->input) &&
-       (!eina_tiler_empty(state->input)) &&
-       ec->first_mapped)
-     {
-        Eina_Tiler *src, *tmp;
-        int sw = ec->w;
-        int sh = ec->h;
-
-        tmp = eina_tiler_new(sw, sh);
-        eina_tiler_tile_size_set(tmp, 1, 1);
-
-        eina_tiler_rect_add(tmp,
-                            &(Eina_Rectangle){0, 0, sw, sh});
-
-        if ((src = eina_tiler_intersection(state->input, tmp)))
-          {
-             Eina_Rectangle *rect;
-             Eina_Iterator *itr;
-             E_Input_Thread_Request_EClient_Data ec_data;
-             memset(&ec_data, 0, sizeof(E_Input_Thread_Request_EClient_Data));
-
-             e_view_client_input_objs_del(e_client_view_get(ec));
-             if (e_input_thread_check_client_cloning_needed())
-               {
-                  ec_data.ec = ec;
-                  ICINF("[%s] ec(%p)\n", __func__, ec);
-                  e_input_backend_thread_safe_call(_e_comp_wl_input_thread_input_area_clear, &ec_data, sizeof(E_Input_Thread_Request_EClient_Data));
-               }
-
-             itr = eina_tiler_iterator_new(src);
-             EINA_ITERATOR_FOREACH(itr, rect)
-               {
-                  ELOGF("COMP", "Set Input Area x:%d, y:%d, w:%d, h:%d, ec(%dx%d), state(%dx%d)",
-                        ec, rect->x, rect->y, rect->w, rect->h,
-                        ec->w, ec->h, state->bw, state->bh);
-                  e_view_client_input_area_set(e_client_view_get(ec),
-                                               rect->x, rect->y,
-                                               rect->w, rect->h);
-
-                  if (e_input_thread_check_client_cloning_needed())
-                    {
-                       Eina_Rectangle *input_rect;
-                       input_rect = eina_rectangle_new(rect->x, rect->y, rect->w, rect->h);
-
-                       if (input_rect)
-                         {
-                            ec_data.rect = input_rect;
-                            ICINF("[%s] ec(%p), x(%d), y(%d), w(%d), h(%d)\n", __func__, ec, EINA_RECTANGLE_ARGS(rect));
-                            e_input_backend_thread_safe_call(_e_comp_wl_input_thread_input_area_append, &ec_data, sizeof(E_Input_Thread_Request_EClient_Data));
-                         }
-                    }
-               }
-
-             eina_iterator_free(itr);
-             eina_tiler_free(src);
-          }
-        else
-          {
-             e_view_client_input_area_set(e_client_view_get(ec), 0, 0, ec->w, ec->h);
-
-             if (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));
-
-                  Eina_Rectangle *input_rect;
-                  input_rect = eina_rectangle_new(0, 0, ec->w, ec->h);
-
-                  if (input_rect)
-                    {
-                       ec_data.ec = ec;
-                       ec_data.rect = input_rect;
-
-                       ICINF("[%s] ec(%p), x(0), y(0), w(%d), h(%d)\n", __func__, ec, ec->w, ec->h);
-                       e_input_backend_thread_safe_call(_e_comp_wl_input_thread_input_area_append, &ec_data, sizeof(E_Input_Thread_Request_EClient_Data));
-                    }
-               }
-          }
-
-        eina_tiler_free(tmp);
-
-        /* clear input tiler */
-        eina_tiler_clear(state->input);
-     }
+   _e_comp_wl_client_input_region_update(ec);
 
    e_comp_wl_subsurface_check_alpha_mask_rect(ec);
 
@@ -6439,45 +6431,32 @@ e_comp_wl_client_opaque_region_set(E_Client *ec, pixman_region32_t *region)
 }
 
 EINTERN void
-e_comp_wl_client_surface_pending_input_region_set(E_Client *ec, Eina_Tiler *region)
+e_comp_wl_client_input_region_set(E_Client *ec, pixman_region32_t *region)
 {
-   if (ec->comp_data->pending.input)
-     eina_tiler_clear(ec->comp_data->pending.input);
+   if (pixman_region32_not_empty(region))
+     return;
 
-   if (region)
-     {
-        if (eina_tiler_empty(region))
-          {
-             ELOGF("COMP", "         |unset input rect", NULL);
-             e_view_client_input_objs_del(e_client_view_get(ec));
-             e_view_client_input_area_set(e_client_view_get(ec), -1, -1, 1, 1);
+   ELOGF("COMP", "         |unset input rect", NULL);
+   e_view_client_input_objs_del(e_client_view_get(ec));
+   e_view_client_input_area_set(e_client_view_get(ec), -1, -1, 1, 1);
 
-             if (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));
+   if (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));
 
-                  Eina_Rectangle *input_rect;
-                  input_rect = eina_rectangle_new(-1, -1, 1, 1);
+        Eina_Rectangle *input_rect;
+        input_rect = eina_rectangle_new(-1, -1, 1, 1);
 
-                  if (input_rect)
-                    {
-                       ec_data.ec = ec;
-                       ec_data.rect = input_rect;
+        if (input_rect)
+          {
+             ec_data.ec = ec;
+             ec_data.rect = input_rect;
 
-                       ICINF("[%s] ec(%p), x(-1), y(-1), w(1), h(1)\n", __func__, ec);
-                       e_input_backend_thread_safe_call(_e_comp_wl_input_thread_input_area_clear, &ec_data, sizeof(E_Input_Thread_Request_EClient_Data));
-                       e_input_backend_thread_safe_call(_e_comp_wl_input_thread_input_area_append, &ec_data, sizeof(E_Input_Thread_Request_EClient_Data));
-                    }
-               }
+             ICINF("[%s] ec(%p), x(-1), y(-1), w(1), h(1)\n", __func__, ec);
+             e_input_backend_thread_safe_call(_e_comp_wl_input_thread_input_area_clear, &ec_data, sizeof(E_Input_Thread_Request_EClient_Data));
+             e_input_backend_thread_safe_call(_e_comp_wl_input_thread_input_area_append, &ec_data, sizeof(E_Input_Thread_Request_EClient_Data));
           }
-        else
-          eina_tiler_union(ec->comp_data->pending.input, region);
-     }
-   else
-     {
-        eina_tiler_rect_add(ec->comp_data->pending.input,
-                            &(Eina_Rectangle){0, 0, ec->client.w, ec->client.h});
      }
 }
 
index cee44cbe50274dea33859b2d319a749fd905afe9..40964f40e14686d6312cba4dfe7786175a058fd8 100644 (file)
@@ -93,7 +93,7 @@ EINTERN void e_comp_wl_client_surface_init(E_Client *ec);
 EINTERN void e_comp_wl_client_surface_finish(E_Client *ec);
 EINTERN void e_comp_wl_client_surface_pending_buffer_set(E_Client *ec, E_Comp_Wl_Buffer *buffer, int32_t sx, int32_t sy);
 EINTERN void e_comp_wl_client_opaque_region_set(E_Client *ec, pixman_region32_t *region);
-EINTERN void e_comp_wl_client_surface_pending_input_region_set(E_Client *ec, Eina_Tiler *region);
+EINTERN void e_comp_wl_client_input_region_set(E_Client *ec, pixman_region32_t *region);
 EINTERN void e_comp_wl_client_surface_pending_commit(E_Client *ec);
 
 EINTERN Eina_Bool e_comp_wl_client_subsurface_cyclic_reference_check(E_Client *ec, E_Client *parent);
index c799754ad5796a27112b5b3ad587c9d217e2b0f8..7d9a624d1cd4d27911f500fbc4df618c6f858ccc 100644 (file)
@@ -1039,63 +1039,6 @@ _e_surface_pending_buffer_update(E_Surface *surface)
                                                ds_surface->current.dy);
 }
 
-static void
-_region_area_check(Eina_Tiler *tiler, int32_t x, int32_t y, int32_t w, int32_t h)
-{
-   Eina_Bool need_set = EINA_FALSE;
-   int area_w = 0;
-   int area_h = 0;
-
-   eina_tiler_area_size_get(tiler, &area_w, &area_h);
-   if (x + w > area_w)
-     {
-        area_w = x + w;
-        need_set = EINA_TRUE;
-     }
-
-   if (y + h > area_h)
-     {
-        area_h = y + h;
-        need_set = EINA_TRUE;
-     }
-
-   if (need_set)
-     {
-        INF("change region area. (%dx%d)", area_w, area_h);
-        eina_tiler_area_size_set(tiler, area_w, area_h);
-     }
-}
-
-static Eina_Tiler *
-_tiler_new_from_pixman_region(pixman_region32_t *pixman_region)
-{
-   Eina_Tiler *tiler;
-   pixman_box32_t *rects;
-   int32_t x, y, w, h;
-   int nrects, i;
-   int comp_w = 0, comp_h = 0;
-
-   e_comp_size_get(&comp_w, &comp_h);
-   tiler = eina_tiler_new(comp_w, comp_h);
-   if (!tiler)
-     return NULL;
-
-   eina_tiler_tile_size_set(tiler, 1, 1);
-
-   rects = pixman_region32_rectangles(pixman_region, &nrects);
-   for (i = 0; i < nrects; i++)
-     {
-        x = rects[i].x1;
-        y = rects[i].y1;
-        w = rects[i].x2 - x;
-        h = rects[i].y2 - y;
-        _region_area_check(tiler, x, y, w, h);
-        eina_tiler_rect_add(tiler, &(Eina_Rectangle){x, y, w, h});
-     }
-
-   return tiler;
-}
-
 static void
 _e_surface_pending_opaque_region_update(E_Surface *surface)
 {
@@ -1110,23 +1053,8 @@ _e_surface_pending_input_region_update(E_Surface *surface)
 {
    struct ds_surface *ds_surface = surface->ds_surface;
    E_Client *ec = surface->ec;
-   Eina_Tiler *region;
-   pixman_region32_t infinite_region;
 
-   pixman_region32_init_rect(&infinite_region, INT32_MIN, INT32_MIN, UINT32_MAX, UINT32_MAX);
-   if (pixman_region32_equal(&ds_surface->current.input, &infinite_region))
-     {
-        e_comp_wl_client_surface_pending_input_region_set(ec, NULL);
-     }
-   else
-     {
-        region = _tiler_new_from_pixman_region(&ds_surface->current.input);
-        if (region)
-          {
-             e_comp_wl_client_surface_pending_input_region_set(ec, region);
-             eina_tiler_free(region);
-          }
-     }
+   e_comp_wl_client_input_region_set(ec, &ds_surface->current.input);
 }
 
 static void
index 35ddf537b736fc558d9396ef61a9415092e8bfea..11d8f9664e97b9630bd5c50387d59d4bd11f97a1 100644 (file)
@@ -185,7 +185,7 @@ struct _E_Comp_Wl_Surface_State
    struct wl_listener buffer_destroy_listener;
    EINA_DEPRECATED Eina_List *damages, *buffer_damages;
    Eina_List *frames;
-   Eina_Tiler *input;
+   EINA_DEPRECATED Eina_Tiler *input;
    EINA_DEPRECATED Eina_Tiler *opaque;
    E_Comp_Wl_Buffer_Viewport buffer_viewport;
    Eina_Bool new_attach : 1;