[Tizen] Seperate flag whether KeepRendering called or FrameUpdateCallback return... 59/303959/1
authorEunki, Hong <eunkiki.hong@samsung.com>
Mon, 8 Jan 2024 11:02:03 +0000 (20:02 +0900)
committerEunki, Hong <eunkiki.hong@samsung.com>
Mon, 8 Jan 2024 11:02:03 +0000 (20:02 +0900)
Change-Id: Iac4a9ef0fb021f93865291b67c8065e53ac1930f
Signed-off-by: Eunki, Hong <eunkiki.hong@samsung.com>
dali/integration-api/core.h
dali/internal/update/manager/update-manager.cpp

index c8d2a61..c851127 100644 (file)
@@ -65,7 +65,8 @@ enum Reasons
   STAGE_KEEP_RENDERING   = 1 << 1, ///<  - Stage::KeepRendering() is being used
   ANIMATIONS_RUNNING     = 1 << 2, ///< - Animations are ongoing
   MONITORING_PERFORMANCE = 1 << 3, ///< - The --enable-performance-monitor option is being used
-  RENDER_TASK_SYNC       = 1 << 4  ///< - A render task is waiting for render sync
+  RENDER_TASK_SYNC       = 1 << 4, ///< - A render task is waiting for render sync
+  FRAME_UPDATE_CALLBACK  = 1 << 5  ///< - Some FrameUpdateCallback return true.
 };
 }
 
index ca5f458..8cc38a4 100644 (file)
@@ -1008,6 +1008,8 @@ uint32_t UpdateManager::Update(float    elapsedSeconds,
 
   uint32_t keepUpdating          = 0;
   bool     keepRendererRendering = false;
+  bool     keepRendererRenderingByFrameUpdateCallback = false;
+
   mImpl->renderingRequired       = false;
 
   // Although the scene-graph may not require an update, we still need to synchronize double-buffered
@@ -1057,7 +1059,7 @@ uint32_t UpdateManager::Update(float    elapsedSeconds,
     // Call the frame-callback-processor if set
     if(mImpl->frameCallbackProcessor)
     {
-      keepRendererRendering |= mImpl->frameCallbackProcessor->Update(bufferIndex, elapsedSeconds);
+      keepRendererRenderingByFrameUpdateCallback |= mImpl->frameCallbackProcessor->Update(bufferIndex, elapsedSeconds);
     }
 
     // Update node hierarchy, apply constraints,
@@ -1208,7 +1210,12 @@ uint32_t UpdateManager::Update(float    elapsedSeconds,
     keepUpdating |= KeepUpdating::STAGE_KEEP_RENDERING;
   }
 
-  if(keepUpdating & KeepUpdating::STAGE_KEEP_RENDERING)
+  if(keepRendererRenderingByFrameUpdateCallback)
+  {
+    keepUpdating |= KeepUpdating::FRAME_UPDATE_CALLBACK;
+  }
+
+  if(keepUpdating & (KeepUpdating::STAGE_KEEP_RENDERING | KeepUpdating::FRAME_UPDATE_CALLBACK))
   {
     // Set dirty flags for next frame to continue rendering
     mImpl->nodeDirtyFlags |= RenderableUpdateFlags;