e_comp_wl: refactor code to handle sync_geometry_set 73/288173/1 accepted/tizen/7.0/unified/20230214.105912
authorDoyoun Kang <doyoun.kang@samsung.com>
Mon, 13 Feb 2023 02:03:56 +0000 (11:03 +0900)
committerDoyoun Kang <doyoun.kang@samsung.com>
Mon, 13 Feb 2023 04:36:09 +0000 (04:36 +0000)
We refactor code to handle the tizen_move_resize_set_geometry request.
We handled it using the serial data of buffer, but there was a case not to set the serial data.
So, we changed code that e compares the buffer size and requested geometry size instead of the
serial data.

Change-Id: I0994f382797de3108e9c6c3645b0449f750b4832

src/bin/e_comp_wl.c
src/bin/e_info_client.c
src/bin/e_info_server.c

index 0e4375543d60abc1164bc5d51344904e9165d3ca..0360d1ea4882977dad24a7bb642eb0dcb8d781ad 100644 (file)
@@ -33,7 +33,6 @@ EINTERN int E_EVENT_WAYLAND_GLOBAL_ADD = -1;
  */
 
 static void _e_comp_wl_move_resize_init(void);
-static void _e_comp_wl_surface_state_serial_update(E_Client *ec, E_Comp_Wl_Surface_State *state);
 
 static E_Client * _e_comp_wl_client_usable_get(pid_t pid, E_Pixmap *ep);
 
@@ -102,8 +101,6 @@ static Eina_Inlist *_e_comp_wl_intercept_hooks[] =
 
 static Eina_List *hooks = NULL;
 
-static Eina_Bool serial_trace_debug = 0;
-
 /* local functions */
 static void
 _e_comp_wl_hooks_clean(void)
@@ -2621,7 +2618,6 @@ _e_comp_wl_surface_state_commit(E_Client *ec, E_Comp_Wl_Surface_State *state)
 
    if (state->new_attach)
      {
-        _e_comp_wl_surface_state_serial_update(ec, state);
         e_comp_wl_surface_attach(ec, state->buffer);
      }
 
@@ -5992,34 +5988,6 @@ e_comp_wl_output_find_all(E_Client *ec)
 // --------------------------------------------------------
 // tizen_move_resize
 // --------------------------------------------------------
-EINTERN void
-e_comp_wl_trace_serial_debug(Eina_Bool on)
-{
-   if (on == serial_trace_debug) return;
-   serial_trace_debug = on;
-   ELOGF("POSSIZE", "serial trace_debug %s", NULL, (on ? "ON" : "OFF"));
-}
-
-static void
-_e_comp_wl_surface_state_serial_update(E_Client *ec, E_Comp_Wl_Surface_State *state)
-{
-   E_Comp_Wl_Buffer *buffer;
-   uint32_t serial = 0;
-
-   if (!ec) return;
-   if (e_object_is_del(E_OBJECT(ec))) return;
-   if (!ec->comp_data) return;
-
-   buffer = state->buffer;
-   if (!buffer) return;
-
-   serial = wayland_tbm_server_buffer_get_buffer_serial(buffer->resource);
-   ec->surface_sync.serial = serial;
-
-   if (serial_trace_debug)
-     ELOGF("POSSIZE", "Update serial(%u) wl_buffer(%u)", ec, serial, wl_resource_get_id(buffer->resource));
-}
-
 EINTERN Eina_Bool
 e_comp_wl_commit_sync_client_geometry_add(E_Client *ec,
                                           E_Client_Demand_Geometry mode,
@@ -6085,17 +6053,29 @@ e_comp_wl_commit_sync_configure(E_Client *ec)
 
    if (eina_list_count(ec->surface_sync.pending_geometry))
      {
-        EINA_LIST_FOREACH(ec->surface_sync.pending_geometry, l, geo)
+        Eina_List *ll = NULL;
+        Eina_Bool match_size = EINA_FALSE;
+        EINA_LIST_REVERSE_FOREACH_SAFE(ec->surface_sync.pending_geometry, l, ll, geo)
           {
-             if (geo->serial <= ec->surface_sync.serial)
+             if (match_size)
+               {
+                  ec->surface_sync.pending_geometry = eina_list_remove(ec->surface_sync.pending_geometry, geo);
+                  E_FREE(geo);
+                  continue;
+               }
+
+             if ((geo->w == bw) && (geo->h == bh))
                {
+                  match_size = EINA_TRUE;
                   if (geo->mode & E_GEOMETRY_SIZE)
                     {
-                       config.w = geo->w; config.h = geo->h;
+                       config.w = geo->w;
+                       config.h = geo->h;
                     }
                   if (geo->mode & E_GEOMETRY_POS)
                     {
-                       config.x = geo->x; config.y = geo->y;
+                       config.x = geo->x;
+                       config.y = geo->y;
                     }
                   change |= geo->mode;
                   ec->surface_sync.pending_geometry = eina_list_remove(ec->surface_sync.pending_geometry, geo);
index 7ba0328937e98cee7a195c03b9ea1264685bf45e..6e94a8e7ac2e3e06e235f9139420ce4ff86ef3e7 100644 (file)
@@ -3478,14 +3478,6 @@ _e_info_client_proc_trace(int argc, char **argv)
                }
              return;
           }
-        else if (eina_streq(argv[2], "serial"))
-          {
-             if (!_e_info_client_eldbus_message_with_args("trace_message_serial", NULL, "i", onoff))
-               {
-                  printf("_e_info_client_eldbus_message_with_args error");
-               }
-             return;
-          }
         else if (eina_streq(argv[2], "prstt"))
           {
              if (!_e_info_client_eldbus_message_with_args("trace_message_prstt", NULL, "i", onoff))
@@ -6735,7 +6727,7 @@ static ProcInfo procs_to_tracelogs[] =
 #endif
    {
       "trace",
-      "[hwc | serial | exsync] [off: 0, on: 1]",
+      "[hwc | exsync] [off: 0, on: 1]",
       "Show the trace log in detail",
       _e_info_client_proc_trace
    },
index 4f6166ab6b89f98a427476c52daba9449a2069c2..a6f81e873d38273d1d7777f2e7744d42338dd7ef 100644 (file)
@@ -5124,24 +5124,6 @@ e_info_server_cb_hwc_trace_message(const Eldbus_Service_Interface *iface EINA_UN
    return reply;
 }
 
-static Eldbus_Message *
-e_info_server_cb_serial_trace_message(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
-{
-   Eldbus_Message *reply = eldbus_message_method_return_new(msg);
-   uint32_t on;
-
-   if (!eldbus_message_arguments_get(msg, "i", &on))
-     {
-        ERR("Error getting arguments.");
-        return reply;
-     }
-
-   if (on == 0 || on == 1)
-     e_comp_wl_trace_serial_debug(on);
-
-   return reply;
-}
-
 static Eldbus_Message *
 e_info_server_cb_damage_trace_message(const Eldbus_Service_Interface *iface EINA_UNUSED, const Eldbus_Message *msg)
 {
@@ -7688,7 +7670,6 @@ static const Eldbus_Method methods[] = {
    { "dump_screen", ELDBUS_ARGS({"s", "dump_screen"}), NULL, _e_info_server_cb_screen_dump, 0 },
    { "output_mode", ELDBUS_ARGS({SIGNATURE_OUTPUT_MODE_CLIENT, "output mode"}), ELDBUS_ARGS({"a("SIGNATURE_OUTPUT_MODE_SERVER")", "array of ec"}), _e_info_server_cb_output_mode, 0 },
    { "trace_message_hwc", ELDBUS_ARGS({"i", "trace_message_hwc"}), NULL, e_info_server_cb_hwc_trace_message, 0},
-   { "trace_message_serial", ELDBUS_ARGS({"i", "trace_message_serial"}), NULL, e_info_server_cb_serial_trace_message, 0},
    { "trace_message_prstt", ELDBUS_ARGS({"i", "trace_message_presentation_time"}), NULL, e_info_server_cb_prstt_trace_message, 0},
    { "trace_message_exsync", ELDBUS_ARGS({"i", "trace_message_ex_sync"}), NULL, e_info_server_cb_exsync_trace_message, 0},
    { "trace_message_damage", ELDBUS_ARGS({"i", "trace_message_damage"}), NULL, e_info_server_cb_damage_trace_message, 0},