@@ -9,6 +9,7 @@ import 'package:dwds/src/events.dart';
9
9
import 'package:dwds/src/services/chrome_debug_exception.dart' ;
10
10
import 'package:dwds/src/services/chrome_proxy_service.dart' ;
11
11
import 'package:dwds/src/services/debug_service.dart' ;
12
+ import 'package:dwds/src/utilities/shared.dart' ;
12
13
import 'package:dwds/src/utilities/synchronized.dart' ;
13
14
import 'package:logging/logging.dart' ;
14
15
import 'package:uuid/uuid.dart' ;
@@ -252,11 +253,19 @@ Future<Map<String, dynamic>> _hotRestart(
252
253
// restart. Only return success after the isolate has fully started.
253
254
final stream = chromeProxyService.onEvent ('Isolate' );
254
255
try {
256
+ // If we should pause isolates on start, then only run main once we get a
257
+ // resume event.
258
+ final pauseIsolatesOnStart = chromeProxyService.pauseIsolatesOnStart;
259
+ if (pauseIsolatesOnStart) {
260
+ _waitForResumeEventToRunMain (chromeProxyService);
261
+ }
255
262
// Generate run id to hot restart all apps loaded into the tab.
256
263
final runId = const Uuid ().v4 ().toString ();
257
264
_logger.info ('Issuing \$ dartHotRestartDwds request' );
258
- await chromeProxyService.inspector
259
- .jsEvaluate ('\$ dartHotRestartDwds(\' $runId \' );' , awaitPromise: true );
265
+ await chromeProxyService.inspector.jsEvaluate (
266
+ '\$ dartHotRestartDwds(\' $runId \' , $pauseIsolatesOnStart );' ,
267
+ awaitPromise: true ,
268
+ );
260
269
_logger.info ('\$ dartHotRestartDwds request complete.' );
261
270
} on WipError catch (exception) {
262
271
final code = exception.error? ['code' ];
@@ -289,6 +298,26 @@ Future<Map<String, dynamic>> _hotRestart(
289
298
return {'result' : Success ().toJson ()};
290
299
}
291
300
301
+ void _waitForResumeEventToRunMain (
302
+ ChromeProxyService chromeProxyService,
303
+ ) {
304
+ final issuedReadyToRunMainCompleter = Completer <void >();
305
+
306
+ final resumeEventsSubscription =
307
+ chromeProxyService.resumeAfterHotRestartEventsStream.listen ((_) async {
308
+ await chromeProxyService.inspector.jsEvaluate ('\$ dartReadyToRunMain();' );
309
+ if (! issuedReadyToRunMainCompleter.isCompleted) {
310
+ issuedReadyToRunMainCompleter.complete ();
311
+ }
312
+ });
313
+
314
+ safeUnawaited (
315
+ issuedReadyToRunMainCompleter.future.then ((_) {
316
+ resumeEventsSubscription.cancel ();
317
+ }),
318
+ );
319
+ }
320
+
292
321
Future <Map <String , dynamic >> _fullReload (
293
322
ChromeProxyService chromeProxyService,
294
323
) async {
0 commit comments