From 9cd77fd0718d8fd84c4e856111529bf498d61bb4 Mon Sep 17 00:00:00 2001 From: Abhishek Amit Date: Wed, 17 Jan 2018 16:59:36 -0800 Subject: [PATCH] Add API for embedder clients to process platform events (flutter/engine#4549) --- engine/src/flutter/fml/message_loop.cc | 4 ++++ engine/src/flutter/fml/message_loop.h | 4 ++++ engine/src/flutter/fml/message_loop_impl.h | 6 ++++-- engine/src/flutter/shell/platform/embedder/embedder.cc | 6 ++++++ engine/src/flutter/shell/platform/embedder/embedder.h | 6 ++++++ 5 files changed, 24 insertions(+), 2 deletions(-) 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