Fix restart/reload benchmark synchronization (#11282) Changes introduced in https://github.com/flutter/engine/commit/8ba522eeae35d8c70ada3c7b8e200ca2274f4f95 has removed from the `_flutter.listViews` the thread synchronization side effect used during benchmarks. The thread synchronization is restored via the new `_flutter.flushUIThreadTasks` RPC. Fixes https://github.com/flutter/flutter/issues/11241 Related https://github.com/flutter/engine/pull/3898
diff --git a/packages/flutter_tools/lib/src/run_hot.dart b/packages/flutter_tools/lib/src/run_hot.dart index 51300a6..e908bf0 100644 --- a/packages/flutter_tools/lib/src/run_hot.dart +++ b/packages/flutter_tools/lib/src/run_hot.dart
@@ -153,7 +153,6 @@ // Measure time to perform a hot restart. printStatus('Benchmarking hot restart'); await restart(fullRestart: true); - await refreshViews(); // TODO(johnmccutchan): Modify script entry point. printStatus('Benchmarking hot reload'); // Measure time to perform a hot reload. @@ -313,6 +312,11 @@ deviceEntryUri, devicePackagesUri, deviceAssetsDirectoryUri); + if (benchmarkMode) { + for (FlutterDevice device in flutterDevices) + for (FlutterView view in device.views) + await view.flushUIThreadTasks(); + } } }
diff --git a/packages/flutter_tools/lib/src/vmservice.dart b/packages/flutter_tools/lib/src/vmservice.dart index 8aea4b3..9b255ce 100644 --- a/packages/flutter_tools/lib/src/vmservice.dart +++ b/packages/flutter_tools/lib/src/vmservice.dart
@@ -1230,6 +1230,10 @@ bool get hasIsolate => _uiIsolate != null; + Future<Null> flushUIThreadTasks() async { + await owner.vm.invokeRpcRaw('_flutter.flushUIThreadTasks'); + } + @override String toString() => id; }