From c663cd55a7a84319c2fdcfc25cfeaf9961ce822a Mon Sep 17 00:00:00 2001 From: Jason Simmons Date: Tue, 7 Apr 2020 15:41:02 -0700 Subject: [PATCH] [flutter_tools] Refresh VM state before executing hot reload (#53960) --- packages/flutter_tools/lib/src/resident_runner.dart | 7 +++++++ packages/flutter_tools/lib/src/run_hot.dart | 1 + .../test/general.shard/resident_runner_test.dart | 1 + 3 files changed, 9 insertions(+) diff --git a/packages/flutter_tools/lib/src/resident_runner.dart b/packages/flutter_tools/lib/src/resident_runner.dart index 26dbd04ae8c..f719d8366f8 100644 --- a/packages/flutter_tools/lib/src/resident_runner.dart +++ b/packages/flutter_tools/lib/src/resident_runner.dart @@ -825,6 +825,13 @@ abstract class ResidentRunner { await Future.wait(futures); } + Future refreshVM() async { + final List> futures = >[ + for (final FlutterDevice device in flutterDevices) device.getVMs(), + ]; + await Future.wait(futures); + } + Future debugDumpApp() async { await refreshViews(); for (final FlutterDevice device in flutterDevices) { diff --git a/packages/flutter_tools/lib/src/run_hot.dart b/packages/flutter_tools/lib/src/run_hot.dart index 727e062e1b0..3df2c5b4e33 100644 --- a/packages/flutter_tools/lib/src/run_hot.dart +++ b/packages/flutter_tools/lib/src/run_hot.dart @@ -798,6 +798,7 @@ class HotRunner extends ResidentRunner { if (!_isPaused()) { globals.printTrace('Refreshing active FlutterViews before reloading.'); + await refreshVM(); await refreshViews(); } diff --git a/packages/flutter_tools/test/general.shard/resident_runner_test.dart b/packages/flutter_tools/test/general.shard/resident_runner_test.dart index 925156e6946..5e3d1e2f05b 100644 --- a/packages/flutter_tools/test/general.shard/resident_runner_test.dart +++ b/packages/flutter_tools/test/general.shard/resident_runner_test.dart @@ -111,6 +111,7 @@ void main() { }); when(mockFlutterDevice.vmService).thenReturn(mockVMService); when(mockFlutterDevice.refreshViews()).thenAnswer((Invocation invocation) async { }); + when(mockFlutterDevice.getVMs()).thenAnswer((Invocation invocation) async { }); when(mockFlutterDevice.reloadSources(any, pause: anyNamed('pause'))).thenReturn(>>[ Future>.value({ 'type': 'ReloadReport',