[tool] Removes deprecated --web-renderer parameter. (#159314)

Removes the `--web-renderer` option.

Flutter tool users won't be able to select their web renderer.

In order to not drop test coverage, tests are still run with the HTML
Renderer, until its code is fully removed from the engine.

Part of https://github.com/flutter/flutter/issues/145954

## Pre-launch Checklist

- [x] I read the [Contributor Guide] and followed the process outlined
there for submitting PRs.
- [x] I read the [Tree Hygiene] wiki page, which explains my
responsibilities.
- [x] I read and followed the [Flutter Style Guide], including [Features
we expect every widget to implement].
- [x] I signed the [CLA].
- [x] I listed at least one issue that this PR fixes in the description
above.
- [x] I updated/added relevant documentation (doc comments with `///`).
- [x] I added new tests to check the change I am making, or this PR is
[test-exempt].
- [x] I followed the [breaking change policy] and added [Data Driven
Fixes] where supported.
- [x] All existing and new tests are passing.

If you need help, consider asking for advice on the #hackers-new channel
on [Discord].

<!-- Links -->
[Contributor Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview
[Tree Hygiene]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md
[test-exempt]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests
[Flutter Style Guide]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md
[Features we expect every widget to implement]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement
[CLA]: https://cla.developers.google.com/
[flutter/tests]: https://github.com/flutter/tests
[breaking change policy]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes
[Discord]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md
[Data Driven Fixes]:
https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
This commit is contained in:
David Iglesias 2024-12-02 10:33:02 -08:00 committed by GitHub
parent 6a68c9b62a
commit 1e1b5271f4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
20 changed files with 219 additions and 115 deletions

View File

@ -105,7 +105,7 @@ class WebTestsSuite {
testAppDirectory: path.join('packages', 'integration_test', 'example'),
target: path.join('test_driver', 'failure.dart'),
buildMode: buildMode,
renderer: 'canvaskit',
webRenderer: 'canvaskit',
// This test intentionally fails and prints stack traces in the browser
// logs. To avoid confusion, silence browser output.
silenceBrowserOutput: true,
@ -115,7 +115,7 @@ class WebTestsSuite {
target: path.join('integration_test', 'example_test.dart'),
driver: path.join('test_driver', 'integration_test.dart'),
buildMode: buildMode,
renderer: 'canvaskit',
webRenderer: 'canvaskit',
expectWriteResponseFile: true,
expectResponseFileContent: 'null',
),
@ -124,7 +124,7 @@ class WebTestsSuite {
target: path.join('integration_test', 'extended_test.dart'),
driver: path.join('test_driver', 'extended_integration_test.dart'),
buildMode: buildMode,
renderer: 'canvaskit',
webRenderer: 'canvaskit',
expectWriteResponseFile: true,
expectResponseFileContent: '''
{
@ -177,7 +177,7 @@ class WebTestsSuite {
testAppDirectory: path.join(flutterRoot, 'examples', 'hello_world'),
target: 'test_driver/smoke_web_engine.dart',
buildMode: 'profile',
renderer: 'auto',
webRenderer: 'auto',
),
() => _runGalleryE2eWebTest('debug'),
() => _runGalleryE2eWebTest('debug', canvasKit: true),
@ -278,7 +278,7 @@ class WebTestsSuite {
await _runFlutterDriverWebTest(
target: path.join('test_driver', '$name.dart'),
buildMode: buildMode,
renderer: renderer,
webRenderer: renderer,
testAppDirectory: path.join(flutterRoot, 'dev', 'integration_tests', 'web_e2e_tests'),
);
}
@ -286,7 +286,7 @@ class WebTestsSuite {
Future<void> _runFlutterDriverWebTest({
required String target,
required String buildMode,
required String renderer,
required String webRenderer,
required String testAppDirectory,
String? driver,
bool expectFailure = false,
@ -318,7 +318,24 @@ class WebTestsSuite {
'-d',
'web-server',
'--$buildMode',
'--web-renderer=$renderer',
// '--web-renderer=$webRenderer',
'--dart-define=FLUTTER_WEB_AUTO_DETECT=false',
if (webRenderer == 'skwasm') ...<String>[
// See: WebRendererMode.dartDefines[skwasm]
'--dart-define=FLUTTER_WEB_USE_SKIA=false',
'--dart-define=FLUTTER_WEB_USE_SKWASM=true',
],
if (webRenderer == 'canvaskit') ...<String>[
// See: WebRendererMode.dartDefines[canvaskit]
'--dart-define=FLUTTER_WEB_USE_SKIA=true',
'--dart-define=FLUTTER_WEB_USE_SKWASM=false',
],
if (webRenderer == 'html') ...<String>[
// See: WebRendererMode.dartDefines[html]
'--dart-define=FLUTTER_WEB_USE_SKIA=false',
'--dart-define=FLUTTER_WEB_USE_SKWASM=false',
],
],
expectNonZeroExit: expectFailure,
workingDirectory: testAppDirectory,
@ -695,7 +712,23 @@ class WebTestsSuite {
'-v',
'--platform=chrome',
if (useWasm) '--wasm',
'--web-renderer=$webRenderer',
'--dart-define=FLUTTER_WEB_AUTO_DETECT=false',
// '--web-renderer=$webRenderer',
if (webRenderer == 'skwasm') ...<String>[
// See: WebRendererMode.dartDefines[skwasm]
'--dart-define=FLUTTER_WEB_USE_SKIA=false',
'--dart-define=FLUTTER_WEB_USE_SKWASM=true',
],
if (webRenderer == 'canvaskit') ...<String>[
// See: WebRendererMode.dartDefines[canvaskit]
'--dart-define=FLUTTER_WEB_USE_SKIA=true',
'--dart-define=FLUTTER_WEB_USE_SKWASM=false',
],
if (webRenderer == 'html') ...<String>[
// See: WebRendererMode.dartDefines[html]
'--dart-define=FLUTTER_WEB_USE_SKIA=false',
'--dart-define=FLUTTER_WEB_USE_SKWASM=false',
],
'--dart-define=DART_HHH_BOT=$runningInDartHHHBot',
...flutterTestArgs,
...tests,

View File

@ -51,7 +51,6 @@ class BuildWebCommand extends BuildSubCommand {
allowed: ServiceWorkerStrategy.values.map((ServiceWorkerStrategy e) => e.cliName),
allowedHelp: CliEnum.allowedHelp(ServiceWorkerStrategy.values),
);
usesWebRendererOption();
usesWebResourcesCdnFlag();
//
@ -141,20 +140,23 @@ class BuildWebCommand extends BuildSubCommand {
? int.parse(dart2jsOptimizationLevelValue.substring(1))
: optimizationLevel;
final String? webRendererString = stringArg(FlutterOptions.kWebRendererFlag);
final WebRendererMode? webRenderer = webRendererString == null
? null
: WebRendererMode.values.byName(webRendererString);
final List<String> dartDefines = extractDartDefines(
defineConfigJsonMap: extractDartDefineConfigJsonMap()
);
final bool useWasm = boolArg(FlutterOptions.kWebWasmFlag);
// See also: RunCommandBase.webRenderer and TestCommand.webRenderer.
final WebRendererMode webRenderer = WebRendererMode.fromDartDefines(dartDefines, useWasm: useWasm);
final bool sourceMaps = boolArg('source-maps');
final List<WebCompilerConfig> compilerConfigs;
if (webRenderer != null && webRenderer.isDeprecated) {
if (webRenderer.isDeprecated) {
globals.logger.printWarning(webRenderer.deprecationWarning);
}
if (boolArg(FlutterOptions.kWebWasmFlag)) {
if (webRenderer != null) {
throwToolExit('"--${FlutterOptions.kWebRendererFlag}" cannot be combined with "--${FlutterOptions.kWebWasmFlag}"');
if (useWasm) {
if (webRenderer != WebRendererMode.getDefault(useWasm: true)) {
throwToolExit('Do not attempt to set a web renderer when using "--${FlutterOptions.kWebWasmFlag}"');
}
globals.logger.printBox(
title: 'New feature',
@ -185,7 +187,7 @@ class BuildWebCommand extends BuildSubCommand {
nativeNullAssertions: boolArg('native-null-assertions'),
noFrequencyBasedMinification: boolArg('no-frequency-based-minification'),
sourceMaps: sourceMaps,
renderer: webRenderer ?? WebRendererMode.defaultForJs,
renderer: webRenderer,
)];
}

View File

@ -39,7 +39,6 @@ abstract class RunCommandBase extends FlutterCommand with DeviceBasedDevelopment
addBuildModeFlags(verboseHelp: verboseHelp, defaultToRelease: false);
usesDartDefineOption();
usesFlavorOption();
usesWebRendererOption();
usesWebResourcesCdnFlag();
addNativeNullAssertions(hide: !verboseHelp);
addBundleSkSLPathOption(hide: !verboseHelp);
@ -234,10 +233,13 @@ abstract class RunCommandBase extends FlutterCommand with DeviceBasedDevelopment
bool get useWasm => boolArg(FlutterOptions.kWebWasmFlag);
WebRendererMode get webRenderer => WebRendererMode.fromCliOption(
stringArg(FlutterOptions.kWebRendererFlag),
useWasm: useWasm
);
// Keep in sync with the [TestCommand.webRenderer] getter.
WebRendererMode get webRenderer {
final List<String> dartDefines = extractDartDefines(
defineConfigJsonMap: extractDartDefineConfigJsonMap()
);
return WebRendererMode.fromDartDefines(dartDefines, useWasm: useWasm);
}
/// Create a debugging options instance for the current `run` or `drive` invocation.
@visibleForTesting

View File

@ -76,7 +76,6 @@ class TestCommand extends FlutterCommand with DeviceBasedDevelopmentArtifacts {
usesTrackWidgetCreation(verboseHelp: verboseHelp);
addEnableExperimentation(hide: !verboseHelp);
usesDartDefineOption();
usesWebRendererOption();
usesDeviceUserOption();
usesFlavorOption();
addEnableImpellerFlag(verboseHelp: verboseHelp);
@ -336,10 +335,13 @@ class TestCommand extends FlutterCommand with DeviceBasedDevelopmentArtifacts {
return super.verifyThenRunCommand(commandPath);
}
WebRendererMode get webRenderer => WebRendererMode.fromCliOption(
stringArg(FlutterOptions.kWebRendererFlag),
useWasm: useWasm
);
// Keep in sync with the [RunCommandBase.webRenderer] getter.
WebRendererMode get webRenderer {
final List<String> dartDefines = extractDartDefines(
defineConfigJsonMap: extractDartDefineConfigJsonMap()
);
return WebRendererMode.fromDartDefines(dartDefines, useWasm: useWasm);
}
@override
Future<FlutterCommandResult> runCommand() async {

View File

@ -31,7 +31,6 @@ import '../preview_device.dart';
import '../project.dart';
import '../reporting/reporting.dart';
import '../reporting/unified_analytics.dart';
import '../web/compile.dart';
import 'flutter_command_runner.dart';
import 'target_devices.dart';
@ -154,7 +153,6 @@ abstract final class FlutterOptions {
static const String kFatalWarnings = 'fatal-warnings';
static const String kUseApplicationBinary = 'use-application-binary';
static const String kWebBrowserFlag = 'web-browser-flag';
static const String kWebRendererFlag = 'web-renderer';
static const String kWebResourcesCdnFlag = 'web-resources-cdn';
static const String kWebWasmFlag = 'wasm';
}
@ -707,32 +705,6 @@ abstract class FlutterCommand extends Command<void> {
);
}
// This option is deprecated and is no longer publicly supported, and
// therefore is hidden.
//
// The option still exists for internal testing, and to give existing users
// time to migrate off the HTML renderer, but it is no longer advertised as a
// supported mode.
//
// See also:
// * https://github.com/flutter/flutter/issues/151786
// * https://github.com/flutter/flutter/issues/145954
void usesWebRendererOption() {
argParser.addOption(
hide: true,
FlutterOptions.kWebRendererFlag,
allowed: WebRendererMode.values.map((WebRendererMode e) => e.name),
help: 'This option is deprecated and will be removed in a future Flutter '
'release.\n'
'Selects the renderer implementation to use when building for the '
'web. The supported renderers are "canvaskit" when compiling to '
'JavaScript, and "skwasm" when compiling to WebAssembly. Other '
'renderer and compiler combinations are no longer supported. '
'Consider migrating your app to a supported renderer.',
allowedHelp: CliEnum.allowedHelp(WebRendererMode.values)
);
}
void usesWebResourcesCdnFlag() {
argParser.addFlag(
FlutterOptions.kWebResourcesCdnFlag,

View File

@ -11,7 +11,6 @@ import '../base/file_system.dart';
import '../base/logger.dart';
import '../base/project_migrator.dart';
import '../base/terminal.dart';
import '../base/utils.dart';
import '../build_info.dart';
import '../build_system/build_system.dart';
import '../cache.dart';
@ -179,7 +178,7 @@ class WebBuilder {
}
/// Web rendering backend mode.
enum WebRendererMode implements CliEnum {
enum WebRendererMode {
/// Auto detects which rendering backend to use.
auto,
@ -192,12 +191,22 @@ enum WebRendererMode implements CliEnum {
/// Always use skwasm.
skwasm;
factory WebRendererMode.fromCliOption(String? webRendererString,
{required bool useWasm}) {
if (webRendererString == null) {
return getDefault(useWasm: useWasm);
factory WebRendererMode.fromDartDefines(Iterable<String> defines, {
required bool useWasm,
}) {
if (defines.contains('FLUTTER_WEB_AUTO_DETECT=true')) {
return auto;
} else if (defines.contains('FLUTTER_WEB_USE_SKIA=false')
&& defines.contains('FLUTTER_WEB_USE_SKWASM=true')) {
return skwasm;
} else if (defines.contains('FLUTTER_WEB_USE_SKIA=true')
&& defines.contains('FLUTTER_WEB_USE_SKWASM=false')) {
return canvaskit;
} else if (defines.contains('FLUTTER_WEB_USE_SKIA=false')
&& defines.contains('FLUTTER_WEB_USE_SKWASM=false')) {
return html; // The horror!
}
return WebRendererMode.values.byName(webRendererString);
return getDefault(useWasm: useWasm);
}
static WebRendererMode getDefault({required bool useWasm}) {
@ -219,13 +228,9 @@ enum WebRendererMode implements CliEnum {
/// Returns a consistent deprecation warning for the WebRendererMode.
String get deprecationWarning =>
'The HTML Renderer is deprecated. Do not use "--web-renderer=$name".'
'The HTML Renderer is deprecated and will be removed. Please, stop using it.'
'\nSee: https://docs.flutter.dev/to/web-html-renderer-deprecation';
@override
String get cliName => kebabCase(name);
@override
String get helpText => switch (this) {
auto =>
'Use the HTML renderer on mobile devices, and CanvasKit on desktop devices.',
@ -236,34 +241,45 @@ enum WebRendererMode implements CliEnum {
skwasm => 'Always use the experimental skwasm renderer.'
};
/// Returns [dartDefines] in a way usable from the CLI.
///
/// This is used to start integration tests.
Iterable<String> get toCliDartDefines => dartDefines.map(
(String define) => '--dart-define=$define');
Iterable<String> get dartDefines => switch (this) {
auto => <String>[
auto => const <String>{
'FLUTTER_WEB_AUTO_DETECT=true',
],
canvaskit => <String>[
},
canvaskit => const <String>{
'FLUTTER_WEB_AUTO_DETECT=false',
'FLUTTER_WEB_USE_SKIA=true',
],
html => <String>[
'FLUTTER_WEB_USE_SKWASM=false',
},
html => const <String>{
'FLUTTER_WEB_AUTO_DETECT=false',
'FLUTTER_WEB_USE_SKIA=false',
],
skwasm => <String>[
'FLUTTER_WEB_USE_SKWASM=false',
},
skwasm => const <String>{
'FLUTTER_WEB_AUTO_DETECT=false',
'FLUTTER_WEB_USE_SKIA=false',
'FLUTTER_WEB_USE_SKWASM=true',
],
},
};
/// Sets the dart defines for the currently selected WebRendererMode
List<String> updateDartDefines(List<String> inputDefines) {
final Set<String> dartDefinesSet = inputDefines.toSet();
if (!inputDefines
.any((String d) => d.startsWith('FLUTTER_WEB_AUTO_DETECT=')) &&
inputDefines.any((String d) => d.startsWith('FLUTTER_WEB_USE_SKIA='))) {
dartDefinesSet
.removeWhere((String d) => d.startsWith('FLUTTER_WEB_USE_SKIA='));
}
dartDefinesSet.addAll(dartDefines);
dartDefinesSet
..removeWhere((String d) {
return d.startsWith('FLUTTER_WEB_AUTO_DETECT=') ||
d.startsWith('FLUTTER_WEB_USE_SKIA=') ||
d.startsWith('FLUTTER_WEB_USE_SKWASM=');
})
..addAll(dartDefines);
return dartDefinesSet.toList();
}
}

View File

@ -371,7 +371,7 @@ void main() {
'build',
'web',
'--no-pub',
'--web-renderer=${webRenderer.name}',
...webRenderer.toCliDartDefines,
]);
} on ToolExit catch (error) {
expect(error, isA<ToolExit>());
@ -402,12 +402,6 @@ void main() {
expect(command.usage, contains(option));
}
void expectHidden(String option) {
expect(command.argParser.options.keys, contains(option));
expect(command.argParser.options[option]!.hide, isTrue);
expect(command.usage, isNot(contains(option)));
}
expectVisible('pwa-strategy');
expectVisible('web-resources-cdn');
expectVisible('optimization-level');
@ -419,8 +413,6 @@ void main() {
expectVisible('wasm');
expectVisible('strip-wasm');
expectVisible('base-href');
expectHidden('web-renderer');
}, overrides: <Type, Generator>{
Platform: () => fakePlatform,
FileSystem: () => fileSystem,

View File

@ -1012,7 +1012,7 @@ void main() {
() => createTestCommandRunner(command).run(<String>[
'run',
'--no-pub',
'--web-renderer=skwasm',
...WebRendererMode.skwasm.toCliDartDefines,
]), throwsToolExit(message: 'Skwasm renderer requires --wasm'));
}, overrides: <Type, Generator>{
FileSystem: () => fileSystem,
@ -1030,7 +1030,7 @@ void main() {
await createTestCommandRunner(RunCommand()).run(<String>[
'run',
'--no-pub',
'--web-renderer=${webRenderer.name}',
...webRenderer.toCliDartDefines,
]);
} on ToolExit catch (error) {
expect(error, isA<ToolExit>());

View File

@ -1395,11 +1395,11 @@ dev_dependencies:
final TestCommand testCommand = TestCommand(testRunner: testRunner);
final CommandRunner<void> commandRunner = createTestCommandRunner(testCommand);
await commandRunner.run(const <String>[
await commandRunner.run(<String>[
'test',
'--no-pub',
'--platform=chrome',
'--web-renderer=canvaskit',
...WebRendererMode.canvaskit.toCliDartDefines,
]);
expect(testRunner.lastDebuggingOptionsValue.webRenderer, WebRendererMode.canvaskit);
}, overrides: <Type, Generator>{
@ -1440,7 +1440,7 @@ dev_dependencies:
'web',
'--no-pub',
'--platform=chrome',
'--web-renderer=${webRenderer.name}',
...webRenderer.toCliDartDefines,
]);
} on ToolExit catch (error) {
expect(error, isA<ToolExit>());
@ -1459,7 +1459,6 @@ dev_dependencies:
.where((WebRendererMode mode) => mode.isDeprecated)
.forEach(testWebRendererDeprecationMessage);
testUsingContext('Can test in a pub workspace',
() async {
final String root = fs.path.rootPrefix(fs.currentDirectory.absolute.path);

View File

@ -232,7 +232,6 @@ void verifyOptions(String? command, Iterable<Option> options) {
const List<String> deprecatedOptions = <String>[
FlutterOptions.kNullSafety,
FlutterOptions.kNullAssertions,
FlutterOptions.kWebRendererFlag,
];
final bool isOptionDeprecated = deprecatedOptions.contains(option.name);
if (!isOptionDeprecated) {

View File

@ -21,12 +21,20 @@ void main() {
test('canvaskit web-renderer with no dart-defines', () {
dartDefines = WebRendererMode.canvaskit.updateDartDefines(dartDefines);
expect(dartDefines, <String>['FLUTTER_WEB_AUTO_DETECT=false','FLUTTER_WEB_USE_SKIA=true']);
expect(dartDefines, <String>[
'FLUTTER_WEB_AUTO_DETECT=false',
'FLUTTER_WEB_USE_SKIA=true',
'FLUTTER_WEB_USE_SKWASM=false',
]);
});
test('html web-renderer with no dart-defines', () {
dartDefines = WebRendererMode.html.updateDartDefines(dartDefines);
expect(dartDefines, <String>['FLUTTER_WEB_AUTO_DETECT=false','FLUTTER_WEB_USE_SKIA=false']);
expect(dartDefines, <String>[
'FLUTTER_WEB_AUTO_DETECT=false',
'FLUTTER_WEB_USE_SKIA=false',
'FLUTTER_WEB_USE_SKWASM=false',
]);
});
test('auto web-renderer with existing dart-defines', () {
@ -38,13 +46,31 @@ void main() {
test('canvaskit web-renderer with existing dart-defines', () {
dartDefines = <String>['FLUTTER_WEB_USE_SKIA=false'];
dartDefines = WebRendererMode.canvaskit.updateDartDefines(dartDefines);
expect(dartDefines, <String>['FLUTTER_WEB_AUTO_DETECT=false','FLUTTER_WEB_USE_SKIA=true']);
expect(dartDefines, <String>[
'FLUTTER_WEB_AUTO_DETECT=false',
'FLUTTER_WEB_USE_SKIA=true',
'FLUTTER_WEB_USE_SKWASM=false',
]);
});
test('html web-renderer with existing dart-defines', () {
dartDefines = <String>['FLUTTER_WEB_USE_SKIA=true'];
dartDefines = WebRendererMode.html.updateDartDefines(dartDefines);
expect(dartDefines, <String>['FLUTTER_WEB_AUTO_DETECT=false','FLUTTER_WEB_USE_SKIA=false']);
expect(dartDefines, <String>[
'FLUTTER_WEB_AUTO_DETECT=false',
'FLUTTER_WEB_USE_SKIA=false',
'FLUTTER_WEB_USE_SKWASM=false',
]);
});
test('skwasm web-renderer with existing dart-defines', () {
dartDefines = <String>['FLUTTER_WEB_USE_SKWASM=false'];
dartDefines = WebRendererMode.skwasm.updateDartDefines(dartDefines);
expect(dartDefines, <String>[
'FLUTTER_WEB_AUTO_DETECT=false',
'FLUTTER_WEB_USE_SKIA=false',
'FLUTTER_WEB_USE_SKWASM=true',
]);
});
});
}

View File

@ -401,6 +401,7 @@ void main() {
'-Ddart.vm.profile=true',
'-DFLUTTER_WEB_AUTO_DETECT=false',
'-DFLUTTER_WEB_USE_SKIA=true',
'-DFLUTTER_WEB_USE_SKWASM=false',
'-DFLUTTER_WEB_CANVASKIT_URL=https://www.gstatic.com/flutter-canvaskit/abcdefghijklmnopqrstuvwxyz/',
'--no-source-maps',
'-o',
@ -416,6 +417,7 @@ void main() {
'-Ddart.vm.profile=true',
'-DFLUTTER_WEB_AUTO_DETECT=false',
'-DFLUTTER_WEB_USE_SKIA=true',
'-DFLUTTER_WEB_USE_SKWASM=false',
'-DFLUTTER_WEB_CANVASKIT_URL=https://www.gstatic.com/flutter-canvaskit/abcdefghijklmnopqrstuvwxyz/',
'--no-minify',
'--no-source-maps',
@ -446,6 +448,7 @@ void main() {
'-Ddart.vm.profile=true',
'-DFLUTTER_WEB_AUTO_DETECT=false',
'-DFLUTTER_WEB_USE_SKIA=true',
'-DFLUTTER_WEB_USE_SKWASM=false',
'-DFLUTTER_WEB_CANVASKIT_URL=https://www.gstatic.com/flutter-canvaskit/abcdefghijklmnopqrstuvwxyz/',
'--no-source-maps',
'-o',
@ -461,6 +464,7 @@ void main() {
'-Ddart.vm.profile=true',
'-DFLUTTER_WEB_AUTO_DETECT=false',
'-DFLUTTER_WEB_USE_SKIA=true',
'-DFLUTTER_WEB_USE_SKWASM=false',
'-DFLUTTER_WEB_CANVASKIT_URL=https://www.gstatic.com/flutter-canvaskit/abcdefghijklmnopqrstuvwxyz/',
'--no-minify',
'--no-source-maps',
@ -490,6 +494,7 @@ void main() {
'-Ddart.vm.profile=true',
'-DFLUTTER_WEB_AUTO_DETECT=false',
'-DFLUTTER_WEB_USE_SKIA=true',
'-DFLUTTER_WEB_USE_SKWASM=false',
'-DFLUTTER_WEB_CANVASKIT_URL=https://www.gstatic.com/flutter-canvaskit/abcdefghijklmnopqrstuvwxyz/',
'--no-source-maps',
'-o',
@ -506,6 +511,7 @@ void main() {
'-Ddart.vm.profile=true',
'-DFLUTTER_WEB_AUTO_DETECT=false',
'-DFLUTTER_WEB_USE_SKIA=true',
'-DFLUTTER_WEB_USE_SKWASM=false',
'-DFLUTTER_WEB_CANVASKIT_URL=https://www.gstatic.com/flutter-canvaskit/abcdefghijklmnopqrstuvwxyz/',
'--no-minify',
'--no-source-maps',
@ -533,6 +539,7 @@ void main() {
'-Ddart.vm.profile=true',
'-DFLUTTER_WEB_AUTO_DETECT=false',
'-DFLUTTER_WEB_USE_SKIA=true',
'-DFLUTTER_WEB_USE_SKWASM=false',
'-DFLUTTER_WEB_CANVASKIT_URL=https://www.gstatic.com/flutter-canvaskit/abcdefghijklmnopqrstuvwxyz/',
'--no-source-maps',
'-o',
@ -548,6 +555,7 @@ void main() {
'-Ddart.vm.profile=true',
'-DFLUTTER_WEB_AUTO_DETECT=false',
'-DFLUTTER_WEB_USE_SKIA=true',
'-DFLUTTER_WEB_USE_SKWASM=false',
'-DFLUTTER_WEB_CANVASKIT_URL=https://www.gstatic.com/flutter-canvaskit/abcdefghijklmnopqrstuvwxyz/',
'--no-minify',
'--no-source-maps',
@ -575,6 +583,7 @@ void main() {
'-Ddart.vm.product=true',
'-DFLUTTER_WEB_AUTO_DETECT=false',
'-DFLUTTER_WEB_USE_SKIA=true',
'-DFLUTTER_WEB_USE_SKWASM=false',
'-DFLUTTER_WEB_CANVASKIT_URL=https://www.gstatic.com/flutter-canvaskit/abcdefghijklmnopqrstuvwxyz/',
'--no-source-maps',
'-o',
@ -590,6 +599,7 @@ void main() {
'-Ddart.vm.product=true',
'-DFLUTTER_WEB_AUTO_DETECT=false',
'-DFLUTTER_WEB_USE_SKIA=true',
'-DFLUTTER_WEB_USE_SKWASM=false',
'-DFLUTTER_WEB_CANVASKIT_URL=https://www.gstatic.com/flutter-canvaskit/abcdefghijklmnopqrstuvwxyz/',
'--no-source-maps',
'-O4',
@ -617,6 +627,7 @@ void main() {
'-Ddart.vm.product=true',
'-DFLUTTER_WEB_AUTO_DETECT=false',
'-DFLUTTER_WEB_USE_SKIA=true',
'-DFLUTTER_WEB_USE_SKWASM=false',
'-DFLUTTER_WEB_CANVASKIT_URL=https://www.gstatic.com/flutter-canvaskit/abcdefghijklmnopqrstuvwxyz/',
'--native-null-assertions',
'--no-source-maps',
@ -633,6 +644,7 @@ void main() {
'-Ddart.vm.product=true',
'-DFLUTTER_WEB_AUTO_DETECT=false',
'-DFLUTTER_WEB_USE_SKIA=true',
'-DFLUTTER_WEB_USE_SKWASM=false',
'-DFLUTTER_WEB_CANVASKIT_URL=https://www.gstatic.com/flutter-canvaskit/abcdefghijklmnopqrstuvwxyz/',
'--native-null-assertions',
'--no-source-maps',
@ -661,6 +673,7 @@ void main() {
'-Ddart.vm.product=true',
'-DFLUTTER_WEB_AUTO_DETECT=false',
'-DFLUTTER_WEB_USE_SKIA=true',
'-DFLUTTER_WEB_USE_SKWASM=false',
'-DFLUTTER_WEB_CANVASKIT_URL=https://www.gstatic.com/flutter-canvaskit/abcdefghijklmnopqrstuvwxyz/',
'--no-source-maps',
'-o',
@ -676,6 +689,7 @@ void main() {
'-Ddart.vm.product=true',
'-DFLUTTER_WEB_AUTO_DETECT=false',
'-DFLUTTER_WEB_USE_SKIA=true',
'-DFLUTTER_WEB_USE_SKWASM=false',
'-DFLUTTER_WEB_CANVASKIT_URL=https://www.gstatic.com/flutter-canvaskit/abcdefghijklmnopqrstuvwxyz/',
'--no-source-maps',
'-O3',
@ -703,6 +717,7 @@ void main() {
'-Ddart.vm.product=true',
'-DFLUTTER_WEB_AUTO_DETECT=false',
'-DFLUTTER_WEB_USE_SKIA=true',
'-DFLUTTER_WEB_USE_SKWASM=false',
'-DFLUTTER_WEB_CANVASKIT_URL=https://www.gstatic.com/flutter-canvaskit/abcdefghijklmnopqrstuvwxyz/',
'--no-source-maps',
'-o',
@ -721,6 +736,7 @@ void main() {
'-Ddart.vm.product=true',
'-DFLUTTER_WEB_AUTO_DETECT=false',
'-DFLUTTER_WEB_USE_SKIA=true',
'-DFLUTTER_WEB_USE_SKWASM=false',
'-DFLUTTER_WEB_CANVASKIT_URL=https://www.gstatic.com/flutter-canvaskit/abcdefghijklmnopqrstuvwxyz/',
'--no-source-maps',
'-O4',
@ -757,6 +773,7 @@ void main() {
'-DBAZ=qux',
'-DFLUTTER_WEB_AUTO_DETECT=false',
'-DFLUTTER_WEB_USE_SKIA=true',
'-DFLUTTER_WEB_USE_SKWASM=false',
'-DFLUTTER_WEB_CANVASKIT_URL=https://www.gstatic.com/flutter-canvaskit/abcdefghijklmnopqrstuvwxyz/',
'--no-source-maps',
'-o',
@ -774,6 +791,7 @@ void main() {
'-DBAZ=qux',
'-DFLUTTER_WEB_AUTO_DETECT=false',
'-DFLUTTER_WEB_USE_SKIA=true',
'-DFLUTTER_WEB_USE_SKWASM=false',
'-DFLUTTER_WEB_CANVASKIT_URL=https://www.gstatic.com/flutter-canvaskit/abcdefghijklmnopqrstuvwxyz/',
'--no-source-maps',
'-O4',
@ -801,6 +819,7 @@ void main() {
'-Ddart.vm.product=true',
'-DFLUTTER_WEB_AUTO_DETECT=false',
'-DFLUTTER_WEB_USE_SKIA=true',
'-DFLUTTER_WEB_USE_SKWASM=false',
'-DFLUTTER_WEB_CANVASKIT_URL=https://www.gstatic.com/flutter-canvaskit/abcdefghijklmnopqrstuvwxyz/',
'-o',
environment.buildDir.childFile('app.dill').absolute.path,
@ -815,6 +834,7 @@ void main() {
'-Ddart.vm.product=true',
'-DFLUTTER_WEB_AUTO_DETECT=false',
'-DFLUTTER_WEB_USE_SKIA=true',
'-DFLUTTER_WEB_USE_SKWASM=false',
'-DFLUTTER_WEB_CANVASKIT_URL=https://www.gstatic.com/flutter-canvaskit/abcdefghijklmnopqrstuvwxyz/',
'-O4',
'-o',
@ -842,6 +862,7 @@ void main() {
'-DBAZ=qux',
'-DFLUTTER_WEB_AUTO_DETECT=false',
'-DFLUTTER_WEB_USE_SKIA=true',
'-DFLUTTER_WEB_USE_SKWASM=false',
'-DFLUTTER_WEB_CANVASKIT_URL=https://www.gstatic.com/flutter-canvaskit/abcdefghijklmnopqrstuvwxyz/',
'--no-source-maps',
'-o',
@ -859,6 +880,7 @@ void main() {
'-DBAZ=qux',
'-DFLUTTER_WEB_AUTO_DETECT=false',
'-DFLUTTER_WEB_USE_SKIA=true',
'-DFLUTTER_WEB_USE_SKWASM=false',
'-DFLUTTER_WEB_CANVASKIT_URL=https://www.gstatic.com/flutter-canvaskit/abcdefghijklmnopqrstuvwxyz/',
'--no-minify',
'--no-source-maps',
@ -888,6 +910,7 @@ void main() {
'-DBAZ=qux',
'-DFLUTTER_WEB_AUTO_DETECT=false',
'-DFLUTTER_WEB_USE_SKIA=true',
'-DFLUTTER_WEB_USE_SKWASM=false',
'-DFLUTTER_WEB_CANVASKIT_URL=https://www.gstatic.com/flutter-canvaskit/abcdefghijklmnopqrstuvwxyz/',
'--no-source-maps',
'--enable-asserts',
@ -905,6 +928,7 @@ void main() {
'-DBAZ=qux',
'-DFLUTTER_WEB_AUTO_DETECT=false',
'-DFLUTTER_WEB_USE_SKIA=true',
'-DFLUTTER_WEB_USE_SKWASM=false',
'-DFLUTTER_WEB_CANVASKIT_URL=https://www.gstatic.com/flutter-canvaskit/abcdefghijklmnopqrstuvwxyz/',
'--no-minify',
'--no-source-maps',
@ -935,6 +959,7 @@ void main() {
'-Ddart.vm.profile=true',
'-DFLUTTER_WEB_AUTO_DETECT=false',
'-DFLUTTER_WEB_USE_SKIA=true',
'-DFLUTTER_WEB_USE_SKWASM=false',
'-DFLUTTER_WEB_CANVASKIT_URL=https://www.gstatic.com/flutter-canvaskit/abcdefghijklmnopqrstuvwxyz/',
'--no-source-maps',
'-o',
@ -950,6 +975,7 @@ void main() {
'-Ddart.vm.profile=true',
'-DFLUTTER_WEB_AUTO_DETECT=false',
'-DFLUTTER_WEB_USE_SKIA=true',
'-DFLUTTER_WEB_USE_SKWASM=false',
'-DFLUTTER_WEB_CANVASKIT_URL=https://www.gstatic.com/flutter-canvaskit/abcdefghijklmnopqrstuvwxyz/',
'--no-minify',
'--no-source-maps',
@ -980,6 +1006,7 @@ void main() {
'-Ddart.vm.profile=true',
'-DFLUTTER_WEB_AUTO_DETECT=false',
'-DFLUTTER_WEB_USE_SKIA=true',
'-DFLUTTER_WEB_USE_SKWASM=false',
'-DFLUTTER_WEB_CANVASKIT_URL=https://www.gstatic.com/flutter-canvaskit/abcdefghijklmnopqrstuvwxyz/',
'--no-source-maps',
'-o',
@ -995,6 +1022,7 @@ void main() {
'-Ddart.vm.profile=true',
'-DFLUTTER_WEB_AUTO_DETECT=false',
'-DFLUTTER_WEB_USE_SKIA=true',
'-DFLUTTER_WEB_USE_SKWASM=false',
'-DFLUTTER_WEB_CANVASKIT_URL=https://www.gstatic.com/flutter-canvaskit/abcdefghijklmnopqrstuvwxyz/',
'--no-minify',
'--no-source-maps',
@ -1051,6 +1079,7 @@ void main() {
if (renderer == WebRendererMode.canvaskit) ...<String>[
'-DFLUTTER_WEB_AUTO_DETECT=false',
'-DFLUTTER_WEB_USE_SKIA=true',
'-DFLUTTER_WEB_USE_SKWASM=false',
],
'-DFLUTTER_WEB_CANVASKIT_URL=https://www.gstatic.com/flutter-canvaskit/abcdefghijklmnopqrstuvwxyz/',
'--extra-compiler-option=--depfile=${depFile.absolute.path}',

View File

@ -46,6 +46,7 @@ void main() {
'--experimental-emit-debug-metadata',
'-DFLUTTER_WEB_AUTO_DETECT=false',
'-DFLUTTER_WEB_USE_SKIA=true',
'-DFLUTTER_WEB_USE_SKWASM=false',
'--output-dill',
'build/out',
'--packages',

View File

@ -181,4 +181,32 @@ void main() {
}, overrides: <Type, Generator>{
ProcessManager: () => FakeProcessManager.any(),
});
Future<void> testRendererModeFromDartDefines(WebRendererMode webRenderer) async {
testUsingContext('WebRendererMode.${webRenderer.name} can be initialized from dart defines', () {
final WebRendererMode computed = WebRendererMode.fromDartDefines(
webRenderer.dartDefines,
useWasm: true,
);
expect(computed, webRenderer);
}, overrides: <Type, Generator>{
ProcessManager: () => FakeProcessManager.any(),
});
}
WebRendererMode.values
.forEach(testRendererModeFromDartDefines);
testUsingContext('WebRendererMode.fromDartDefines sets a wasm-aware default for unknown dart defines.', () async {
WebRendererMode computed = WebRendererMode.fromDartDefines(
<String>{}, useWasm: false,
);
expect(computed, WebRendererMode.getDefault(useWasm: false));
computed = WebRendererMode.fromDartDefines(
<String>{}, useWasm: true,
);
expect(computed, WebRendererMode.getDefault(useWasm: true));
});
}

View File

@ -28,7 +28,7 @@ void main() {
await flutter.run(
withDebugger: true, startPaused: true, chrome: true,
additionalCommandArgs: <String>['--verbose', '--web-renderer=html']);
additionalCommandArgs: <String>['--verbose']);
await flutter.addBreakpoint(project.breakpointUri, project.breakpointLine);
await flutter.resume(waitForNextPause: true); // Now we should be on the breakpoint.
expect((await flutter.getSourceLocation())!.line, equals(project.breakpointLine));

View File

@ -41,7 +41,7 @@ void main() {
await flutter.run(
withDebugger: true, chrome: true,
expressionEvaluation: expressionEvaluation,
additionalCommandArgs: <String>['--verbose', '--web-renderer=html']);
additionalCommandArgs: <String>['--verbose']);
}
Future<void> breakInBuildMethod(FlutterTestDriver flutter) async {
@ -148,7 +148,7 @@ void main() {
withDebugger: true, chrome: true,
expressionEvaluation: expressionEvaluation,
startPaused: true, script: project.testFilePath,
additionalCommandArgs: <String>['--verbose', '--web-renderer=html']);
additionalCommandArgs: <String>['--verbose']);
}
testWithoutContext('cannot evaluate expressions if feature is disabled', () async {

View File

@ -8,6 +8,7 @@ library;
import 'dart:async';
import 'package:file/file.dart';
import 'package:flutter_tools/src/web/compile.dart';
import '../integration.shard/test_data/hot_reload_project.dart';
import '../integration.shard/test_driver.dart';
@ -48,11 +49,11 @@ Future<void> _testProject(HotReloadProject project, {String name = 'Default'}) a
testWithoutContext('$testName: hot restart works without error', () async {
flutter.stdout.listen(printOnFailure);
await flutter.run(chrome: true, additionalCommandArgs: <String>['--verbose', '--web-renderer=html']);
await flutter.run(chrome: true, additionalCommandArgs: <String>['--verbose']);
await flutter.hotRestart();
});
testWithoutContext('$testName: newly added code executes during hot restart', () async {
testWithoutContext('$testName: newly added code executes during hot restart - html (legacy)', () async {
final Completer<void> completer = Completer<void>();
final StreamSubscription<String> subscription = flutter.stdout.listen((String line) {
printOnFailure(line);
@ -60,7 +61,10 @@ Future<void> _testProject(HotReloadProject project, {String name = 'Default'}) a
completer.complete();
}
});
await flutter.run(chrome: true, additionalCommandArgs: <String>['--verbose', '--web-renderer=html']);
await flutter.run(chrome: true, additionalCommandArgs: <String>[
'--verbose',
...WebRendererMode.html.toCliDartDefines,
]);
project.uncommentHotReloadPrint();
try {
await flutter.hotRestart();
@ -78,7 +82,7 @@ Future<void> _testProject(HotReloadProject project, {String name = 'Default'}) a
completer.complete();
}
});
await flutter.run(chrome: true, additionalCommandArgs: <String>['--verbose', '--web-renderer=canvaskit']);
await flutter.run(chrome: true, additionalCommandArgs: <String>['--verbose']);
project.uncommentHotReloadPrint();
try {
await flutter.hotRestart();

View File

@ -38,7 +38,6 @@ void main() {
chrome: true,
additionalCommandArgs: <String>[
if (verbose) '--verbose',
'--web-renderer=html',
]);
}

View File

@ -38,7 +38,7 @@ void main() {
testWithoutContext('can validate flutter version', () async {
await flutter.run(
withDebugger: true, chrome: true,
additionalCommandArgs: <String>['--verbose', '--web-renderer=html']);
additionalCommandArgs: <String>['--verbose']);
expect(flutter.vmServiceWsUri, isNotNull);
@ -50,7 +50,7 @@ void main() {
testWithoutContext('can validate flutter version in parallel', () async {
await flutter.run(
withDebugger: true, chrome: true,
additionalCommandArgs: <String>['--verbose', '--web-renderer=html']);
additionalCommandArgs: <String>['--verbose']);
expect(flutter.vmServiceWsUri, isNotNull);
@ -82,7 +82,7 @@ void main() {
testWithoutContext('can validate flutter version', () async {
await flutter.run(
withDebugger: true, chrome: true,
additionalCommandArgs: <String>['--verbose', '--web-renderer=html']);
additionalCommandArgs: <String>['--verbose']);
expect(flutter.vmServiceWsUri, isNotNull);

View File

@ -30,6 +30,6 @@ void main() {
});
testWithoutContext('flutter run works on web devices with a unary main function', () async {
await flutter.run(chrome: true, additionalCommandArgs: <String>['--verbose', '--web-renderer=html']);
await flutter.run(chrome: true, additionalCommandArgs: <String>['--verbose']);
});
}