diff --git a/packages/devtools_app/lib/src/shared/analytics/constants.dart b/packages/devtools_app/lib/src/shared/analytics/constants.dart index 68ca5b59077..45450f842d9 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 @@ const memoryPressureReduce = 'memoryPressureReduce'; /// 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 d1ae1de01de..06ee38c5f8b 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 @@ enum _ExperimentPreferences { /// 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 @@ class PreferencesController extends DisposableController Future _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 @@ class PreferencesController extends DisposableController defaultsTo: false, ); final enabledFromStorage = !optOutFromStorage; - - final queryParams = DevToolsQueryParams.load(); final enabledFromQueryParams = queryParams.useWasm; if (enabledFromQueryParams && !kIsWasm) { @@ -247,6 +255,7 @@ class PreferencesController extends DisposableController final shouldEnableWasm = (enabledFromStorage || enabledFromQueryParams) && + !jsEnabledFromQueryParams && kIsWeb && // Wasm cannot be enabled if DevTools was built using `flutter run`. !usingDebugDevToolsServer;