From bd3c827273308fedf6d759f20257d292d7182ba0 Mon Sep 17 00:00:00 2001 From: "joonbum.ko" Date: Wed, 14 Jun 2017 20:03:49 +0900 Subject: [PATCH] tpl_wayland_egl_thread: Implement free_flush protocol. - 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 --- src/tpl_wayland_egl_thread.c | 38 +++++++++++++++++++++++++++++++++++--- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/src/tpl_wayland_egl_thread.c b/src/tpl_wayland_egl_thread.c index a8b219d..dd2a3dc 100644 --- a/src/tpl_wayland_egl_thread.c +++ b/src/tpl_wayland_egl_thread.c @@ -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 -- 2.7.4