From 11046be524c8a8418a2db2a30d491503c9c78bbf Mon Sep 17 00:00:00 2001 From: Kenzie Schmoll Date: Fri, 31 May 2024 08:53:23 -0700 Subject: [PATCH 1/3] Add a flag to `serve` and `build` commands to use wasm --- tool/lib/commands/build.dart | 33 ++++++++++++++++++++------------- tool/lib/commands/serve.dart | 22 ++++++++++++++-------- tool/lib/commands/shared.dart | 9 +++++++++ 3 files changed, 43 insertions(+), 21 deletions(-) diff --git a/tool/lib/commands/build.dart b/tool/lib/commands/build.dart index baf7a417e28..c627a1ffae9 100644 --- a/tool/lib/commands/build.dart +++ b/tool/lib/commands/build.dart @@ -43,7 +43,8 @@ class BuildCommand extends Command { ..addUpdateFlutterFlag() ..addUpdatePerfettoFlag() ..addPubGetFlag() - ..addBulidModeOption(); + ..addBulidModeOption() + ..addWasmFlag(); } @override @@ -56,14 +57,14 @@ class BuildCommand extends Command { Future run() async { final repo = DevToolsRepo.getInstance(); final processManager = ProcessManager(); - + final results = argResults!; final updateFlutter = - argResults![BuildCommandArgs.updateFlutter.flagName] as bool; + results[BuildCommandArgs.updateFlutter.flagName] as bool; final updatePerfetto = - argResults![BuildCommandArgs.updatePerfetto.flagName] as bool; - final runPubGet = argResults![BuildCommandArgs.pubGet.flagName] as bool; - final buildMode = - argResults![BuildCommandArgs.buildMode.flagName] as String; + results[BuildCommandArgs.updatePerfetto.flagName] as bool; + final runPubGet = results[BuildCommandArgs.pubGet.flagName] as bool; + final buildMode = results[BuildCommandArgs.buildMode.flagName] as String; + final useWasm = results[BuildCommandArgs.wasm.flagName] as bool; final webBuildDir = Directory(path.join(repo.devtoolsAppDirectoryPath, 'build', 'web')); @@ -87,7 +88,9 @@ class BuildCommand extends Command { workingDirectory: repo.devtoolsAppDirectoryPath, ); - logStatus('building DevTools in $buildMode mode'); + logStatus( + 'building DevTools in $buildMode mode${useWasm ? ' with dart2wasm' : ''}', + ); await processManager.runAll( commands: [ if (runPubGet) CliCommand.tool(['pub-get', '--only-main']), @@ -95,12 +98,16 @@ class BuildCommand extends Command { [ 'build', 'web', - '--web-renderer', - 'canvaskit', + if (useWasm) + '--wasm' + else ...[ + '--web-renderer', + 'canvaskit', + // Do not minify stack traces in debug mode. + if (buildMode == 'debug') '--dart2js-optimization=O1', + if (buildMode != 'debug') '--$buildMode', + ], '--pwa-strategy=offline-first', - // Do not minify stack traces in debug mode. - if (buildMode == 'debug') '--dart2js-optimization=O1', - if (buildMode != 'debug') '--$buildMode', '--no-tree-shake-icons', ], ), diff --git a/tool/lib/commands/serve.dart b/tool/lib/commands/serve.dart index 2a9d913dc92..1c9e2a2e9be 100644 --- a/tool/lib/commands/serve.dart +++ b/tool/lib/commands/serve.dart @@ -4,6 +4,7 @@ import 'dart:io'; +import 'package:args/args.dart'; import 'package:args/command_runner.dart'; import 'package:devtools_tool/model.dart'; import 'package:devtools_tool/utils.dart'; @@ -79,6 +80,7 @@ class ServeCommand extends Command { ..addUpdatePerfettoFlag() ..addPubGetFlag() ..addBulidModeOption() + ..addWasmFlag() // Flags defined in the server in DDS. ..addFlag( _machineFlag, @@ -120,22 +122,25 @@ class ServeCommand extends Command { final repo = DevToolsRepo.getInstance(); final processManager = ProcessManager(); - final buildApp = argResults![_buildAppFlag] as bool; - final debugServer = argResults![_debugServerFlag] as bool; + final results = argResults!; + final buildApp = results[_buildAppFlag] as bool; + final debugServer = results[_debugServerFlag] as bool; final updateFlutter = - argResults![BuildCommandArgs.updateFlutter.flagName] as bool; + results[BuildCommandArgs.updateFlutter.flagName] as bool; final updatePerfetto = - argResults![BuildCommandArgs.updatePerfetto.flagName] as bool; - final runPubGet = argResults![BuildCommandArgs.pubGet.flagName] as bool; + results[BuildCommandArgs.updatePerfetto.flagName] as bool; + final useWasm = results[BuildCommandArgs.wasm.flagName] as bool; + final runPubGet = results[BuildCommandArgs.pubGet.flagName] as bool; final devToolsAppBuildMode = - argResults![BuildCommandArgs.buildMode.flagName] as String; - final serveWithDartSdk = argResults![_serveWithDartSdkFlag] as String?; + results[BuildCommandArgs.buildMode.flagName] as String; + final serveWithDartSdk = results[_serveWithDartSdkFlag] as String?; // Any flag that we aren't removing here is intended to be passed through. - final remainingArguments = List.of(argResults!.arguments) + final remainingArguments = List.of(results.arguments) ..remove(BuildCommandArgs.updateFlutter.asArg()) ..remove(BuildCommandArgs.updateFlutter.asArg(negated: true)) ..remove(BuildCommandArgs.updatePerfetto.asArg()) + ..remove(BuildCommandArgs.wasm.asArg()) ..remove(valueAsArg(_buildAppFlag)) ..remove(valueAsArg(_buildAppFlag, negated: true)) ..remove(valueAsArg(_debugServerFlag)) @@ -174,6 +179,7 @@ class ServeCommand extends Command { 'build', BuildCommandArgs.updateFlutter.asArg(negated: !updateFlutter), if (updatePerfetto) BuildCommandArgs.updatePerfetto.asArg(), + if (useWasm) BuildCommandArgs.wasm.asArg(), '${BuildCommandArgs.buildMode.asArg()}=$devToolsAppBuildMode', BuildCommandArgs.pubGet.asArg(negated: !runPubGet), ]), diff --git a/tool/lib/commands/shared.dart b/tool/lib/commands/shared.dart index e5fe849119f..117fda56fe3 100644 --- a/tool/lib/commands/shared.dart +++ b/tool/lib/commands/shared.dart @@ -50,11 +50,20 @@ extension BuildCommandArgsExtension on ArgParser { '"tool/flutter-sdk" directory.', ); } + + void addWasmFlag() { + addFlag( + BuildCommandArgs.wasm.flagName, + defaultsTo: false, + help: 'Whether to build DevTools with dart2wasm instead of dart2js.', + ); + } } enum BuildCommandArgs { buildMode('build-mode'), pubGet('pub-get'), + wasm('wasm'), updateFlutter('update-flutter'), updatePerfetto('update-perfetto'); From 330330d8918715106ef304760a75b07e05041eb5 Mon Sep 17 00:00:00 2001 From: Kenzie Schmoll Date: Fri, 31 May 2024 08:55:45 -0700 Subject: [PATCH 2/3] fix log --- tool/lib/commands/build.dart | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tool/lib/commands/build.dart b/tool/lib/commands/build.dart index c627a1ffae9..ec0c8c82b5e 100644 --- a/tool/lib/commands/build.dart +++ b/tool/lib/commands/build.dart @@ -89,7 +89,8 @@ class BuildCommand extends Command { ); logStatus( - 'building DevTools in $buildMode mode${useWasm ? ' with dart2wasm' : ''}', + 'building DevTools in $buildMode mode with ' + '${useWasm ? 'dart2wasm' : 'dart2js'}', ); await processManager.runAll( commands: [ From 6e543fcbb40b152f369f3605acaa732ac7954df5 Mon Sep 17 00:00:00 2001 From: Kenzie Schmoll Date: Fri, 31 May 2024 09:09:25 -0700 Subject: [PATCH 3/3] lints --- tool/lib/commands/release_helper.dart | 3 +-- tool/lib/commands/serve.dart | 1 - tool/lib/model.dart | 3 +-- 3 files changed, 2 insertions(+), 5 deletions(-) diff --git a/tool/lib/commands/release_helper.dart b/tool/lib/commands/release_helper.dart index da7ad09057b..ffc6bbac091 100644 --- a/tool/lib/commands/release_helper.dart +++ b/tool/lib/commands/release_helper.dart @@ -17,8 +17,7 @@ class ReleaseHelperCommand extends Command { argParser.addFlag( _debugFlag, negatable: false, - help: - 'Whether to run this script for development purposes. This allows ' + help: 'Whether to run this script for development purposes. This allows ' 'local changes to be made to this script without throwing an ' 'exception, and will checkout the current branch after executing.', ); diff --git a/tool/lib/commands/serve.dart b/tool/lib/commands/serve.dart index 1c9e2a2e9be..15a7f9e6280 100644 --- a/tool/lib/commands/serve.dart +++ b/tool/lib/commands/serve.dart @@ -4,7 +4,6 @@ import 'dart:io'; -import 'package:args/args.dart'; import 'package:args/command_runner.dart'; import 'package:devtools_tool/model.dart'; import 'package:devtools_tool/utils.dart'; diff --git a/tool/lib/model.dart b/tool/lib/model.dart index 0191d71476c..f808f26e684 100644 --- a/tool/lib/model.dart +++ b/tool/lib/model.dart @@ -206,8 +206,7 @@ class FlutterSdk { static String get dartWrapperExecutableName => Platform.isWindows ? 'dart.bat' : 'dart'; - String get flutterExePath => - path.join(sdkPath, 'bin', flutterExecutableName); + String get flutterExePath => path.join(sdkPath, 'bin', flutterExecutableName); String get dartExePath => path.join(sdkPath, 'bin', dartWrapperExecutableName);