wl_egl: modify some operation related with buffer serial 26/310726/1
authorJoonbum Ko <joonbum.ko@samsung.com>
Fri, 3 May 2024 08:26:22 +0000 (17:26 +0900)
committerJoonbum Ko <joonbum.ko@samsung.com>
Tue, 7 May 2024 09:00:27 +0000 (18:00 +0900)
 - The point of storing the serial to wl_egl_buffer was
  changed from dequeue to enqueue.

Change-Id: I060fb29da38b5e16d8fcc2c453db6250b9a89327
Signed-off-by: Joonbum Ko <joonbum.ko@samsung.com>
src/tpl_wl_egl_thread.c

index dd00d9248f7407311619a788b4faab70064a5e6a..e9604c1d1136c6e5a2240b2a6716f3ec06eb4df0 100755 (executable)
@@ -152,7 +152,7 @@ struct _tpl_wl_egl_surface {
        tpl_bool_t                    prerotation_capability;
        tpl_bool_t                    vblank_done;
        tpl_bool_t                    vblank_enable;
-       tpl_bool_t                    set_serial_is_used;
+       tpl_bool_t                    serial_updated;
        tpl_bool_t                    initialized_in_thread;
        tpl_bool_t                    frontbuffer_activated;
        tpl_bool_t                    buffers_finalize_done;
@@ -218,6 +218,7 @@ struct _tpl_wl_egl_buffer {
 
        /* for wayland_tbm_client_set_buffer_serial */
        unsigned int                  serial;
+       tpl_bool_t                    serial_updated;
 
        /* for checking need_to_commit (frontbuffer mode) */
        tpl_bool_t                    need_to_commit;
@@ -1452,8 +1453,8 @@ __cb_set_window_serial_callback(struct wl_egl_window *wl_egl_window,
                return;
        }
 
-       wl_egl_surface->set_serial_is_used = TPL_TRUE;
        wl_egl_surface->serial = serial;
+       wl_egl_surface->serial_updated = TPL_TRUE;
 }
 
 static int
@@ -1875,7 +1876,7 @@ __tpl_wl_egl_surface_init(tpl_surface_t *surface)
        wl_egl_surface->need_to_enqueue        = TPL_TRUE;
        wl_egl_surface->prerotation_capability = TPL_FALSE;
        wl_egl_surface->vblank_done            = TPL_TRUE;
-       wl_egl_surface->set_serial_is_used     = TPL_FALSE;
+       wl_egl_surface->serial_updated         = TPL_FALSE;
        wl_egl_surface->gsource_finalized      = TPL_FALSE;
        wl_egl_surface->initialized_in_thread  = TPL_FALSE;
        wl_egl_surface->frontbuffer_activated  = TPL_FALSE;
@@ -2643,18 +2644,13 @@ _wl_egl_buffer_init(tpl_wl_egl_buffer_t *wl_egl_buffer,
        wl_egl_buffer->buffer_release           = NULL;
 #endif
        wl_egl_buffer->transform                = tizen_private->transform;
+       wl_egl_buffer->serial_updated           = TPL_FALSE;
 
        if (wl_egl_buffer->w_transform != tizen_private->window_transform) {
                wl_egl_buffer->w_transform          = tizen_private->window_transform;
                wl_egl_buffer->w_rotated            = TPL_TRUE;
        }
 
-       if (wl_egl_surface->set_serial_is_used) {
-               wl_egl_buffer->serial               = wl_egl_surface->serial;
-       } else {
-               wl_egl_buffer->serial               = ++tizen_private->serial;
-       }
-
        if (wl_egl_buffer->rects) {
                free(wl_egl_buffer->rects);
                wl_egl_buffer->rects                = NULL;
@@ -3120,6 +3116,12 @@ __tpl_wl_egl_surface_enqueue_buffer(tpl_surface_t *surface,
 
        wl_egl_buffer->acquire_fence_fd = acquire_fence;
 
+       if (wl_egl_surface->serial_updated) {
+               wl_egl_buffer->serial = wl_egl_surface->serial;
+               wl_egl_buffer->serial_updated = TPL_TRUE;
+               wl_egl_surface->serial_updated = TPL_FALSE;
+       }
+
        tpl_gmutex_lock(&wl_egl_surface->presentation_sync.mutex);
        if (wl_egl_surface->presentation_sync.fd != -1) {
                wl_egl_buffer->presentation_sync_fd  = wl_egl_surface->presentation_sync.fd;
@@ -3789,9 +3791,15 @@ _thread_wl_surface_commit(tpl_wl_egl_surface_t *wl_egl_surface,
                }
        }
 
-       wayland_tbm_client_set_buffer_serial(wl_egl_display->wl_tbm_client,
-                                               (void *)wl_egl_buffer->wl_buffer,
-                                               wl_egl_buffer->serial);
+       if (wl_egl_buffer->serial_updated) {
+               wayland_tbm_client_set_buffer_serial(wl_egl_display->wl_tbm_client,
+                                                                                        (void *)wl_egl_buffer->wl_buffer,
+                                                                                        wl_egl_buffer->serial);
+               wl_egl_buffer->serial_updated = TPL_FALSE;
+               TPL_INFO("[SERIAL]", "wl_egl_surface(%p) bo_name(%d) serial(%u)",
+                                wl_egl_surface, wl_egl_buffer->bo_name, wl_egl_buffer->serial);
+       }
+
 #if TIZEN_FEATURE_ENABLE
        if (wl_egl_display->use_explicit_sync &&
                wl_egl_buffer->acquire_fence_fd != -1) {