Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions dwds/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
- Remove unused `clientFuture` arg from `DwdsVmClient` methods.
- Fix pausing starting of `main` after the hot restart.
- Updating bootstrapper for DDC library bundler module format + Frontend Server.
- Fix setting up breakpoints when handling in-app restarts with attached debugger.

## 26.2.2

Expand Down
8 changes: 8 additions & 0 deletions dwds/lib/src/connections/app_connection.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import 'dart:async';
import 'dart:convert';

import 'package:dwds/data/connect_request.dart';
import 'package:dwds/data/hot_restart_request.dart';
import 'package:dwds/data/run_request.dart';
import 'package:dwds/data/serializers.dart';
import 'package:dwds/src/handlers/socket_connections.dart';
Expand Down Expand Up @@ -46,4 +47,11 @@ class AppConnection {
_connection.sink.add(jsonEncode(serializers.serialize(RunRequest())));
_startedCompleter.complete();
}

/// The request to restart when no debugger attached.
///
/// In this case, there's no need to block main execution until the debugger
/// resends breakpoints.
void hotRestart(HotRestartRequest request) =>
_connection.sink.add(jsonEncode(serializers.serialize(request)));
}
20 changes: 20 additions & 0 deletions dwds/lib/src/handlers/dev_handler.dart
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import 'package:dwds/data/debug_event.dart';
import 'package:dwds/data/devtools_request.dart';
import 'package:dwds/data/error_response.dart';
import 'package:dwds/data/hot_reload_response.dart';
import 'package:dwds/data/hot_restart_request.dart';
import 'package:dwds/data/hot_restart_response.dart';
import 'package:dwds/data/isolate_events.dart';
import 'package:dwds/data/register_event.dart';
Expand Down Expand Up @@ -413,6 +414,11 @@ class DevHandler {
final proxyService = _servicesByAppId[appId]?.proxyService;

if (proxyService == null) {
if (message is HotRestartRequest) {
_logger.finest('No debugger, let the app handle the restart itself.');
connection.hotRestart(message);
return;
}
_logger.warning(
'No proxy service found for appId: $appId to process $message',
);
Expand All @@ -436,6 +442,20 @@ class DevHandler {
proxyService.parseDebugEvent(message);
} else if (message is RegisterEvent) {
proxyService.parseRegisterEvent(message);
} else if (message is HotRestartRequest) {
final services = _servicesByAppId[appId]!;
if (services.dwdsVmClient is! ChromeDwdsVmClient ||
services.proxyService is! ChromeProxyService) {
throw UnsupportedError(
'In-app restart requests are only supported by '
'ChromeDwdsVmClient and ChromeProxyService',
);
}
final chromeClient = services.dwdsVmClient as ChromeDwdsVmClient;
final chromeProxyService = services.proxyService as ChromeProxyService;
unawaited(
chromeClient.hotRestart(chromeProxyService, chromeClient.client),
);
} else {
final serviceType = proxyService is WebSocketProxyService
? 'WebSocket'
Expand Down
Loading