Add tbm buffer destroy logic 14/122114/2 accepted/tizen/3.0/common/20170331.152145 accepted/tizen/3.0/ivi/20170331.101605 accepted/tizen/3.0/mobile/20170331.101443 accepted/tizen/3.0/tv/20170331.101510 accepted/tizen/3.0/wearable/20170331.101538 submit/tizen_3.0/20170330.081512
authorHyunho Kang <hhstark.kang@samsung.com>
Thu, 16 Mar 2017 01:56:31 +0000 (10:56 +0900)
committerHyunho Kang <hhstark.kang@samsung.com>
Thu, 30 Mar 2017 08:09:41 +0000 (01:09 -0700)
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 <hhstark.kang@samsung.com>
(cherry picked from commit 2d09ccf2a1b73ef116d700b1de5a0dbcbc901a89)

screen_connector_watcher_evas/src/screen_connector_toolkit_evas.c
screen_connector_watcher_evas/src/screen_connector_watcher_evas.c

index 70f9a17..5a78547 100644 (file)
@@ -23,6 +23,8 @@
 #include <Ecore_Wayland.h>
 #include <wayland-extension/tizen-extension-client-protocol.h>
 #include <tizen-remote-surface-client-protocol.h>
+#include <tbm_surface.h>
+#include <tbm_surface_internal.h>
 
 #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;
 
index 175d03b..3f0eddc 100644 (file)
@@ -22,6 +22,8 @@
 #include <Ecore_Wayland.h>
 #include <wayland-extension/tizen-extension-client-protocol.h>
 #include <tizen-remote-surface-client-protocol.h>
+#include <tbm_surface.h>
+#include <tbm_surface_internal.h>
 
 #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 */