From: Adeel Kazmi Date: Fri, 8 Dec 2023 11:24:34 +0000 (+0000) Subject: Merge "DALi Version 2.3.2" into devel/master X-Git-Tag: dali_2.3.3~7 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1b4a1e578fd53340e38b919b8f3459ec1a09462f;hp=a29a8ab7d7d4a191b6035f6a39dccd06d061362b;p=platform%2Fcore%2Fuifw%2Fdali-adaptor.git Merge "DALi Version 2.3.2" into devel/master --- diff --git a/dali/internal/adaptor/common/adaptor-impl.cpp b/dali/internal/adaptor/common/adaptor-impl.cpp index c64cbdc..6001eb6 100644 --- a/dali/internal/adaptor/common/adaptor-impl.cpp +++ b/dali/internal/adaptor/common/adaptor-impl.cpp @@ -663,12 +663,12 @@ Dali::TtsPlayer Adaptor::GetTtsPlayer(Dali::TtsPlayer::Mode mode) return mTtsPlayers[mode]; } -bool Adaptor::AddIdle(CallbackBase* callback, bool hasReturnValue, bool forceAdd) +bool Adaptor::AddIdle(CallbackBase* callback, bool hasReturnValue) { bool idleAdded(false); - // Only add an idle if the Adaptor is actually running - if(RUNNING == mState || READY == mState || forceAdd) + // We want to run the processes even when paused + if(STOPPED != mState) { idleAdded = mCallbackManager->AddIdleCallback(callback, hasReturnValue); } @@ -1004,7 +1004,7 @@ void Adaptor::RequestProcessEventsOnIdle() if(!mNotificationOnIdleInstalled) { // If we haven't installed the idle notification, install it idle enterer. - mNotificationOnIdleInstalled = AddIdleEnterer(MakeCallback(this, &Adaptor::ProcessCoreEventsFromIdle), true); + mNotificationOnIdleInstalled = AddIdleEnterer(MakeCallback(this, &Adaptor::ProcessCoreEventsFromIdle)); } else { @@ -1337,12 +1337,12 @@ void Adaptor::SetRootLayoutDirection(std::string locale) } } -bool Adaptor::AddIdleEnterer(CallbackBase* callback, bool forceAdd) +bool Adaptor::AddIdleEnterer(CallbackBase* callback) { bool idleAdded(false); - // Only add an idle if the Adaptor is actually running - if(RUNNING == mState || READY == mState || forceAdd) + // We want to run the processes even when paused + if(STOPPED != mState) { idleAdded = mCallbackManager->AddIdleEntererCallback(callback); } diff --git a/dali/internal/adaptor/common/adaptor-impl.h b/dali/internal/adaptor/common/adaptor-impl.h index 279ff14..98d1dbc 100644 --- a/dali/internal/adaptor/common/adaptor-impl.h +++ b/dali/internal/adaptor/common/adaptor-impl.h @@ -249,7 +249,7 @@ public: // AdaptorInternalServices implementation /** * @copydoc Dali::Adaptor::AddIdle() */ - virtual bool AddIdle(CallbackBase* callback, bool hasReturnValue, bool forceAdd); + virtual bool AddIdle(CallbackBase* callback, bool hasReturnValue); /** * Adds a new Window instance to the Adaptor @@ -652,7 +652,7 @@ private: * @endcode * This callback will be called repeatedly as long as it returns true. A return of 0 deletes this callback. */ - bool AddIdleEnterer(CallbackBase* callback, bool forceAdd); + bool AddIdleEnterer(CallbackBase* callback); /** * Removes a previously added the idle enterer callback. diff --git a/dali/internal/adaptor/common/adaptor.cpp b/dali/internal/adaptor/common/adaptor.cpp index 6ca95b2..c8d17ee 100644 --- a/dali/internal/adaptor/common/adaptor.cpp +++ b/dali/internal/adaptor/common/adaptor.cpp @@ -88,7 +88,7 @@ void Adaptor::Stop() bool Adaptor::AddIdle(CallbackBase* callback, bool hasReturnValue) { DALI_ASSERT_ALWAYS(IsAvailable() && "Adaptor not instantiated"); - return mImpl->AddIdle(callback, hasReturnValue, false); + return mImpl->AddIdle(callback, hasReturnValue); } bool Adaptor::AddWindow(Dali::Integration::SceneHolder childWindow) diff --git a/dali/internal/adaptor/common/application-impl.cpp b/dali/internal/adaptor/common/application-impl.cpp index 0f18afa..44d4146 100644 --- a/dali/internal/adaptor/common/application-impl.cpp +++ b/dali/internal/adaptor/common/application-impl.cpp @@ -346,7 +346,7 @@ void Application::Quit() { // Actually quit the application. // Force a call to Quit even if adaptor is not running. - Internal::Adaptor::Adaptor::GetImplementation(*mAdaptor).AddIdle(MakeCallback(this, &Application::QuitFromMainLoop), false, true); + Internal::Adaptor::Adaptor::GetImplementation(*mAdaptor).AddIdle(MakeCallback(this, &Application::QuitFromMainLoop), false); } void Application::QuitFromMainLoop() diff --git a/dali/internal/offscreen/common/offscreen-application-impl.cpp b/dali/internal/offscreen/common/offscreen-application-impl.cpp index 1b2545a..f1fc2e7 100644 --- a/dali/internal/offscreen/common/offscreen-application-impl.cpp +++ b/dali/internal/offscreen/common/offscreen-application-impl.cpp @@ -89,8 +89,7 @@ void OffscreenApplication::MainLoop() void OffscreenApplication::Quit() { // Actually quit the application. - // Force a call to Quit even if adaptor is not running. - Internal::Adaptor::Adaptor::GetImplementation(*mAdaptor).AddIdle(MakeCallback(this, &OffscreenApplication::QuitFromMainLoop), false, true); + Internal::Adaptor::Adaptor::GetImplementation(*mAdaptor).AddIdle(MakeCallback(this, &OffscreenApplication::QuitFromMainLoop), false); } Dali::OffscreenWindow OffscreenApplication::GetWindow() diff --git a/dali/internal/system/common/async-task-manager-impl.cpp b/dali/internal/system/common/async-task-manager-impl.cpp index b23a24f..1fdb733 100644 --- a/dali/internal/system/common/async-task-manager-impl.cpp +++ b/dali/internal/system/common/async-task-manager-impl.cpp @@ -1003,6 +1003,22 @@ AsyncTaskPtr AsyncTaskManager::PopNextTaskToProcess() taskAvaliable = (mAvaliableLowPriorityTaskCounts > 0u); // priority is low, but we can use it. } + // Check whether we try to running same task at multiple threads. + if(taskAvaliable) + { + Mutex::ScopedLock lock(mRunningTasksMutex); // We can lock this mutex under mWaitingTasksMutex. + auto mapIter = mCacheImpl->mRunningTasksCache.find((*iter).Get()); + if(mapIter != mCacheImpl->mRunningTasksCache.end()) + { + if(!mapIter->second.empty()) + { + // Some other thread running this tasks now. Ignore it. + DALI_LOG_INFO(gAsyncTasksManagerLogFilter, Debug::Verbose, "Some other thread running this task [%p]\n", (*iter).Get()); + taskAvaliable = false; + } + } + } + if(taskAvaliable) { nextTask = *iter;