diff --git a/engine/src/flutter/fml/message_loop.cc b/engine/src/flutter/fml/message_loop.cc index cdc081fad2..4765cfa765 100644 --- a/engine/src/flutter/fml/message_loop.cc +++ b/engine/src/flutter/fml/message_loop.cc @@ -71,4 +71,8 @@ void MessageLoop::RemoveTaskObserver(TaskObserver* observer) { loop_->RemoveTaskObserver(observer); } +void MessageLoop::RunExpiredTasksNow() { + loop_->RunExpiredTasksNow(); +} + } // namespace fml diff --git a/engine/src/flutter/fml/message_loop.h b/engine/src/flutter/fml/message_loop.h index a9f32285ac..87773619cc 100644 --- a/engine/src/flutter/fml/message_loop.h +++ b/engine/src/flutter/fml/message_loop.h @@ -30,6 +30,10 @@ class MessageLoop { fxl::RefPtr GetTaskRunner() const; + // Exposed for the embedder shell which allows clients to poll for events + // instead of dedicating a thread to the message loop. + void RunExpiredTasksNow(); + static void EnsureInitializedForCurrentThread(); static bool IsInitializedForCurrentThread(); diff --git a/engine/src/flutter/fml/message_loop_impl.h b/engine/src/flutter/fml/message_loop_impl.h index 92a9b482d4..551c8ca064 100644 --- a/engine/src/flutter/fml/message_loop_impl.h +++ b/engine/src/flutter/fml/message_loop_impl.h @@ -43,11 +43,13 @@ class MessageLoopImpl : public fxl::RefCountedThreadSafe { void DoTerminate(); + // Exposed for the embedder shell which allows clients to poll for events + // instead of dedicating a thread to the message loop. + void RunExpiredTasksNow(); + protected: MessageLoopImpl(); - void RunExpiredTasksNow(); - private: struct DelayedTask { size_t order; diff --git a/engine/src/flutter/shell/platform/embedder/embedder.cc b/engine/src/flutter/shell/platform/embedder/embedder.cc index 05fd6718a9..38819f1760 100644 --- a/engine/src/flutter/shell/platform/embedder/embedder.cc +++ b/engine/src/flutter/shell/platform/embedder/embedder.cc @@ -8,6 +8,7 @@ #include #include "flutter/common/threads.h" +#include "flutter/fml/message_loop.h" #include "flutter/shell/platform/embedder/platform_view_embedder.h" #include "lib/fxl/functional/make_copyable.h" @@ -321,3 +322,8 @@ FlutterResult FlutterEngineSendPlatformMessageResponse( return kSuccess; } + +FlutterResult __FlutterEngineFlushPendingTasksNow() { + fml::MessageLoop::GetCurrent().RunExpiredTasksNow(); + return kSuccess; +} diff --git a/engine/src/flutter/shell/platform/embedder/embedder.h b/engine/src/flutter/shell/platform/embedder/embedder.h index c4d8f3404c..b1eef4296f 100644 --- a/engine/src/flutter/shell/platform/embedder/embedder.h +++ b/engine/src/flutter/shell/platform/embedder/embedder.h @@ -167,6 +167,12 @@ FlutterResult FlutterEngineSendPlatformMessageResponse( const uint8_t* data, size_t data_length); +// This API is only meant to be used by platforms that need to flush tasks on a +// message loop not controlled by the Flutter engine. This API will be +// deprecated soon. +FLUTTER_EXPORT +FlutterResult __FlutterEngineFlushPendingTasksNow(); + #if defined(__cplusplus) } // extern "C" #endif