[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