@@ -158,17 +158,8 @@ class ResidentWebRunner extends ResidentRunner {
158158 @override
159159 bool get debuggingEnabled => isRunningDebug && deviceIsDebuggable;
160160
161- /// Device is debuggable if not a WebServer device, or if running with
162- /// --start-paused or using DWDS WebSocket connection (WebServer device).
163- bool get deviceIsDebuggable =>
164- device! .device is ! WebServerDevice ||
165- debuggingOptions.startPaused ||
166- _useDwdsWebSocketConnection;
167-
168- bool get _useDwdsWebSocketConnection {
169- final DevFS ? devFS = device? .devFS;
170- return devFS is WebDevFS && devFS.useDwdsWebSocketConnection;
171- }
161+ /// WebServer device is debuggable when running with --start-paused.
162+ bool get deviceIsDebuggable => device! .device is ! WebServerDevice || debuggingOptions.startPaused;
172163
173164 @override
174165 // Web uses a different plugin registry.
@@ -799,102 +790,86 @@ class ResidentWebRunner extends ResidentRunner {
799790 Uri ? websocketUri;
800791 if (supportsServiceProtocol) {
801792 assert (connectDebug != null );
802- unawaited (
803- connectDebug! .then ((connectionResult) async {
804- _connectionResult = connectionResult;
805- unawaited (_connectionResult! .debugConnection! .onDone.whenComplete (_cleanupAndExit));
793+ _connectionResult = await connectDebug;
794+ unawaited (_connectionResult! .debugConnection! .onDone.whenComplete (_cleanupAndExit));
806795
807- void onLogEvent (vmservice.Event event) {
808- final String message = processVmServiceMessage (event);
809- _logger.printStatus (message);
810- }
811-
812- // This flag is needed to manage breakpoints properly.
813- if (debuggingOptions.startPaused && debuggingOptions.debuggingEnabled) {
814- try {
815- final vmservice.Response result = await _vmService.service.setFlag (
816- 'pause_isolates_on_start' ,
817- 'true' ,
818- );
819- if (result is ! vmservice.Success ) {
820- _logger.printError ('setFlag failure: $result ' );
821- }
822- } on Exception catch (e) {
823- _logger.printError (
824- 'Failed to set pause_isolates_on_start=true, proceeding. '
825- 'Error: $e ' ,
826- );
827- }
828- }
796+ void onLogEvent (vmservice.Event event) {
797+ final String message = processVmServiceMessage (event);
798+ _logger.printStatus (message);
799+ }
829800
830- _stdOutSub = _vmService.service.onStdoutEvent.listen (onLogEvent);
831- _stdErrSub = _vmService.service.onStderrEvent.listen (onLogEvent);
832- _serviceSub = _vmService.service.onServiceEvent.listen (_onServiceEvent);
833- try {
834- await _vmService.service.streamListen (vmservice.EventStreams .kStdout);
835- } on vmservice.RPCError {
836- // It is safe to ignore this error because we expect an error to be
837- // thrown if we're already subscribed.
838- }
839- try {
840- await _vmService.service.streamListen (vmservice.EventStreams .kStderr);
841- } on vmservice.RPCError {
842- // It is safe to ignore this error because we expect an error to be
843- // thrown if we're already subscribed.
844- }
845- try {
846- await _vmService.service.streamListen (vmservice.EventStreams .kService);
847- } on vmservice.RPCError {
848- // It is safe to ignore this error because we expect an error to be
849- // thrown if we're already subscribed.
850- }
851- try {
852- await _vmService.service.streamListen (vmservice.EventStreams .kIsolate);
853- } on vmservice.RPCError {
854- // It is safe to ignore this error because we expect an error to be
855- // thrown if we're not already subscribed.
801+ // This flag is needed to manage breakpoints properly.
802+ if (debuggingOptions.startPaused && debuggingOptions.debuggingEnabled) {
803+ try {
804+ final vmservice.Response result = await _vmService.service.setFlag (
805+ 'pause_isolates_on_start' ,
806+ 'true' ,
807+ );
808+ if (result is ! vmservice.Success ) {
809+ _logger.printError ('setFlag failure: $result ' );
856810 }
857- await setUpVmService (
858- reloadSources: (String isolateId, {bool ? force, bool ? pause}) async {
859- await restart (pause: pause);
860- },
861- device: device! .device,
862- flutterProject: flutterProject,
863- printStructuredErrorLogMethod: printStructuredErrorLog,
864- vmService: _vmService.service,
811+ } on Exception catch (e) {
812+ _logger.printError (
813+ 'Failed to set pause_isolates_on_start=true, proceeding. '
814+ 'Error: $e ' ,
865815 );
816+ }
817+ }
866818
867- websocketUri = Uri .parse (_connectionResult! .debugConnection! .uri);
868- device! .vmService = _vmService;
819+ _stdOutSub = _vmService.service.onStdoutEvent.listen (onLogEvent);
820+ _stdErrSub = _vmService.service.onStderrEvent.listen (onLogEvent);
821+ _serviceSub = _vmService.service.onServiceEvent.listen (_onServiceEvent);
822+ try {
823+ await _vmService.service.streamListen (vmservice.EventStreams .kStdout);
824+ } on vmservice.RPCError {
825+ // It is safe to ignore this error because we expect an error to be
826+ // thrown if we're already subscribed.
827+ }
828+ try {
829+ await _vmService.service.streamListen (vmservice.EventStreams .kStderr);
830+ } on vmservice.RPCError {
831+ // It is safe to ignore this error because we expect an error to be
832+ // thrown if we're already subscribed.
833+ }
834+ try {
835+ await _vmService.service.streamListen (vmservice.EventStreams .kService);
836+ } on vmservice.RPCError {
837+ // It is safe to ignore this error because we expect an error to be
838+ // thrown if we're already subscribed.
839+ }
840+ try {
841+ await _vmService.service.streamListen (vmservice.EventStreams .kIsolate);
842+ } on vmservice.RPCError {
843+ // It is safe to ignore this error because we expect an error to be
844+ // thrown if we're not already subscribed.
845+ }
846+ await setUpVmService (
847+ reloadSources: (String isolateId, {bool ? force, bool ? pause}) async {
848+ await restart (pause: pause);
849+ },
850+ device: device! .device,
851+ flutterProject: flutterProject,
852+ printStructuredErrorLogMethod: printStructuredErrorLog,
853+ vmService: _vmService.service,
854+ );
869855
870- // Run main immediately if the app is not started paused or if there
871- // is no debugger attached. Otherwise, runMain when a resume event
872- // is received.
873- if (! debuggingOptions.startPaused || ! supportsServiceProtocol) {
874- _connectionResult! .appConnection! .runMain ();
875- } else {
876- late StreamSubscription <void > resumeSub;
877- resumeSub = _vmService.service.onDebugEvent.listen ((vmservice.Event event) {
878- if (event.type == vmservice.EventKind .kResume) {
879- _connectionResult! .appConnection! .runMain ();
880- resumeSub.cancel ();
881- }
882- });
883- }
856+ websocketUri = Uri .parse (_connectionResult! .debugConnection! .uri);
857+ device! .vmService = _vmService;
884858
885- if (websocketUri != null ) {
886- if (debuggingOptions.vmserviceOutFile != null ) {
887- _fileSystem.file (debuggingOptions.vmserviceOutFile)
888- ..createSync (recursive: true )
889- ..writeAsStringSync (websocketUri.toString ());
890- }
891- _logger.printStatus ('Debug service listening on $websocketUri ' );
859+ // Run main immediately if the app is not started paused or if there
860+ // is no debugger attached. Otherwise, runMain when a resume event
861+ // is received.
862+ if (! debuggingOptions.startPaused || ! supportsServiceProtocol) {
863+ _connectionResult! .appConnection! .runMain ();
864+ } else {
865+ late StreamSubscription <void > resumeSub;
866+ resumeSub = _vmService.service.onDebugEvent.listen ((vmservice.Event event) {
867+ if (event.type == vmservice.EventKind .kResume) {
868+ _connectionResult! .appConnection! .runMain ();
869+ resumeSub.cancel ();
892870 }
893- connectionInfoCompleter? .complete (DebugConnectionInfo (wsUri: websocketUri));
894- }),
895- );
896- } else {
897- connectionInfoCompleter? .complete (DebugConnectionInfo ());
871+ });
872+ }
898873 }
899874 // TODO(bkonyi): remove when ready to serve DevTools from DDS.
900875 if (debuggingOptions.enableDevTools) {
@@ -906,8 +881,16 @@ class ResidentWebRunner extends ResidentRunner {
906881 ),
907882 );
908883 }
909-
884+ if (websocketUri != null ) {
885+ if (debuggingOptions.vmserviceOutFile != null ) {
886+ _fileSystem.file (debuggingOptions.vmserviceOutFile)
887+ ..createSync (recursive: true )
888+ ..writeAsStringSync (websocketUri.toString ());
889+ }
890+ _logger.printStatus ('Debug service listening on $websocketUri ' );
891+ }
910892 appStartedCompleter? .complete ();
893+ connectionInfoCompleter? .complete (DebugConnectionInfo (wsUri: websocketUri));
911894 if (stayResident) {
912895 await waitForAppToFinish ();
913896 } else {
0 commit comments