tpl_wayland_egl_thread: Implement free_flush protocol. 98/134598/6
authorjoonbum.ko <joonbum.ko@samsung.com>
Wed, 14 Jun 2017 11:03:49 +0000 (20:03 +0900)
committerSooChan Lim <sc1.lim@samsung.com>
Thu, 22 Jun 2017 08:56:52 +0000 (08:56 +0000)
  - Implement free_flush of tizen_surface_shm_flusher.
    Just flush free_buffer when receive free_flush event from server.
    If this protocol is active in server,
   it can reduce quick_panel buffer 3 to 1 in idle time.

Change-Id: I69422c1b10f43ea6430c2c059eb330403a18824c
Signed-off-by: joonbum.ko <joonbum.ko@samsung.com>
src/tpl_wayland_egl_thread.c

index a8b219d..dd2a3dc 100644 (file)
@@ -428,6 +428,8 @@ _twe_display_fini_wl_tbm_client(struct wayland_tbm_client *wl_tbm_client)
        wayland_tbm_client_deinit(wl_tbm_client);
 }
 
+#define IMPL_TIZEN_SURFACE_SHM_VERSION 2
+
 void
 __cb_wl_resistry_global_callback(void *data, struct wl_registry *wl_registry,
                                                          uint32_t name, const char *interface,
@@ -439,7 +441,8 @@ __cb_wl_resistry_global_callback(void *data, struct wl_registry *wl_registry,
                disp_source->tss = wl_registry_bind(wl_registry,
                                                                                        name,
                                                                                        &tizen_surface_shm_interface,
-                                                                                       version);
+                                                                                       ((version < IMPL_TIZEN_SURFACE_SHM_VERSION) ?
+                                                                                        version : IMPL_TIZEN_SURFACE_SHM_VERSION));
        }
 }
 
@@ -682,7 +685,6 @@ static void __cb_tss_flusher_flush_callback(void *data,
                _twe_display_print_err(disp_source, "dispatch_queue_pending");
                return;
        }
-       TPL_OBJECT_UNLOCK(&disp_source->obj);
 
        tbm_surface_queue_flush(surf_source->tbm_queue);
 
@@ -702,11 +704,41 @@ static void __cb_tss_flusher_flush_callback(void *data,
                }
                TPL_OBJECT_UNLOCK(&surf_source->obj);
        }
+
+       TPL_OBJECT_UNLOCK(&disp_source->obj);
 }
 
+static void __cb_tss_flusher_free_flush_callback(void *data,
+               struct tizen_surface_shm_flusher *tss_flusher)
+{
+       twe_wl_surf_source *surf_source = (twe_wl_surf_source *)data;
+       twe_wl_disp_source *disp_source = surf_source->disp_source;
+       int ret;
+
+       TPL_LOG_T("WL_EGL", "[FREE_FLUSH_CB] surf_source(%p)", surf_source);
+
+       /* First distach panding queue for TPL
+               - dispatch buffer-release
+               - dispatch queue flush
+       */
+       TPL_OBJECT_LOCK(&disp_source->obj);
+       ret = wl_display_dispatch_queue_pending(disp_source->disp,
+                                                                                       disp_source->ev_queue);
+       if (ret == -1) {
+               _twe_display_print_err(disp_source, "dispatch_queue_pending");
+               return;
+       }
+
+       tbm_surface_queue_free_flush(surf_source->tbm_queue);
+
+       TPL_OBJECT_UNLOCK(&disp_source->obj);
+}
+
+
 static const struct tizen_surface_shm_flusher_listener
 tss_flusher_listener = {
-       __cb_tss_flusher_flush_callback
+       __cb_tss_flusher_flush_callback,
+       __cb_tss_flusher_free_flush_callback
 };
 
 void