Skip to content

Commit 4bd0c90

Browse files
Jonah Williamspull[bot]
authored andcommitted
Add impeller key to skia gold client, Turn on a framework test shard that will run unit tests with --enable-impeller (flutter#141341)
Redo of flutter#140985 due to CLA issues.
1 parent db0e0b2 commit 4bd0c90

File tree

5 files changed

+85
-1
lines changed

5 files changed

+85
-1
lines changed

.ci.yaml

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3338,6 +3338,33 @@ targets:
33383338
- bin/**
33393339
- .ci.yaml
33403340

3341+
- name: Mac framework_tests_impeller
3342+
recipe: flutter/flutter_drone
3343+
timeout: 60
3344+
bringup: true
3345+
properties:
3346+
cpu: x86 # https://github.com/flutter/flutter/issues/119880
3347+
dependencies: >-
3348+
[
3349+
{"dependency": "goldctl", "version": "git_revision:720a542f6fe4f92922c3b8f0fdcc4d2ac6bb83cd"}
3350+
]
3351+
shard: framework_tests
3352+
subshard: impeller
3353+
tags: >
3354+
["framework", "hostonly", "shard", "mac"]
3355+
runIf:
3356+
- dev/**
3357+
- packages/flutter/**
3358+
- packages/flutter_driver/**
3359+
- packages/integration_test/**
3360+
- packages/flutter_localizations/**
3361+
- packages/fuchsia_remote_debug_protocol/**
3362+
- packages/flutter_test/**
3363+
- packages/flutter_goldens/**
3364+
- packages/flutter_tools/**
3365+
- bin/**
3366+
- .ci.yaml
3367+
33413368
- name: Mac framework_tests_misc
33423369
recipe: flutter/flutter_drone
33433370
timeout: 60

dev/bots/test.dart

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -815,6 +815,15 @@ Future<void> _runFrameworkTests() async {
815815
);
816816
}
817817

818+
Future<void> runImpeller() async {
819+
printProgress('${green}Running packages/flutter tests $reset in Impeller$reset');
820+
await _runFlutterTest(
821+
path.join(flutterRoot, 'packages', 'flutter'),
822+
options: <String>['--enable-impeller'],
823+
);
824+
}
825+
826+
818827
Future<void> runLibraries() async {
819828
final List<String> tests = Directory(path.join(flutterRoot, 'packages', 'flutter', 'test'))
820829
.listSync(followLinks: false)
@@ -1064,6 +1073,7 @@ Future<void> _runFrameworkTests() async {
10641073
'libraries': runLibraries,
10651074
'slow': runSlow,
10661075
'misc': runMisc,
1076+
'impeller': runImpeller,
10671077
});
10681078
}
10691079

packages/flutter_goldens/lib/skia_client.dart

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ const String _kFlutterRootKey = 'FLUTTER_ROOT';
1919
const String _kGoldctlKey = 'GOLDCTL';
2020
const String _kTestBrowserKey = 'FLUTTER_TEST_BROWSER';
2121
const String _kWebRendererKey = 'FLUTTER_WEB_RENDERER';
22+
const String _kImpellerKey = 'FLUTTER_TEST_IMPELLER';
2223

2324
/// Signature of callbacks used to inject [print] replacements.
2425
typedef LogCallback = void Function(String);
@@ -535,6 +536,8 @@ class SkiaGoldClient {
535536
final Map<String, dynamic> keys = <String, dynamic>{
536537
'Platform' : platform.operatingSystem,
537538
'CI' : 'luci',
539+
if (_isImpeller)
540+
'impeller': 'swiftshader',
538541
};
539542
if (_isBrowserTest) {
540543
keys['Browser'] = _browserKey;
@@ -590,6 +593,10 @@ class SkiaGoldClient {
590593
return _isBrowserTest && platform.environment[_kWebRendererKey] == 'canvaskit';
591594
}
592595

596+
bool get _isImpeller {
597+
return (platform.environment[_kImpellerKey] != null);
598+
}
599+
593600
String get _browserKey {
594601
assert(_isBrowserTest);
595602
return platform.environment[_kTestBrowserKey]!;
@@ -599,7 +606,7 @@ class SkiaGoldClient {
599606
/// the latest positive digest on Flutter Gold with a hex-encoded md5 hash of
600607
/// the image keys.
601608
String getTraceID(String testName) {
602-
final Map<String, dynamic> keys = <String, dynamic>{
609+
final Map<String, Object?> keys = <String, Object?>{
603610
if (_isBrowserTest)
604611
'Browser' : _browserKey,
605612
if (_isBrowserCanvasKitTest)
@@ -608,6 +615,8 @@ class SkiaGoldClient {
608615
'Platform' : platform.operatingSystem,
609616
'name' : testName,
610617
'source_type' : 'flutter',
618+
if (_isImpeller)
619+
'impeller': 'swiftshader',
611620
};
612621
final String jsonTrace = json.encode(keys);
613622
final String md5Sum = md5.convert(utf8.encode(jsonTrace)).toString();

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,8 @@ class FlutterTesterTestDevice extends TestDevice {
143143
'FONTCONFIG_FILE': fontConfigManager.fontConfigFile.path,
144144
'SERVER_PORT': _server!.port.toString(),
145145
'APP_NAME': flutterProject?.manifest.appName ?? '',
146+
if (debuggingOptions.enableImpeller == ImpellerStatus.enabled)
147+
'FLUTTER_TEST_IMPELLER': 'true',
146148
if (testAssetDirectory != null)
147149
'UNIT_TEST_ASSETS': testAssetDirectory!,
148150
};

packages/flutter_tools/test/general.shard/flutter_tester_device_test.dart

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ void main() {
4040
FlutterTesterTestDevice createDevice({
4141
List<String> dartEntrypointArgs = const <String>[],
4242
bool enableVmService = false,
43+
bool enableImpeller = false,
4344
}) =>
4445
TestFlutterTesterDevice(
4546
platform: platform,
@@ -48,6 +49,7 @@ void main() {
4849
enableVmService: enableVmService,
4950
dartEntrypointArgs: dartEntrypointArgs,
5051
uriConverter: (String input) => '$input/converted',
52+
enableImpeller: enableImpeller,
5153
);
5254

5355
testUsingContext('Missing dir error caught for FontConfigManger.dispose', () async {
@@ -62,6 +64,38 @@ void main() {
6264
ProcessManager: () => processManager,
6365
});
6466

67+
testUsingContext('Flutter tester passes through impeller config and environment variables.', () async {
68+
processManager = FakeProcessManager.list(<FakeCommand>[]);
69+
device = createDevice(enableImpeller: true);
70+
processManager.addCommand(FakeCommand(command: const <String>[
71+
'/',
72+
'--disable-vm-service',
73+
'--ipv6',
74+
'--enable-checked-mode',
75+
'--verify-entry-points',
76+
'--enable-impeller',
77+
'--enable-dart-profiling',
78+
'--non-interactive',
79+
'--use-test-fonts',
80+
'--disable-asset-fonts',
81+
'--packages=.dart_tool/package_config.json',
82+
'example.dill',
83+
], environment: <String, String>{
84+
'FLUTTER_TEST': 'true',
85+
'FONTCONFIG_FILE': device.fontConfigManager.fontConfigFile.path,
86+
'SERVER_PORT': '0',
87+
'APP_NAME': '',
88+
'FLUTTER_TEST_IMPELLER': 'true',
89+
}));
90+
91+
await device.start('example.dill');
92+
93+
expect(processManager, hasNoRemainingExpectations);
94+
}, overrides: <Type, Generator>{
95+
FileSystem: () => fileSystem,
96+
ProcessManager: () => processManager,
97+
});
98+
6599
group('The FLUTTER_TEST environment variable is passed to the test process', () {
66100
setUp(() {
67101
processManager = FakeProcessManager.list(<FakeCommand>[]);
@@ -222,6 +256,7 @@ class TestFlutterTesterDevice extends FlutterTesterTestDevice {
222256
required super.enableVmService,
223257
required List<String> dartEntrypointArgs,
224258
required UriConverter uriConverter,
259+
required bool enableImpeller,
225260
}) : super(
226261
id: 999,
227262
shellPath: '/',
@@ -234,6 +269,7 @@ class TestFlutterTesterDevice extends FlutterTesterTestDevice {
234269
),
235270
hostVmServicePort: 1234,
236271
dartEntrypointArgs: dartEntrypointArgs,
272+
enableImpeller: enableImpeller ? ImpellerStatus.enabled : ImpellerStatus.platformDefault,
237273
),
238274
machine: false,
239275
host: InternetAddress.loopbackIPv6,

0 commit comments

Comments
 (0)