mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
prevent stream notifications from interfering with reload (#29467)
This commit is contained in:
parent
03900bc814
commit
edd4c6207a
@ -215,7 +215,7 @@ class HotRunner extends ResidentRunner {
|
||||
printStatus('Running in benchmark mode.');
|
||||
// Measure time to perform a hot restart.
|
||||
printStatus('Benchmarking hot restart');
|
||||
await restart(fullRestart: true);
|
||||
await restart(fullRestart: true, benchmarkMode: true);
|
||||
printStatus('Benchmarking hot reload');
|
||||
// Measure time to perform a hot reload.
|
||||
await restart(fullRestart: false);
|
||||
@ -402,7 +402,7 @@ class HotRunner extends ResidentRunner {
|
||||
|
||||
}
|
||||
|
||||
Future<OperationResult> _restartFromSources({ String reason }) async {
|
||||
Future<OperationResult> _restartFromSources({ String reason, bool benchmarkMode = false }) async {
|
||||
final Map<String, String> analyticsParameters =
|
||||
reason == null
|
||||
? null
|
||||
@ -465,6 +465,25 @@ class HotRunner extends ResidentRunner {
|
||||
restartTimer.elapsed.inMilliseconds);
|
||||
flutterUsage.sendEvent('hot', 'restart', parameters: analyticsParameters);
|
||||
flutterUsage.sendTiming('hot', 'restart', restartTimer.elapsed);
|
||||
|
||||
// In benchmark mode, make sure all stream notifications have finished.
|
||||
if (benchmarkMode) {
|
||||
final List<Future<void>> isolateNotifications = <Future<void>>[];
|
||||
for (FlutterDevice device in flutterDevices) {
|
||||
for (FlutterView view in device.views) {
|
||||
isolateNotifications.add(
|
||||
view.owner.vm.vmService.onIsolateEvent.then((Stream<ServiceEvent> serviceEvents) async {
|
||||
await for (ServiceEvent serviceEvent in serviceEvents) {
|
||||
if (serviceEvent.owner.name.contains('_spawn') && serviceEvent.kind == ServiceEvent.kIsolateExit) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}),
|
||||
);
|
||||
}
|
||||
}
|
||||
await Future.wait(isolateNotifications);
|
||||
}
|
||||
return OperationResult.ok;
|
||||
}
|
||||
|
||||
@ -511,7 +530,7 @@ class HotRunner extends ResidentRunner {
|
||||
bool get supportsRestart => true;
|
||||
|
||||
@override
|
||||
Future<OperationResult> restart({ bool fullRestart = false, bool pauseAfterRestart = false, String reason }) async {
|
||||
Future<OperationResult> restart({ bool fullRestart = false, bool pauseAfterRestart = false, String reason, bool benchmarkMode = false }) async {
|
||||
final Stopwatch timer = Stopwatch()..start();
|
||||
if (fullRestart) {
|
||||
if (!canHotRestart) {
|
||||
@ -525,7 +544,7 @@ class HotRunner extends ResidentRunner {
|
||||
try {
|
||||
if (!(await hotRunnerConfig.setupHotRestart()))
|
||||
return OperationResult(1, 'setupHotRestart failed');
|
||||
final OperationResult result = await _restartFromSources(reason: reason);
|
||||
final OperationResult result = await _restartFromSources(reason: reason, benchmarkMode: benchmarkMode,);
|
||||
if (!result.isOk)
|
||||
return result;
|
||||
} finally {
|
||||
@ -573,7 +592,7 @@ class HotRunner extends ResidentRunner {
|
||||
}
|
||||
}
|
||||
|
||||
Future<OperationResult> _reloadSources({ bool pause = false, String reason, void Function(String message) onSlow }) async {
|
||||
Future<OperationResult> _reloadSources({ bool pause = false, String reason, void Function(String message) onSlow, }) async {
|
||||
final Map<String, String> analyticsParameters = <String, String>{};
|
||||
if (reason != null) {
|
||||
analyticsParameters[kEventReloadReasonParameterName] = reason;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user