From: Wonsik Jung Date: Wed, 5 Feb 2020 04:42:45 +0000 (+0900) Subject: Fix window rotation sync issue for mulit window X-Git-Tag: dali_1.5.0~6^2 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-adaptor.git;a=commitdiff_plain;h=9496ef1cdd080c7405cc12f11daed62a3ffd9fff 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 ce8863c..d00a607 100755 --- a/dali/internal/adaptor/common/adaptor-impl.cpp +++ b/dali/internal/adaptor/common/adaptor-impl.cpp @@ -626,6 +626,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 4b794ce..a41a613 100644 --- a/dali/internal/adaptor/common/combined-update-render-controller.cpp +++ b/dali/internal/adaptor/common/combined-update-render-controller.cpp @@ -399,6 +399,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 03e511e..edaf83c 100644 --- a/dali/internal/adaptor/common/combined-update-render-controller.h +++ b/dali/internal/adaptor/common/combined-update-render-controller.h @@ -151,6 +151,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 99317d6..6b9055b 100644 --- a/dali/internal/adaptor/common/thread-controller-interface.h +++ b/dali/internal/adaptor/common/thread-controller-interface.h @@ -118,6 +118,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 fbe90dc..a9054ec 100644 --- a/dali/internal/system/common/thread-controller.cpp +++ b/dali/internal/system/common/thread-controller.cpp @@ -115,6 +115,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 e1f1c84..c4f3961 100644 --- a/dali/internal/system/common/thread-controller.h +++ b/dali/internal/system/common/thread-controller.h @@ -137,6 +137,13 @@ public: */ void SetPreRenderCallback( CallbackBase* callback ); + /** + * @brief Adds the new surface. + * + * @param surface new surface + */ + void AddSurface( Dali::RenderSurfaceInterface* surface ); + private: // Undefined copy constructor.