Fix `?compiler=js` escape hatch for wasm-compiled DevTools (#9615)
diff --git a/packages/devtools_app/lib/src/shared/analytics/constants.dart b/packages/devtools_app/lib/src/shared/analytics/constants.dart index 68ca5b5..45450f8 100644 --- a/packages/devtools_app/lib/src/shared/analytics/constants.dart +++ b/packages/devtools_app/lib/src/shared/analytics/constants.dart
@@ -57,6 +57,10 @@ /// Wasm. const jsFallback = 'jsFallback'; +/// Event that signals we forced the dart2js compiler via the compiler=js query +/// parameter. +const forceLoadJs = 'forceLoadJs'; + // DevTools UI action selected (clicked). // Main bar UX actions:
diff --git a/packages/devtools_app/lib/src/shared/preferences/preferences.dart b/packages/devtools_app/lib/src/shared/preferences/preferences.dart index d1ae1de..06ee38c 100644 --- a/packages/devtools_app/lib/src/shared/preferences/preferences.dart +++ b/packages/devtools_app/lib/src/shared/preferences/preferences.dart
@@ -42,7 +42,14 @@ /// Whether a user has opted out of the dart2wasm experiment. wasmOptOut; - String get storageKey => '$storagePrefix.$name'; + String get storageKey { + if (name == 'wasm') { + _log.warning( + '[deprecated] The "wasm" key is deprecated, use "wasmOptOut" instead.', + ); + } + return '$storagePrefix.$name'; + } static const storagePrefix = 'experiment'; } @@ -180,13 +187,16 @@ Future<void> _initWasmEnabled() async { wasmEnabled.value = kIsWasm; + final queryParams = DevToolsQueryParams.load(); // If the user forced the dart2js-compiled DevTools via query parameter, // then set the storage value to match. This will persist across multiple // sessions of DevTools. - if (DevToolsQueryParams.load().useJs) { + final jsEnabledFromQueryParams = queryParams.useJs; + if (jsEnabledFromQueryParams) { safeUnawaited( - storage.setValue(_ExperimentPreferences.wasm.storageKey, 'false'), + storage.setValue(_ExperimentPreferences.wasmOptOut.storageKey, 'true'), ); + ga.impression(gac.devToolsMain, gac.forceLoadJs); } addAutoDisposeListener(wasmEnabled, () async { @@ -218,8 +228,6 @@ defaultsTo: false, ); final enabledFromStorage = !optOutFromStorage; - - final queryParams = DevToolsQueryParams.load(); final enabledFromQueryParams = queryParams.useWasm; if (enabledFromQueryParams && !kIsWasm) { @@ -247,6 +255,7 @@ final shouldEnableWasm = (enabledFromStorage || enabledFromQueryParams) && + !jsEnabledFromQueryParams && kIsWeb && // Wasm cannot be enabled if DevTools was built using `flutter run`. !usingDebugDevToolsServer;