Merge "[3.0] Modified the location of ReleaseSurface in NativeRenderSurface" into... accepted/tizen/3.0/common/20161114.081635 accepted/tizen/3.0/ivi/20161104.103356 accepted/tizen/3.0/mobile/20161104.103152 accepted/tizen/3.0/tv/20161104.103259 accepted/tizen/3.0/wearable/20161104.103326 submit/tizen_3.0/20161102.074150 submit/tizen_3.0_common/20161110.084657
authorTaeyoon Lee <taeyoon0.lee@samsung.com>
Wed, 2 Nov 2016 06:57:25 +0000 (23:57 -0700)
committerGerrit Code Review <gerrit@review.vlan103.tizen.org>
Wed, 2 Nov 2016 06:57:25 +0000 (23:57 -0700)
adaptors/integration-api/wayland/native-render-surface.h
adaptors/tizen/native-render-surface-tizen.cpp

index 44caaa2..23a3120 100644 (file)
@@ -79,11 +79,6 @@ public: // API
    */
   virtual Any GetSurface();
 
-  /**
-   * @brief Release the surface
-   */
-  virtual void ReleaseSurface();
-
 public: // from Dali::RenderSurface
 
   /**
index 0c94474..ecca85d 100644 (file)
@@ -82,7 +82,6 @@ NativeRenderSurface::~NativeRenderSurface()
   // release the surface if we own one
   if( mImpl->mOwnSurface )
   {
-
     if( mImpl->mConsumeSurface )
     {
       tbm_surface_queue_release( mImpl->mTbmQueue, mImpl->mConsumeSurface );
@@ -191,16 +190,12 @@ void NativeRenderSurface::PostRender( EglInterface& egl, Integration::GlAbstract
     mImpl->mThreadSynchronization->PostRenderStarted();
   }
 
+  if( tbm_surface_queue_can_acquire( mImpl->mTbmQueue, 1 ) )
   {
-    ConditionalWait::ScopedLock lock( mImpl->mTbmSurfaceCondition );
-
-    if( tbm_surface_queue_can_acquire( mImpl->mTbmQueue, 1 ) )
+    if( tbm_surface_queue_acquire( mImpl->mTbmQueue, &mImpl->mConsumeSurface ) != TBM_SURFACE_QUEUE_ERROR_NONE )
     {
-      if( tbm_surface_queue_acquire( mImpl->mTbmQueue, &mImpl->mConsumeSurface ) != TBM_SURFACE_QUEUE_ERROR_NONE )
-      {
-        DALI_LOG_ERROR( "Failed aquire consume tbm_surface\n" );
-        return;
-      }
+      DALI_LOG_ERROR( "Failed to aquire a tbm_surface\n" );
+      return;
     }
   }
 
@@ -214,8 +209,16 @@ void NativeRenderSurface::PostRender( EglInterface& egl, Integration::GlAbstract
 
   if( mImpl->mThreadSynchronization )
   {
+    // wait until the event-thread completed to use the tbm_surface
     mImpl->mThreadSynchronization->PostRenderWaitForCompletion();
   }
+
+  // release the consumed surface after post render was completed
+  if( mImpl->mConsumeSurface )
+  {
+    tbm_surface_queue_release( mImpl->mTbmQueue, mImpl->mConsumeSurface );
+    mImpl->mConsumeSurface = NULL;
+  }
 }
 
 void NativeRenderSurface::StopRender()
@@ -263,16 +266,6 @@ void NativeRenderSurface::CreateNativeRenderable()
   }
 }
 
-void NativeRenderSurface::ReleaseSurface()
-{
-  ConditionalWait::ScopedLock lock( mImpl->mTbmSurfaceCondition );
-  if( mImpl->mConsumeSurface )
-  {
-    tbm_surface_queue_release( mImpl->mTbmQueue, mImpl->mConsumeSurface );
-    mImpl->mConsumeSurface = NULL;
-  }
-}
-
 void NativeRenderSurface::ReleaseLock()
 {
   if( mImpl->mThreadSynchronization )