From: Wonsik Jung Date: Wed, 5 Feb 2020 04:42:45 +0000 (+0900) Subject: [Tizen] Fix window rotation sync issue for mulit window X-Git-Tag: accepted/tizen/5.5/unified/20200206.060330^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F17%2F223917%2F2;p=platform%2Fcore%2Fuifw%2Fdali-adaptor.git [Tizen] Fix window rotation sync issue for mulit window Fix window rotation sync issue for multi window Rotation_done_send() should be called after eglSwapbuffers. For the sync, this patch has the connection of thread controller's lock. Change-Id: Ice2575a6e86e2de80b816f6776afe9e3de7272ea --- diff --git a/dali/internal/adaptor/common/adaptor-impl.cpp b/dali/internal/adaptor/common/adaptor-impl.cpp index 695688f..4d0dc84 100755 --- a/dali/internal/adaptor/common/adaptor-impl.cpp +++ b/dali/internal/adaptor/common/adaptor-impl.cpp @@ -649,6 +649,10 @@ bool Adaptor::AddWindow( Dali::Integration::SceneHolder childWindow, const std:: // Add the new Window to the container - the order is not important mWindows.push_back( &windowImpl ); + Dali::RenderSurfaceInterface* surface = windowImpl.GetSurface(); + + mThreadController->AddSurface( surface ); + mWindowCreatedSignal.Emit( childWindow ); return true; diff --git a/dali/internal/adaptor/common/combined-update-render-controller.cpp b/dali/internal/adaptor/common/combined-update-render-controller.cpp index b3cef0d..798faf1 100644 --- a/dali/internal/adaptor/common/combined-update-render-controller.cpp +++ b/dali/internal/adaptor/common/combined-update-render-controller.cpp @@ -381,6 +381,17 @@ void CombinedUpdateRenderController::SetPreRenderCallback( CallbackBase* callbac mPreRenderCallback = callback; } +void CombinedUpdateRenderController::AddSurface( Dali::RenderSurfaceInterface* surface ) +{ + LOG_EVENT_TRACE; + LOG_EVENT( "Surface is added" ); + if( mUpdateRenderThread ) + { + // Set the ThreadSyncronizationInterface on the added surface + surface->SetThreadSynchronization( *this ); + } +} + /////////////////////////////////////////////////////////////////////////////////////////////////// // EVENT THREAD /////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/dali/internal/adaptor/common/combined-update-render-controller.h b/dali/internal/adaptor/common/combined-update-render-controller.h index 571485b..65c262f 100644 --- a/dali/internal/adaptor/common/combined-update-render-controller.h +++ b/dali/internal/adaptor/common/combined-update-render-controller.h @@ -145,6 +145,11 @@ public: */ void SetPreRenderCallback( CallbackBase* callback ) override; + /** + * @copydoc ThreadControllerInterface::AddSurface() + */ + virtual void AddSurface( Dali::RenderSurfaceInterface* surface ); + private: // Undefined copy constructor. diff --git a/dali/internal/adaptor/common/thread-controller-interface.h b/dali/internal/adaptor/common/thread-controller-interface.h index 8c63c7d..41160fc 100644 --- a/dali/internal/adaptor/common/thread-controller-interface.h +++ b/dali/internal/adaptor/common/thread-controller-interface.h @@ -113,6 +113,12 @@ public: */ virtual void SetPreRenderCallback( CallbackBase* callback ) = 0; + /** + * @brief Adds the new surface. + * @param surface new surface + */ + virtual void AddSurface( Dali::RenderSurfaceInterface* surface ) = 0; + protected: /** diff --git a/dali/internal/system/common/thread-controller.cpp b/dali/internal/system/common/thread-controller.cpp index cd6671d..cff4b45 100644 --- a/dali/internal/system/common/thread-controller.cpp +++ b/dali/internal/system/common/thread-controller.cpp @@ -110,6 +110,11 @@ void ThreadController::SetPreRenderCallback( CallbackBase* callback ) mThreadControllerInterface->SetPreRenderCallback( callback ); } +void ThreadController::AddSurface( Dali::RenderSurfaceInterface* newSurface ) +{ + mThreadControllerInterface->AddSurface( newSurface ); +} + } // namespace Adaptor } // namespace Internal diff --git a/dali/internal/system/common/thread-controller.h b/dali/internal/system/common/thread-controller.h index 686c653..b092bc1 100644 --- a/dali/internal/system/common/thread-controller.h +++ b/dali/internal/system/common/thread-controller.h @@ -132,6 +132,13 @@ public: */ void SetPreRenderCallback( CallbackBase* callback ); + /** + * @brief Adds the new surface. + * + * @param surface new surface + */ + void AddSurface( Dali::RenderSurfaceInterface* surface ); + private: // Undefined copy constructor.