Skip to content

Commit 1931dc9

Browse files
author
Anna Gringauze
authored
Support lazily created SDK configurations. (#1510)
* Support lazily created SDK configurations. - Add SdkConfigurationInterface and a default implementation. - Pass SdkConfiguration to dwds and ExpressionCompilerService. - Add tests. * Fix SDK Uris on Windows * Fix more Uris on Windows * Reworked SdkConfiguration * Pass filesystem to SdkConfiguration.validate methods for tests * Reverted accidental comment changes. * Disabled flaky test * Enable previously flaky test to test the fix * Allow tests to use empty SDK configuration * Disable flaky tests
1 parent 16dbb30 commit 1931dc9

14 files changed

+479
-124
lines changed

dwds/lib/dwds.dart

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import 'src/readers/asset_reader.dart';
2424
import 'src/servers/devtools.dart';
2525
import 'src/servers/extension_backend.dart';
2626
import 'src/services/expression_compiler.dart';
27-
import 'src/utilities/dart_uri.dart';
27+
import 'src/utilities/sdk_configuration.dart';
2828

2929
export 'src/connections/app_connection.dart' show AppConnection;
3030
export 'src/connections/debug_connection.dart' show DebugConnection;
@@ -50,6 +50,8 @@ export 'src/services/expression_compiler.dart'
5050
show ExpressionCompilationResult, ExpressionCompiler, ModuleInfo;
5151
export 'src/services/expression_compiler_service.dart'
5252
show ExpressionCompilerService;
53+
export 'src/utilities/sdk_configuration.dart'
54+
show SdkConfiguration, SdkConfigurationProvider;
5355

5456
typedef ConnectionProvider = Future<ChromeConnection> Function();
5557
typedef UrlEncoder = Future<String> Function(String url);
@@ -115,8 +117,7 @@ class Dwds {
115117
bool enableDevtoolsLaunch,
116118
DevtoolsLauncher devtoolsLauncher,
117119
bool launchDevToolsInNewWindow,
118-
Uri sdkDir,
119-
Uri librariesPath,
120+
SdkConfigurationProvider sdkConfigurationProvider,
120121
bool emitDebugEvents,
121122
}) async {
122123
hostname ??= 'localhost';
@@ -131,7 +132,7 @@ class Dwds {
131132
globalLoadStrategy = loadStrategy;
132133
emitDebugEvents ??= true;
133134

134-
await DartUri.initialize(sdkDir: sdkDir, librariesPath: librariesPath);
135+
sdkConfigurationProvider ??= DefaultSdkConfigurationProvider();
135136

136137
DevTools devTools;
137138
Future<String> extensionUri;
@@ -188,6 +189,7 @@ class Dwds {
188189
injected,
189190
spawnDds,
190191
launchDevToolsInNewWindow,
192+
sdkConfigurationProvider,
191193
);
192194

193195
return Dwds._(

dwds/lib/src/debugging/inspector.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import '../readers/asset_reader.dart';
1717
import '../utilities/conversions.dart';
1818
import '../utilities/dart_uri.dart';
1919
import '../utilities/domain.dart';
20+
import '../utilities/sdk_configuration.dart';
2021
import '../utilities/shared.dart';
2122
import 'classes.dart';
2223
import 'debugger.dart';
@@ -64,6 +65,7 @@ class AppInspector extends Domain {
6465

6566
/// The root URI from which the application is served.
6667
final String _root;
68+
final SdkConfiguration _sdkConfiguration;
6769

6870
AppInspector._(
6971
this.appConnection,
@@ -77,6 +79,7 @@ class AppInspector extends Domain {
7779
this._locations,
7880
this._root,
7981
this._executionContext,
82+
this._sdkConfiguration,
8083
) : isolateRef = _toIsolateRef(isolate),
8184
super.forInspector();
8285

@@ -91,6 +94,7 @@ class AppInspector extends Domain {
9194

9295
var scripts = await scriptRefs;
9396

97+
await DartUri.initialize(_sdkConfiguration);
9498
await DartUri.recordAbsoluteUris(libraries.map((lib) => lib.uri));
9599
await DartUri.recordAbsoluteUris(scripts.map((script) => script.uri));
96100

@@ -112,6 +116,7 @@ class AppInspector extends Domain {
112116
String root,
113117
Debugger debugger,
114118
ExecutionContext executionContext,
119+
SdkConfiguration sdkConfiguration,
115120
) async {
116121
var id = createId();
117122
var time = DateTime.now().millisecondsSinceEpoch;
@@ -156,6 +161,7 @@ class AppInspector extends Domain {
156161
locations,
157162
root,
158163
executionContext,
164+
sdkConfiguration,
159165
);
160166
await appInspector._initialize();
161167
return appInspector;

dwds/lib/src/handlers/dev_handler.dart

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ class DevHandler {
6666
final bool _launchDevToolsInNewWindow;
6767
final ExpressionCompiler _expressionCompiler;
6868
final DwdsInjector _injected;
69+
final SdkConfigurationProvider _sdkConfigurationProvider;
6970

7071
/// Null until [close] is called.
7172
///
@@ -75,21 +76,23 @@ class DevHandler {
7576
Stream<AppConnection> get connectedApps => _connectedApps.stream;
7677

7778
DevHandler(
78-
this._chromeConnection,
79-
this.buildResults,
80-
this._devTools,
81-
this._assetReader,
82-
this._loadStrategy,
83-
this._hostname,
84-
this._extensionBackend,
85-
this._urlEncoder,
86-
this._useSseForDebugProxy,
87-
this._useSseForInjectedClient,
88-
this._serveDevTools,
89-
this._expressionCompiler,
90-
this._injected,
91-
this._spawnDds,
92-
this._launchDevToolsInNewWindow) {
79+
this._chromeConnection,
80+
this.buildResults,
81+
this._devTools,
82+
this._assetReader,
83+
this._loadStrategy,
84+
this._hostname,
85+
this._extensionBackend,
86+
this._urlEncoder,
87+
this._useSseForDebugProxy,
88+
this._useSseForInjectedClient,
89+
this._serveDevTools,
90+
this._expressionCompiler,
91+
this._injected,
92+
this._spawnDds,
93+
this._launchDevToolsInNewWindow,
94+
this._sdkConfigurationProvider,
95+
) {
9396
_subs.add(buildResults.listen(_emitBuildResults));
9497
_listen();
9598
if (_extensionBackend != null) {
@@ -210,6 +213,7 @@ class DevHandler {
210213
useSse: false,
211214
expressionCompiler: _expressionCompiler,
212215
spawnDds: _spawnDds,
216+
sdkConfigurationProvider: _sdkConfigurationProvider,
213217
);
214218
}
215219

@@ -499,6 +503,7 @@ class DevHandler {
499503
useSse: _useSseForDebugProxy,
500504
expressionCompiler: _expressionCompiler,
501505
spawnDds: _spawnDds,
506+
sdkConfigurationProvider: _sdkConfigurationProvider,
502507
);
503508
var appServices = await _createAppDebugServices(
504509
devToolsRequest.appId,

dwds/lib/src/services/chrome_proxy_service.dart

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,8 @@ class ChromeProxyService implements VmServiceInterface {
9494
final ExpressionCompiler _compiler;
9595
ExpressionEvaluator _expressionEvaluator;
9696

97+
final SdkConfigurationProvider _sdkConfigurationProvider;
98+
9799
bool terminatingIsolates = false;
98100

99101
ChromeProxyService._(
@@ -106,6 +108,7 @@ class ChromeProxyService implements VmServiceInterface {
106108
this._skipLists,
107109
this.executionContext,
108110
this._compiler,
111+
this._sdkConfigurationProvider,
109112
) {
110113
var debugger = Debugger.create(
111114
remoteDebugger,
@@ -126,6 +129,7 @@ class ChromeProxyService implements VmServiceInterface {
126129
AppConnection appConnection,
127130
ExecutionContext executionContext,
128131
ExpressionCompiler expressionCompiler,
132+
SdkConfigurationProvider sdkConfigurationProvider,
129133
) async {
130134
final vm = VM(
131135
name: 'ChromeDebugProxy',
@@ -155,6 +159,7 @@ class ChromeProxyService implements VmServiceInterface {
155159
skipLists,
156160
executionContext,
157161
expressionCompiler,
162+
sdkConfigurationProvider,
158163
);
159164
unawaited(service.createIsolate(appConnection));
160165
return service;
@@ -211,6 +216,7 @@ class ChromeProxyService implements VmServiceInterface {
211216
// Issue: https://github.com/dart-lang/webdev/issues/1282
212217
var debugger = await _debugger;
213218
await _initializeEntrypoint(appConnection.request.entrypointPath);
219+
var sdkConfiguration = await _sdkConfigurationProvider.configuration;
214220

215221
debugger.notifyPausedAtStart();
216222
_inspector = await AppInspector.initialize(
@@ -221,6 +227,7 @@ class ChromeProxyService implements VmServiceInterface {
221227
uri,
222228
debugger,
223229
executionContext,
230+
sdkConfiguration,
224231
);
225232

226233
_expressionEvaluator = _compiler == null
@@ -1035,6 +1042,10 @@ ${globalLoadStrategy.loadModuleSnippet}("dart_sdk").developer.invokeExtension(
10351042
String isolateId, String breakpointId, bool enable) =>
10361043
throw UnimplementedError();
10371044

1045+
@override
1046+
Future<Success> streamCpuSamplesWithUserTag(List<String> userTags) =>
1047+
throw UnimplementedError();
1048+
10381049
/// Prevent DWDS from blocking Dart SDK rolls if changes in package:vm_service
10391050
/// are unimplemented in DWDS.
10401051
@override

dwds/lib/src/services/debug_service.dart

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -203,28 +203,32 @@ class DebugService {
203203
}
204204

205205
static Future<DebugService> start(
206-
String hostname,
207-
RemoteDebugger remoteDebugger,
208-
ExecutionContext executionContext,
209-
String tabUrl,
210-
AssetReader assetReader,
211-
LoadStrategy loadStrategy,
212-
AppConnection appConnection,
213-
UrlEncoder urlEncoder,
214-
{void Function(Map<String, dynamic>) onRequest,
215-
void Function(Map<String, dynamic>) onResponse,
216-
bool spawnDds = true,
217-
bool useSse,
218-
ExpressionCompiler expressionCompiler}) async {
206+
String hostname,
207+
RemoteDebugger remoteDebugger,
208+
ExecutionContext executionContext,
209+
String tabUrl,
210+
AssetReader assetReader,
211+
LoadStrategy loadStrategy,
212+
AppConnection appConnection,
213+
UrlEncoder urlEncoder, {
214+
void Function(Map<String, dynamic>) onRequest,
215+
void Function(Map<String, dynamic>) onResponse,
216+
bool spawnDds = true,
217+
bool useSse,
218+
ExpressionCompiler expressionCompiler,
219+
SdkConfigurationProvider sdkConfigurationProvider,
220+
}) async {
219221
useSse ??= false;
220222
var chromeProxyService = await ChromeProxyService.create(
221-
remoteDebugger,
222-
tabUrl,
223-
assetReader,
224-
loadStrategy,
225-
appConnection,
226-
executionContext,
227-
expressionCompiler);
223+
remoteDebugger,
224+
tabUrl,
225+
assetReader,
226+
loadStrategy,
227+
appConnection,
228+
executionContext,
229+
expressionCompiler,
230+
sdkConfigurationProvider,
231+
);
228232
var authToken = _makeAuthToken();
229233
var serviceExtensionRegistry = ServiceExtensionRegistry();
230234
Handler handler;

0 commit comments

Comments
 (0)