Add missed operation for using wl_tbm_client. 80/254780/1
authorJoonbum Ko <joonbum.ko@samsung.com>
Wed, 3 Feb 2021 07:25:52 +0000 (16:25 +0900)
committerJoonbum Ko <joonbum.ko@samsung.com>
Tue, 9 Mar 2021 08:51:16 +0000 (17:51 +0900)
Change-Id: I942dbb918aa0dec72969751b77a2ea45552df53a
Signed-off-by: Joonbum Ko <joonbum.ko@samsung.com>
src/tpl_wl_egl.c

index ba7cd6b..f8d8155 100644 (file)
@@ -406,9 +406,11 @@ _wl_display_print_err(tpl_wl_egl_display_t *wl_egl_display,
 tpl_result_t
 _thread_wl_display_init(tpl_wl_egl_display_t *wl_egl_display)
 {
-       struct wl_registry *registry = NULL;
-       struct wl_event_queue *queue = NULL;
-       struct wl_display *display_wrapper = NULL;
+       struct wl_registry *registry                = NULL;
+       struct wl_event_queue *queue                = NULL;
+       struct wl_display *display_wrapper          = NULL;
+       struct wl_proxy *wl_tbm                     = NULL;
+       struct wayland_tbm_client *wl_tbm_client    = NULL;
        int ret;
        tpl_result_t result = TPL_ERROR_NONE;
 
@@ -448,6 +450,23 @@ _thread_wl_display_init(tpl_wl_egl_display_t *wl_egl_display)
        wl_proxy_wrapper_destroy(display_wrapper);
        display_wrapper = NULL;
 
+       wl_tbm_client = wayland_tbm_client_init(wl_egl_display->wl_display);
+       if (!wl_tbm_client) {
+               TPL_ERR("Failed to initialize wl_tbm_client.");
+               result = TPL_ERROR_INVALID_CONNECTION;
+               goto fini;
+       }
+
+       wl_tbm = (struct wl_proxy *)wayland_tbm_client_get_wl_tbm(wl_tbm_client);
+       if (!wl_tbm) {
+               TPL_ERR("Failed to get wl_tbm from wl_tbm_client(%p)", wl_tbm_client);
+               result = TPL_ERROR_INVALID_CONNECTION;
+               goto fini;
+       }
+
+       wl_proxy_set_queue(wl_tbm, wl_egl_display->ev_queue);
+       wl_egl_display->wl_tbm_client = wl_tbm_client;
+
        if (wl_registry_add_listener(registry, &registry_listener,
                                                                 wl_egl_display)) {
                TPL_ERR("Failed to wl_registry_add_listener");
@@ -486,8 +505,9 @@ _thread_wl_display_init(tpl_wl_egl_display_t *wl_egl_display)
        wl_egl_display->wl_initialized = TPL_TRUE;
 
        TPL_INFO("[WAYLAND_INIT]",
-                        "wl_egl_display(%p) wl_display(%p) event_queue(%p)",
-                        wl_egl_display, wl_egl_display->wl_display, wl_egl_display->ev_queue);
+                        "wl_egl_display(%p) wl_display(%p) wl_tbm_client(%p) event_queue(%p)",
+                        wl_egl_display, wl_egl_display->wl_display,
+                        wl_egl_display->wl_tbm_client, wl_egl_display->ev_queue);
        TPL_INFO("[WAYLAND_INIT]",
                         "tizen_surface_shm(%p) wp_presentation(%p) explicit_sync(%p)",
                         wl_egl_display->tss, wl_egl_display->presentation,
@@ -537,6 +557,22 @@ _thread_wl_display_fini(tpl_wl_egl_display_t *wl_egl_display)
                wl_egl_display->explicit_sync = NULL;
        }
 
+       if (wl_egl_display->wl_tbm_client) {
+               struct wl_proxy *wl_tbm = NULL;
+
+               wl_tbm = (struct wl_proxy *)wayland_tbm_client_get_wl_tbm(
+                                                                               wl_egl_display->wl_tbm_client);
+               if (wl_tbm) {
+                       wl_proxy_set_queue(wl_tbm, NULL);
+               }
+
+               TPL_LOG_T("WL_EGL", "wl_tbm_client deinit wl_tbm_client(%p)",
+                                 wl_egl_display->wl_tbm_client);
+               wayland_tbm_client_deinit(wl_egl_display->wl_tbm_client);
+
+               wl_egl_display->wl_tbm_client = NULL;
+       }
+
        wl_event_queue_destroy(wl_egl_display->ev_queue);
 
        wl_egl_display->wl_initialized = TPL_FALSE;
@@ -733,6 +769,7 @@ __tpl_wl_egl_display_init(tpl_display_t *display)
        wl_egl_display->tss               = NULL;
        wl_egl_display->presentation      = NULL;
        wl_egl_display->explicit_sync     = NULL;
+       wl_egl_display->wl_tbm_client     = NULL;
 
        wl_egl_display->use_wait_vblank   = TPL_TRUE;    // default enabled
        {