// release the surface if we own one
if( mImpl->mOwnSurface )
{
-
if( mImpl->mConsumeSurface )
{
tbm_surface_queue_release( mImpl->mTbmQueue, mImpl->mConsumeSurface );
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;
}
}
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()
}
}
-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 )