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;