[embedder] Workaround to unify the multiple async::Loops on the main platform
thread
Change-Id: I899c8510e43db58b19eeef2a9a92b40d1c1fcce2
Reviewed-on: https://fuchsia-review.googlesource.com/c/flutter-embedder/+/757787
Reviewed-by: Naud Ghebre <naudzghebre@google.com>
Reviewed-by: Alexander Biggs <akbiggs@google.com>
diff --git a/scripts/sync_engine_to_revision.sh b/scripts/sync_engine_to_revision.sh
index 04673aa..dd98810 100755
--- a/scripts/sync_engine_to_revision.sh
+++ b/scripts/sync_engine_to_revision.sh
@@ -79,6 +79,9 @@
font_initialization_data_fix=2aa6de94a2d16a50982b0b8ab5a09fa4bc0443b5
get_engine_fix "naudzghebre" "${font_initialization_data_fix}" "to get API change to embedder.h for setting font_initialization_data.."
+async_msg_loop_fix=1275e614f23b46b5a77f39563b73acd038309428
+get_engine_fix "bergkampben" "${async_msg_loop_fix}" "to get API change to fix the issue with multiple async::Loops for the main platform thread"
+
popd # "${embedder_engine_dir}"/flutter
echo "${engine_revision}" > "${FUCHSIA_EMBEDDER_DIR}"/src/embedder/engine/engine_revision
diff --git a/src/embedder/engine/debug_x64/libflutter_engine.so b/src/embedder/engine/debug_x64/libflutter_engine.so
index 543f513..486854e 100755
--- a/src/embedder/engine/debug_x64/libflutter_engine.so
+++ b/src/embedder/engine/debug_x64/libflutter_engine.so
Binary files differ
diff --git a/src/embedder/engine/embedder.h b/src/embedder/engine/embedder.h
index 53cd409..34cf5ca 100644
--- a/src/embedder/engine/embedder.h
+++ b/src/embedder/engine/embedder.h
@@ -2597,6 +2597,10 @@
VoidCallback callback,
void* user_data);
+// Temporary hack
+FLUTTER_EXPORT
+void FlutterEngineRunMessageLoop();
+
#endif // !FLUTTER_ENGINE_NO_PROTOTYPES
// Typedefs for the function pointers in FlutterEngineProcTable.
@@ -2719,6 +2723,7 @@
FLUTTER_API_SYMBOL(FlutterEngine) engine,
VoidCallback callback,
void* user_data);
+typedef void (*FlutterEngineRunMessageLoopCallbackFnPtr)();
/// Function-pointer-based versions of the APIs above.
typedef struct {
@@ -2765,6 +2770,7 @@
FlutterEngineNotifyDisplayUpdateFnPtr NotifyDisplayUpdate;
FlutterEngineScheduleFrameFnPtr ScheduleFrame;
FlutterEngineSetNextFrameCallbackFnPtr SetNextFrameCallback;
+ FlutterEngineRunMessageLoopCallbackFnPtr RunMessageLoopCallback;
} FlutterEngineProcTable;
//------------------------------------------------------------------------------
diff --git a/src/embedder/main.cc b/src/embedder/main.cc
index b6cd7d5..e6750c1 100644
--- a/src/embedder/main.cc
+++ b/src/embedder/main.cc
@@ -34,6 +34,7 @@
#include "src/embedder/software_surface.h"
#include "src/embedder/text_delegate.h"
#include "src/embedder/touch_delegate.h"
+#include "src/embedder/fuchsia_logger.h"
namespace embedder {
namespace {
@@ -243,16 +244,8 @@
return EXIT_FAILURE;
}
- // Attaching the async loop to the current thread must happen
- // immediately after RunFlutterApp to ensure that bindings in the embedder
- // use the embedder's dispatcher to send requests instead of the Dart VM's
- // dispatcher.
- //
- // Bindings created in the embedder before this line will never get fired.
- //
- // TODO(https://fxbug.dev/75282): Remove the logic in the Dart VM that sets its
- // own default dispatcher to reduce the amount of global state.
- async::Loop loop(&kAsyncLoopConfigAttachToCurrentThread);
+ // Ensure default dispatcher is set after caling RunFlutterApp
+ FX_CHECK(async_get_default_dispatcher());
// Necessary to get Flutter to render frames.
FlutterWindowMetricsEvent window_metrics_event = {
@@ -378,7 +371,7 @@
// Our run loop's dispatcher must be used to serve the component context in
// order for requests' handlers to get called while we're looping.
- status = embedder.component_context->outgoing()->ServeFromStartupInfo(loop.dispatcher());
+ status = embedder.component_context->outgoing()->ServeFromStartupInfo();
if (status != ZX_OK) {
FX_LOGF(ERROR, embedder::kLogTag, "Failed to serve component context: %s",
zx_status_get_string(status));
@@ -405,8 +398,8 @@
return EXIT_FAILURE;
}
- // Loop until we're done.
- loop.Run();
+ // TODO(benbergkamp): temporary workaround
+ FlutterEngineRunMessageLoop();
FX_LOG(INFO, embedder::kLogTag, "Done looping.");
return EXIT_SUCCESS;
diff --git a/third_party/depot_tools b/third_party/depot_tools
index d9db3f6..9d351f8 160000
--- a/third_party/depot_tools
+++ b/third_party/depot_tools
@@ -1 +1 @@
-Subproject commit d9db3f6fd8ec38121d5255b8fbded901e7ca16eb
+Subproject commit 9d351f8b5aa6d0362eae0c6d32b4e9b6ef3207bf