@@ -280,6 +280,7 @@ class IsolateManager {
280
280
);
281
281
}
282
282
}
283
+ await _determineRequireUserPermissionToResumeFromFlags ();
283
284
_initialized = true ;
284
285
}
285
286
@@ -383,14 +384,10 @@ class IsolateManager {
383
384
DartDevelopmentServiceClient client,
384
385
json_rpc.Parameters parameters,
385
386
) async {
386
- int pauseTypeMask = 0 ;
387
- if (parameters['onPauseStart' ].asBoolOr (false )) {
388
- pauseTypeMask | = PauseTypeMasks .pauseOnStartMask;
389
- }
390
- if (parameters['onPauseExit' ].asBoolOr (false )) {
391
- pauseTypeMask | = PauseTypeMasks .pauseOnExitMask;
392
- }
393
- _requireUserPermissionToResumeMask = pauseTypeMask;
387
+ _setRequireUserPermissionToResume (
388
+ onPauseStart: parameters['onPauseStart' ].asBoolOr (false ),
389
+ onPauseExit: parameters['onPauseExit' ].asBoolOr (false ),
390
+ );
394
391
395
392
// Check if isolates have been waiting for a user resume and resume any
396
393
// isolates that no longer need to wait for a user resume.
@@ -415,6 +412,51 @@ class IsolateManager {
415
412
};
416
413
}
417
414
415
+ Future <void > _determineRequireUserPermissionToResumeFromFlags () async {
416
+ try {
417
+ final result = await dds.vmServiceClient.sendRequest ('getFlagList' )
418
+ as Map <String , dynamic >;
419
+ final flagList = FlagList .parse (result);
420
+ final flags = flagList! .flags! ;
421
+
422
+ bool ? pauseOnStartValue;
423
+ bool ? pauseOnExitValue;
424
+ for (final flag in flags) {
425
+ if (flag.name == 'pause_isolates_on_start' ) {
426
+ pauseOnStartValue = flag.valueAsString == 'true' ;
427
+ }
428
+ if (flag.name == 'pause_isolates_on_exit' ) {
429
+ pauseOnExitValue = flag.valueAsString == 'true' ;
430
+ }
431
+ if (pauseOnStartValue != null && pauseOnExitValue != null ) {
432
+ break ;
433
+ }
434
+ }
435
+
436
+ _setRequireUserPermissionToResume (
437
+ onPauseStart: pauseOnStartValue ?? false ,
438
+ onPauseExit: pauseOnExitValue ?? false ,
439
+ );
440
+ } catch (_) {
441
+ // Swallow any errors. Otherwise, this will cause initialization to
442
+ // silently fail.
443
+ }
444
+ }
445
+
446
+ void _setRequireUserPermissionToResume ({
447
+ required bool onPauseStart,
448
+ required bool onPauseExit,
449
+ }) {
450
+ int pauseTypeMask = 0 ;
451
+ if (onPauseStart) {
452
+ pauseTypeMask | = PauseTypeMasks .pauseOnStartMask;
453
+ }
454
+ if (onPauseExit) {
455
+ pauseTypeMask | = PauseTypeMasks .pauseOnExitMask;
456
+ }
457
+ _requireUserPermissionToResumeMask = pauseTypeMask;
458
+ }
459
+
418
460
Future <Map <String , dynamic >> getCachedCpuSamples (
419
461
json_rpc.Parameters parameters) async {
420
462
final isolateId = parameters['isolateId' ].asString;
0 commit comments