- UpdateProxy& updateProxyImpl = *iter.updateProxyImpl;
- updateProxyImpl.SetCurrentBufferIndex( bufferIndex );
- Dali::UpdateProxy updateProxy( updateProxyImpl );
- iter.frameCallback->Update( updateProxy, elapsedSeconds );
+ DALI_TRACE_BEGIN(gTraceFilter, "DALI_FRAME_CALLBACK_UPDATE");
+
+ // If any of the FrameCallback::Update calls returns false, then they are no longer required & can be removed.
+ auto iter = std::remove_if(
+ mFrameCallbacks.begin(), mFrameCallbacks.end(), [&](OwnerPointer<FrameCallback>& frameCallback) {
+ return !frameCallback->Update(bufferIndex, elapsedSeconds, mNodeHierarchyChanged);
+ });
+ mFrameCallbacks.erase(iter, mFrameCallbacks.end());
+
+ DALI_TRACE_END(gTraceFilter, "DALI_FRAME_CALLBACK_UPDATE");