From 05cba774f590532a505a63216a7ae75d68170b15 Mon Sep 17 00:00:00 2001 From: Hyunho Kang Date: Thu, 16 Mar 2017 10:56:31 +0900 Subject: [PATCH] Add tbm buffer destroy logic tbm buffer should be handled by viewer side. If not, tbm_surface fd will be remained after widget is deleted. Change-Id: Ia6abc17c53af08c24d7d080378c121879e1a291d Signed-off-by: Hyunho Kang (cherry picked from commit 2d09ccf2a1b73ef116d700b1de5a0dbcbc901a89) --- .../src/screen_connector_toolkit_evas.c | 9 ++++++++- .../src/screen_connector_watcher_evas.c | 9 ++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/screen_connector_watcher_evas/src/screen_connector_toolkit_evas.c b/screen_connector_watcher_evas/src/screen_connector_toolkit_evas.c index 70f9a17..5a78547 100644 --- a/screen_connector_watcher_evas/src/screen_connector_toolkit_evas.c +++ b/screen_connector_watcher_evas/src/screen_connector_toolkit_evas.c @@ -23,6 +23,8 @@ #include #include #include +#include +#include #include "screen_connector_toolkit.h" #include "screen_connector_toolkit_evas.h" @@ -415,6 +417,7 @@ static void __toolkit_update_cb(struct tizen_remote_surface *trs, uint32_t type, char format[] = "png"; char plug_id[256]; screen_connector_toolkit_evas_h toolkit_evas_h; + tbm_surface_h pre_tbm_surface; toolkit_evas_h = (screen_connector_toolkit_evas_h)data; if (toolkit_evas_h->img_tbm == NULL) { @@ -492,8 +495,12 @@ static void __toolkit_update_cb(struct tizen_remote_surface *trs, uint32_t type, } if (toolkit_evas_h->pre_buffer) { - if (tizen_remote_surface_get_version(trs) >= TIZEN_REMOTE_SURFACE_RELEASE_SINCE_VERSION) + if (tizen_remote_surface_get_version(trs) >= TIZEN_REMOTE_SURFACE_RELEASE_SINCE_VERSION) { tizen_remote_surface_release(trs, toolkit_evas_h->pre_buffer); + pre_tbm_surface = (tbm_surface_h)wl_buffer_get_user_data(toolkit_evas_h->pre_buffer); + tbm_surface_internal_unref(pre_tbm_surface); + wl_buffer_destroy(toolkit_evas_h->pre_buffer); + } } toolkit_evas_h->pre_buffer = tbm; diff --git a/screen_connector_watcher_evas/src/screen_connector_watcher_evas.c b/screen_connector_watcher_evas/src/screen_connector_watcher_evas.c index 175d03b..3f0eddc 100644 --- a/screen_connector_watcher_evas/src/screen_connector_watcher_evas.c +++ b/screen_connector_watcher_evas/src/screen_connector_watcher_evas.c @@ -22,6 +22,8 @@ #include #include #include +#include +#include #include "screen_connector_watcher.h" #include "screen_connector_watcher_evas.h" @@ -148,6 +150,7 @@ static void __watcher_update_cb(struct tizen_remote_surface *trs, uint32_t type, char format[] = "png"; screen_connector_watcher_evas_h watcher_evas_h = (screen_connector_watcher_evas_h)data; img_info_h info; + tbm_surface_h pre_tbm_surface; if (tbm == NULL && type == TIZEN_REMOTE_SURFACE_BUFFER_TYPE_TBM) { LOGE("TBM is null !! %d, %s, %s", TIZEN_REMOTE_SURFACE_BUFFER_TYPE_TBM, appid, instance_id); @@ -215,8 +218,12 @@ static void __watcher_update_cb(struct tizen_remote_surface *trs, uint32_t type, } if (info->pre_buffer) { - if (tizen_remote_surface_get_version(trs) >= TIZEN_REMOTE_SURFACE_RELEASE_SINCE_VERSION) + if (tizen_remote_surface_get_version(trs) >= TIZEN_REMOTE_SURFACE_RELEASE_SINCE_VERSION) { tizen_remote_surface_release(trs, info->pre_buffer); + pre_tbm_surface = (tbm_surface_h)wl_buffer_get_user_data(info->pre_buffer); + tbm_surface_internal_unref(pre_tbm_surface); + wl_buffer_destroy(info->pre_buffer); + } } info->pre_buffer = tbm; close(img_file_fd); /* close passed fd */ -- 2.7.4