Skip to content

Commit c627dbf

Browse files
authored
Add --frontend-server-starter-path option to flutter run and flutter test (#135038)
1 parent da1f801 commit c627dbf

18 files changed

Lines changed: 184 additions & 8 deletions

File tree

packages/flutter_tools/bin/macos_assemble.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ BuildApp() {
123123
"-dSplitDebugInfo=${SPLIT_DEBUG_INFO}"
124124
"-dTrackWidgetCreation=${TRACK_WIDGET_CREATION}"
125125
"-dAction=${ACTION}"
126+
"-dFrontendServerStarterPath=${FRONTEND_SERVER_STARTER_PATH}"
126127
"--DartDefines=${DART_DEFINES}"
127128
"--ExtraGenSnapshotOptions=${EXTRA_GEN_SNAPSHOT_OPTIONS}"
128129
"--ExtraFrontEndOptions=${EXTRA_FRONT_END_OPTIONS}"

packages/flutter_tools/bin/tool_backend.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ Future<void> main(List<String> arguments) async {
1313

1414
final String? dartDefines = Platform.environment['DART_DEFINES'];
1515
final bool dartObfuscation = Platform.environment['DART_OBFUSCATION'] == 'true';
16+
final String? frontendServerStarterPath = Platform.environment['FRONTEND_SERVER_STARTER_PATH'];
1617
final String? extraFrontEndOptions = Platform.environment['EXTRA_FRONT_END_OPTIONS'];
1718
final String? extraGenSnapshotOptions = Platform.environment['EXTRA_GEN_SNAPSHOT_OPTIONS'];
1819
final String? flutterEngine = Platform.environment['FLUTTER_ENGINE'];
@@ -106,6 +107,8 @@ or
106107
'--DartDefines=$dartDefines',
107108
if (extraGenSnapshotOptions != null)
108109
'--ExtraGenSnapshotOptions=$extraGenSnapshotOptions',
110+
if (frontendServerStarterPath != null)
111+
'-dFrontendServerStarterPath=$frontendServerStarterPath',
109112
if (extraFrontEndOptions != null)
110113
'--ExtraFrontEndOptions=$extraFrontEndOptions',
111114
target,

packages/flutter_tools/bin/xcode_backend.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -402,6 +402,7 @@ class Context {
402402
'-dTrackWidgetCreation=${environment['TRACK_WIDGET_CREATION'] ?? ''}',
403403
'-dDartObfuscation=${environment['DART_OBFUSCATION'] ?? ''}',
404404
'-dAction=${environment['ACTION'] ?? ''}',
405+
'-dFrontendServerStarterPath=${environment['FRONTEND_SERVER_STARTER_PATH'] ?? ''}',
405406
'--ExtraGenSnapshotOptions=${environment['EXTRA_GEN_SNAPSHOT_OPTIONS'] ?? ''}',
406407
'--DartDefines=${environment['DART_DEFINES'] ?? ''}',
407408
'--ExtraFrontEndOptions=${environment['EXTRA_FRONT_END_OPTIONS'] ?? ''}',

packages/flutter_tools/gradle/src/main/groovy/flutter.groovy

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -964,6 +964,10 @@ class FlutterPlugin implements Plugin<Project> {
964964
if (project.hasProperty('track-widget-creation')) {
965965
trackWidgetCreationValue = project.property('track-widget-creation').toBoolean()
966966
}
967+
String frontendServerStarterPathValue = null
968+
if (project.hasProperty('frontend-server-starter-path')) {
969+
frontendServerStarterPathValue = project.property('frontend-server-starter-path')
970+
}
967971
String extraFrontEndOptionsValue = null
968972
if (project.hasProperty('extra-front-end-options')) {
969973
extraFrontEndOptionsValue = project.property('extra-front-end-options')
@@ -1052,6 +1056,7 @@ class FlutterPlugin implements Plugin<Project> {
10521056
targetPlatformValues = targetPlatforms
10531057
sourceDir getFlutterSourceDirectory()
10541058
intermediateDir project.file("${project.buildDir}/$INTERMEDIATES_DIR/flutter/${variant.name}/")
1059+
frontendServerStarterPath frontendServerStarterPathValue
10551060
extraFrontEndOptions extraFrontEndOptionsValue
10561061
extraGenSnapshotOptions extraGenSnapshotOptionsValue
10571062
splitDebugInfo splitDebugInfoValue
@@ -1290,6 +1295,8 @@ abstract class BaseFlutterTask extends DefaultTask {
12901295
@Internal
12911296
File intermediateDir
12921297
@Optional @Input
1298+
String frontendServerStarterPath
1299+
@Optional @Input
12931300
String extraFrontEndOptions
12941301
@Optional @Input
12951302
String extraGenSnapshotOptions
@@ -1394,6 +1401,9 @@ abstract class BaseFlutterTask extends DefaultTask {
13941401
if (extraGenSnapshotOptions != null) {
13951402
args "--ExtraGenSnapshotOptions=${extraGenSnapshotOptions}"
13961403
}
1404+
if (frontendServerStarterPath != null) {
1405+
args "-dFrontendServerStarterPath=${frontendServerStarterPath}"
1406+
}
13971407
if (extraFrontEndOptions != null) {
13981408
args "--ExtraFrontEndOptions=${extraFrontEndOptions}"
13991409
}

packages/flutter_tools/lib/src/build_info.dart

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ class BuildInfo {
2323
this.mode,
2424
this.flavor, {
2525
this.trackWidgetCreation = false,
26+
this.frontendServerStarterPath,
2627
List<String>? extraFrontEndOptions,
2728
List<String>? extraGenSnapshotOptions,
2829
List<String>? fileSystemRoots,
@@ -82,6 +83,10 @@ class BuildInfo {
8283
/// Whether the build should track widget creation locations.
8384
final bool trackWidgetCreation;
8485

86+
/// If provided, the frontend server will be started in JIT mode from this
87+
/// file.
88+
final String? frontendServerStarterPath;
89+
8590
/// Extra command-line options for front-end.
8691
final List<String> extraFrontEndOptions;
8792

@@ -237,6 +242,8 @@ class BuildInfo {
237242
if (dartDefines.isNotEmpty)
238243
kDartDefines: encodeDartDefines(dartDefines),
239244
kDartObfuscation: dartObfuscation.toString(),
245+
if (frontendServerStarterPath != null)
246+
kFrontendServerStarterPath: frontendServerStarterPath!,
240247
if (extraFrontEndOptions.isNotEmpty)
241248
kExtraFrontEndOptions: extraFrontEndOptions.join(','),
242249
if (extraGenSnapshotOptions.isNotEmpty)
@@ -274,6 +281,8 @@ class BuildInfo {
274281
if (dartDefines.isNotEmpty)
275282
'DART_DEFINES': encodeDartDefines(dartDefines),
276283
'DART_OBFUSCATION': dartObfuscation.toString(),
284+
if (frontendServerStarterPath != null)
285+
'FRONTEND_SERVER_STARTER_PATH': frontendServerStarterPath!,
277286
if (extraFrontEndOptions.isNotEmpty)
278287
'EXTRA_FRONT_END_OPTIONS': extraFrontEndOptions.join(','),
279288
if (extraGenSnapshotOptions.isNotEmpty)
@@ -310,6 +319,8 @@ class BuildInfo {
310319
if (dartDefines.isNotEmpty)
311320
'-Pdart-defines=${encodeDartDefines(dartDefines)}',
312321
'-Pdart-obfuscation=$dartObfuscation',
322+
if (frontendServerStarterPath != null)
323+
'-Pfrontend-server-starter-path=$frontendServerStarterPath',
313324
if (extraFrontEndOptions.isNotEmpty)
314325
'-Pextra-front-end-options=${extraFrontEndOptions.join(',')}',
315326
if (extraGenSnapshotOptions.isNotEmpty)
@@ -901,6 +912,9 @@ const String kTargetFile = 'TargetFile';
901912
/// Whether to enable or disable track widget creation.
902913
const String kTrackWidgetCreation = 'TrackWidgetCreation';
903914

915+
/// If provided, the frontend server will be started in JIT mode from this file.
916+
const String kFrontendServerStarterPath = 'FrontendServerStarterPath';
917+
904918
/// Additional configuration passed to the dart front end.
905919
///
906920
/// This is expected to be a comma separated list of strings.

packages/flutter_tools/lib/src/build_system/targets/common.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,7 @@ class KernelSnapshot extends Target {
178178
final TargetPlatform targetPlatform = getTargetPlatformForName(targetPlatformEnvironment);
179179

180180
// This configuration is all optional.
181+
final String? frontendServerStarterPath = environment.defines[kFrontendServerStarterPath];
181182
final List<String> extraFrontEndOptions = decodeCommaSeparated(environment.defines, kExtraFrontEndOptions);
182183
final List<String>? fileSystemRoots = environment.defines[kFileSystemRoots]?.split(',');
183184
final String? fileSystemScheme = environment.defines[kFileSystemScheme];
@@ -254,6 +255,7 @@ class KernelSnapshot extends Target {
254255
linkPlatformKernelIn: forceLinkPlatform || buildMode.isPrecompiled,
255256
mainPath: targetFileAbsolute,
256257
depFilePath: environment.buildDir.childFile('kernel_snapshot.d').path,
258+
frontendServerStarterPath: frontendServerStarterPath,
257259
extraFrontEndOptions: extraFrontEndOptions,
258260
fileSystemRoots: fileSystemRoots,
259261
fileSystemScheme: fileSystemScheme,

packages/flutter_tools/lib/src/commands/run.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,7 @@ class RunCommand extends RunCommandBase {
315315
requiresPubspecYaml();
316316
usesFilesystemOptions(hide: !verboseHelp);
317317
usesExtraDartFlagOptions(verboseHelp: verboseHelp);
318+
usesFrontendServerStarterPathOption(verboseHelp: verboseHelp);
318319
addEnableExperimentation(hide: !verboseHelp);
319320
usesInitializeFromDillOption(hide: !verboseHelp);
320321

packages/flutter_tools/lib/src/commands/test.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ class TestCommand extends FlutterCommand with DeviceBasedDevelopmentArtifacts {
6767
requiresPubspecYaml();
6868
usesPubOption();
6969
addNullSafetyModeOptions(hide: !verboseHelp);
70+
usesFrontendServerStarterPathOption(verboseHelp: verboseHelp);
7071
usesTrackWidgetCreation(verboseHelp: verboseHelp);
7172
addEnableExperimentation(hide: !verboseHelp);
7273
usesDartDefineOption();

packages/flutter_tools/lib/src/compile.dart

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,7 @@ class KernelCompiler {
227227
TargetModel targetModel = TargetModel.flutter,
228228
bool linkPlatformKernelIn = false,
229229
bool aot = false,
230+
String? frontendServerStarterPath,
230231
List<String>? extraFrontEndOptions,
231232
List<String>? fileSystemRoots,
232233
String? fileSystemScheme,
@@ -243,10 +244,12 @@ class KernelCompiler {
243244
String? nativeAssets,
244245
}) async {
245246
final TargetPlatform? platform = targetModel == TargetModel.dartdevc ? TargetPlatform.web_javascript : null;
246-
final String frontendServer = _artifacts.getArtifactPath(
247-
Artifact.frontendServerSnapshotForEngineDartSdk,
248-
platform: platform,
249-
);
247+
final String frontendServer = (frontendServerStarterPath == null || frontendServerStarterPath.isEmpty)
248+
? _artifacts.getArtifactPath(
249+
Artifact.frontendServerSnapshotForEngineDartSdk,
250+
platform: platform,
251+
)
252+
: frontendServerStarterPath;
250253
// This is a URI, not a file path, so the forward slash is correct even on Windows.
251254
if (!sdkRoot.endsWith('/')) {
252255
sdkRoot = '$sdkRoot/';
@@ -490,6 +493,7 @@ abstract class ResidentCompiler {
490493
bool assumeInitializeFromDillUpToDate,
491494
TargetModel targetModel,
492495
bool unsafePackageSerialization,
496+
String? frontendServerStarterPath,
493497
List<String> extraFrontEndOptions,
494498
String platformDill,
495499
List<String>? dartDefines,
@@ -605,6 +609,7 @@ class DefaultResidentCompiler implements ResidentCompiler {
605609
this.assumeInitializeFromDillUpToDate = false,
606610
this.targetModel = TargetModel.flutter,
607611
this.unsafePackageSerialization = false,
612+
this.frontendServerStarterPath,
608613
this.extraFrontEndOptions,
609614
this.platformDill,
610615
List<String>? dartDefines,
@@ -635,6 +640,7 @@ class DefaultResidentCompiler implements ResidentCompiler {
635640
final String? initializeFromDill;
636641
final bool assumeInitializeFromDillUpToDate;
637642
final bool unsafePackageSerialization;
643+
final String? frontendServerStarterPath;
638644
final List<String>? extraFrontEndOptions;
639645
final List<String> dartDefines;
640646
final String? librariesSpec;
@@ -771,10 +777,12 @@ class DefaultResidentCompiler implements ResidentCompiler {
771777
String? nativeAssetsUri,
772778
}) async {
773779
final TargetPlatform? platform = (targetModel == TargetModel.dartdevc) ? TargetPlatform.web_javascript : null;
774-
final String frontendServer = artifacts.getArtifactPath(
775-
Artifact.frontendServerSnapshotForEngineDartSdk,
776-
platform: platform,
777-
);
780+
final String frontendServer = (frontendServerStarterPath == null || frontendServerStarterPath!.isEmpty)
781+
? artifacts.getArtifactPath(
782+
Artifact.frontendServerSnapshotForEngineDartSdk,
783+
platform: platform,
784+
)
785+
: frontendServerStarterPath!;
778786
final List<String> command = <String>[
779787
artifacts.getArtifactPath(Artifact.engineDartBinary, platform: platform),
780788
'--disable-dart-dev',

packages/flutter_tools/lib/src/resident_runner.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ class FlutterDevice {
6767
targetModel: targetModel,
6868
dartDefines: buildInfo.dartDefines,
6969
packagesPath: buildInfo.packagesPath,
70+
frontendServerStarterPath: buildInfo.frontendServerStarterPath,
7071
extraFrontEndOptions: buildInfo.extraFrontEndOptions,
7172
artifacts: globals.artifacts!,
7273
processManager: globals.processManager,
@@ -155,6 +156,7 @@ class FlutterDevice {
155156
),
156157
assumeInitializeFromDillUpToDate: buildInfo.assumeInitializeFromDillUpToDate,
157158
targetModel: TargetModel.dartdevc,
159+
frontendServerStarterPath: buildInfo.frontendServerStarterPath,
158160
extraFrontEndOptions: extraFrontEndOptions,
159161
platformDill: globals.fs.file(platformDillPath).absolute.uri.toString(),
160162
dartDefines: buildInfo.dartDefines,
@@ -185,6 +187,7 @@ class FlutterDevice {
185187
fileSystemScheme: buildInfo.fileSystemScheme,
186188
targetModel: targetModel,
187189
dartDefines: buildInfo.dartDefines,
190+
frontendServerStarterPath: buildInfo.frontendServerStarterPath,
188191
extraFrontEndOptions: extraFrontEndOptions,
189192
initializeFromDill: buildInfo.initializeFromDill ?? getDefaultCachedKernelPath(
190193
trackWidgetCreation: buildInfo.trackWidgetCreation,

0 commit comments

Comments
 (0)