From: sunghyun kim Date: Thu, 10 May 2018 07:29:18 +0000 (+0900) Subject: Use screen_connector_toolkit_dispose_buffer() for release preBuffer X-Git-Tag: submit/tizen/20180510.063912~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F10%2F178510%2F3;p=platform%2Fcore%2Fuifw%2Fwidget-viewer-dali.git Use screen_connector_toolkit_dispose_buffer() for release preBuffer - Widget-viewer-dali need not release pre buffer directly in tizen_5.0 - Widget-viewer-dali only need to use screen_connector_toolkit_dispose_buffer() for reference count Change-Id: I8617c609d60ab07bd3da897c4a2c1e0f8eb54abc --- diff --git a/widget_viewer_dali/internal/widget_view/widget_view_impl.cpp b/widget_viewer_dali/internal/widget_view/widget_view_impl.cpp index f927aae..6064647 100644 --- a/widget_viewer_dali/internal/widget_view/widget_view_impl.cpp +++ b/widget_viewer_dali/internal/widget_view/widget_view_impl.cpp @@ -112,9 +112,6 @@ DALI_ACTION_REGISTRATION( Dali::WidgetView, WidgetView, "activateFaultedWidget", DALI_TYPE_REGISTRATION_END() -struct wl_buffer* preBuffer; -struct tizen_remote_surface* remoteSurface; - const char* const STATE_TEXT( "stateText" ); const char* const FONT_STYLE( "fontStyle" ); const char* const TEXT_POINT_SIZE( "textPointSize" ); @@ -246,31 +243,8 @@ static void OnBufferUpdated( struct tizen_remote_surface *surface, uint32_t type if( widgetView ) { - if( !widgetView->IsWidgetRenderer() ) - { - tizen_remote_surface_transfer_visibility( surface, TIZEN_REMOTE_SURFACE_VISIBILITY_TYPE_VISIBLE); - - widgetView->CreateWidgetRenderer(); - widgetView->ConnectSignal( surface ); - } - - //get tbm surface from buffer - tbm_surface_h tbmSurface = static_cast< tbm_surface_h >( wl_buffer_get_user_data( buffer ) ); - widgetView->UpdateImageSource( tbmSurface ); - } - - if( preBuffer != NULL && tizen_remote_surface_get_version( surface ) >= TIZEN_REMOTE_SURFACE_RELEASE_SINCE_VERSION ) - { - tizen_remote_surface_release( surface, preBuffer ); - tbm_surface_h preTbmSurface = (tbm_surface_h)wl_buffer_get_user_data( preBuffer ); - tbm_surface_internal_unref( preTbmSurface ); - wl_buffer_destroy( preBuffer ); + widgetView->UpdateBuffer( surface, buffer, img_file_fd); } - - remoteSurface = surface; - preBuffer = buffer; - - close( img_file_fd ); } static void OnBufferAdded( const char *appid, const char *instance_id, const int pid, void *data ) @@ -323,7 +297,8 @@ WidgetView::WidgetView() mRetryState( false ), mPermanentDelete( false ), mWatcherHandle( NULL ), - mRemoteSurface( NULL ) + mRemoteSurface( NULL ), + mBuffer( NULL ) { } @@ -345,7 +320,8 @@ WidgetView::WidgetView( const std::string& widgetId, const std::string& contentI mRetryState( false ), mPermanentDelete( false ), mWatcherHandle( NULL ), - mRemoteSurface( NULL ) + mRemoteSurface( NULL ), + mBuffer( NULL ) { } @@ -1219,13 +1195,10 @@ void WidgetView::CloseRemoteSurface() { if( mWatcherHandle != NULL ) { - if( remoteSurface != NULL && preBuffer != NULL && tizen_remote_surface_get_version( remoteSurface ) >= TIZEN_REMOTE_SURFACE_RELEASE_SINCE_VERSION ) + if( mRemoteSurface != NULL && mBuffer != NULL && tizen_remote_surface_get_version( mRemoteSurface ) >= TIZEN_REMOTE_SURFACE_RELEASE_SINCE_VERSION ) { - tizen_remote_surface_release( remoteSurface, preBuffer ); - tbm_surface_h preTbmSurface = (tbm_surface_h)wl_buffer_get_user_data( preBuffer ); - tbm_surface_internal_unref( preTbmSurface ); - wl_buffer_destroy( preBuffer ); - preBuffer = NULL; + screen_connector_toolkit_dispose_buffer( mWatcherHandle , mBuffer ); + mBuffer = NULL; } screen_connector_toolkit_remove( mWatcherHandle ); @@ -1537,6 +1510,32 @@ bool WidgetView::TouchEvent( const Dali::TouchData& event ) return true; } +void WidgetView::UpdateBuffer( struct tizen_remote_surface *surface, struct wl_buffer *buffer, int32_t fd) +{ + if( !IsWidgetRenderer() ) + { + tizen_remote_surface_transfer_visibility( surface, TIZEN_REMOTE_SURFACE_VISIBILITY_TYPE_VISIBLE); + + CreateWidgetRenderer(); + ConnectSignal( surface ); + } + + //get tbm surface from buffer + tbm_surface_h tbmSurface = static_cast< tbm_surface_h >( wl_buffer_get_user_data( buffer ) ); + UpdateImageSource( tbmSurface ); + + if( mBuffer != NULL && tizen_remote_surface_get_version( surface ) >= TIZEN_REMOTE_SURFACE_RELEASE_SINCE_VERSION ) + { + screen_connector_toolkit_dispose_buffer( mWatcherHandle , mBuffer ); + } + + mRemoteSurface = surface; + mBuffer = buffer; + + close( fd ); + +} + Dali::Shader WidgetView::CreateShader() { std::string fragmentShader = "#extension GL_OES_EGL_image_external:require\n"; diff --git a/widget_viewer_dali/internal/widget_view/widget_view_impl.h b/widget_viewer_dali/internal/widget_view/widget_view_impl.h index d926d60..8d2d619 100644 --- a/widget_viewer_dali/internal/widget_view/widget_view_impl.h +++ b/widget_viewer_dali/internal/widget_view/widget_view_impl.h @@ -168,6 +168,8 @@ public: // Internal API bool TouchEvent( const Dali::TouchData& event ); + void UpdateBuffer( struct tizen_remote_surface *surface, struct wl_buffer *buffer, int32_t fd); + public: //Signals /** @@ -311,6 +313,7 @@ private: bool mPermanentDelete; screen_connector_toolkit_h mWatcherHandle; tizen_remote_surface* mRemoteSurface; + wl_buffer* mBuffer; Dali::Property::Map mEffectPropertyMap;