Skip to content

Commit 8eb9189

Browse files
authored
Fix ?compiler=js escape hatch for wasm-compiled DevTools (#9615)
1 parent 22c619f commit 8eb9189

File tree

2 files changed

+18
-5
lines changed

2 files changed

+18
-5
lines changed

packages/devtools_app/lib/src/shared/analytics/constants.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,10 @@ const memoryPressureReduce = 'memoryPressureReduce';
5757
/// Wasm.
5858
const jsFallback = 'jsFallback';
5959

60+
/// Event that signals we forced the dart2js compiler via the compiler=js query
61+
/// parameter.
62+
const forceLoadJs = 'forceLoadJs';
63+
6064
// DevTools UI action selected (clicked).
6165

6266
// Main bar UX actions:

packages/devtools_app/lib/src/shared/preferences/preferences.dart

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,14 @@ enum _ExperimentPreferences {
4242
/// Whether a user has opted out of the dart2wasm experiment.
4343
wasmOptOut;
4444

45-
String get storageKey => '$storagePrefix.$name';
45+
String get storageKey {
46+
if (name == 'wasm') {
47+
_log.warning(
48+
'[deprecated] The "wasm" key is deprecated, use "wasmOptOut" instead.',
49+
);
50+
}
51+
return '$storagePrefix.$name';
52+
}
4653

4754
static const storagePrefix = 'experiment';
4855
}
@@ -180,13 +187,16 @@ class PreferencesController extends DisposableController
180187
Future<void> _initWasmEnabled() async {
181188
wasmEnabled.value = kIsWasm;
182189

190+
final queryParams = DevToolsQueryParams.load();
183191
// If the user forced the dart2js-compiled DevTools via query parameter,
184192
// then set the storage value to match. This will persist across multiple
185193
// sessions of DevTools.
186-
if (DevToolsQueryParams.load().useJs) {
194+
final jsEnabledFromQueryParams = queryParams.useJs;
195+
if (jsEnabledFromQueryParams) {
187196
safeUnawaited(
188-
storage.setValue(_ExperimentPreferences.wasm.storageKey, 'false'),
197+
storage.setValue(_ExperimentPreferences.wasmOptOut.storageKey, 'true'),
189198
);
199+
ga.impression(gac.devToolsMain, gac.forceLoadJs);
190200
}
191201

192202
addAutoDisposeListener(wasmEnabled, () async {
@@ -218,8 +228,6 @@ class PreferencesController extends DisposableController
218228
defaultsTo: false,
219229
);
220230
final enabledFromStorage = !optOutFromStorage;
221-
222-
final queryParams = DevToolsQueryParams.load();
223231
final enabledFromQueryParams = queryParams.useWasm;
224232

225233
if (enabledFromQueryParams && !kIsWasm) {
@@ -247,6 +255,7 @@ class PreferencesController extends DisposableController
247255

248256
final shouldEnableWasm =
249257
(enabledFromStorage || enabledFromQueryParams) &&
258+
!jsEnabledFromQueryParams &&
250259
kIsWeb &&
251260
// Wasm cannot be enabled if DevTools was built using `flutter run`.
252261
!usingDebugDevToolsServer;

0 commit comments

Comments
 (0)