From: taeyoon0.lee Date: Fri, 24 Nov 2017 11:53:39 +0000 (+0900) Subject: [4.0] Fixed buffer release issue X-Git-Tag: submit/tizen_4.0/20181004.072517~3 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F09%2F161609%2F8;p=platform%2Fcore%2Fuifw%2Fwidget-viewer-dali.git [4.0] Fixed buffer release issue - Destroyed widget image buffer only by native image source destructor. - Modified some codes, CloseRemoteSurface(), CreationAborted case, etc. Change-Id: Ib4565bd70fb95d19f5a818f03e4651d825d0c95d --- 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 bcf18b0..d5db237 100644 --- a/widget_viewer_dali/internal/widget_view/widget_view_impl.cpp +++ b/widget_viewer_dali/internal/widget_view/widget_view_impl.cpp @@ -109,9 +109,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" ); @@ -236,9 +233,6 @@ static void OnBufferUpdated( struct tizen_remote_surface *surface, uint32_t type widgetView->UpdateImageSource( tbmSurface, buffer, surface); } - remoteSurface = surface; - preBuffer = buffer; - close( img_file_fd ); } @@ -252,8 +246,8 @@ static void OnSurfaceRemoved( const char *appid, const char *instance_id, const if( widgetView && !widgetView->IsWidgetFaulted() ) { - widgetView->CloseRemoteSurface(); - widgetView->RemoveWidgetRenderer(); + widgetView->RemoveWidget(); + widgetView->EmitDeletedWidgetSignal(); } } @@ -552,25 +546,12 @@ void WidgetView::CreateWidgetRenderer() DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::CreateWidgetRenderer: Widget image is added.\n" ); } -void WidgetView::RemoveWidgetRenderer() -{ - if( mRenderer ) - { - Self().RemoveRenderer( mRenderer ); - - ShowRetryState( true ); - - Dali::WidgetView::WidgetView handle( GetOwner() ); - mWidgetDeletedSignal.Emit( handle ); - } - - DALI_LOG_INFO( gWidgetViewLogging, Debug::Verbose, "WidgetView::RemoveWidgetRenderer: Widget image is removed.\n" ); -} - bool WidgetView::TerminateWidget() { if( !mWidgetId.empty() && !mInstanceId.empty() ) { + RemoveWidget(); + int ret = 0; ret = widget_instance_terminate( mInstanceId.c_str() ); @@ -586,18 +567,12 @@ bool WidgetView::TerminateWidget() Dali::WidgetView::WidgetView handle( GetOwner() ); mWidgetTerminatedSignal.Emit( handle ); - mWidgetDeletedSignal.Emit( handle ); + + EmitDeletedWidgetSignal(); mWidgetId.clear(); mInstanceId.clear(); - CloseRemoteSurface(); - - if( mImageSource ) - { - Any source; - mImageSource->SetSource( source ); - } return true; } @@ -629,13 +604,14 @@ void WidgetView::SendWidgetEvent( int event ) case WIDGET_INSTANCE_EVENT_FAULT: { mWidgetFaultedSignal.Emit( handle ); - CloseRemoteSurface(); - RemoveWidgetRenderer(); + RemoveWidget(); + ShowRetryState( true ); break; } case WIDGET_INSTANCE_EVENT_CREATE_ABORTED: { mWidgetCreationAbortedSignal.Emit( handle ); + ShowRetryState( true ); break; } default: @@ -1241,19 +1217,24 @@ float WidgetView::GetWidthForHeight( float height ) } } -void WidgetView::CloseRemoteSurface() +void WidgetView::RemoveWidget() { - if( mWatcherHandle != NULL ) + if( mRemoteSurface != NULL ) { - if( remoteSurface != NULL && preBuffer != NULL && tizen_remote_surface_get_version( remoteSurface ) >= 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; - } + tizen_remote_surface_transfer_visibility( mRemoteSurface, TIZEN_REMOTE_SURFACE_VISIBILITY_TYPE_INVISIBLE); + } + + mImageSource = Dali::NativeImageSource::New( NULL ); + + if( mRenderer ) + { + mImageSource = NULL; + Self().RemoveRenderer( mRenderer ); + mRenderer.Reset(); + } + if( mWatcherHandle != NULL && mRemoteSurface != NULL ) + { screen_connector_toolkit_remove( mWatcherHandle ); mWatcherHandle = NULL; mRemoteSurface = NULL; @@ -1669,6 +1650,15 @@ bool WidgetView::GetStringFromProperty( const Dali::Property::Value& value, std: return extracted; } +void WidgetView::EmitDeletedWidgetSignal() +{ + if( !mWidgetId.empty() ) + { + Dali::WidgetView::WidgetView handle( GetOwner() ); + mWidgetDeletedSignal.Emit( handle ); + } +} + } // namespace Internal } // namespace WidgetView 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 e5fa76c..e3302fd 100644 --- a/widget_viewer_dali/internal/widget_view/widget_view_impl.h +++ b/widget_viewer_dali/internal/widget_view/widget_view_impl.h @@ -131,7 +131,7 @@ public: // Internal API void SetPermanentDelete( bool permanentDelete ); - void RemoveWidgetRenderer(); + void RemoveWidget(); bool IsPermanentDelete(); @@ -147,8 +147,6 @@ public: // Internal API bool OnWheelEvent( Dali::Actor actor, const Dali::WheelEvent& event ); - void CloseRemoteSurface(); - void SetLoadingTextPropertyMap( Dali::Property::Map map ); void SetRetryTextPropertyMap( Dali::Property::Map map ); @@ -169,6 +167,8 @@ public: // Internal API bool TouchEvent( const Dali::TouchData& event ); + void EmitDeletedWidgetSignal(); + public: //Signals /**