mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00
Force Impeller backend for android_engine_test
, and test both OpenGLES and Vulkan (#162089)
A few changes in this PR (could have been split up, but that would take an extra 4 hours - 2 days in CI time): - Removed the old `flutter_driver_android_test` shards and references - Override `AndroidManifest.xml` per backend, forcing that backend to be used (no fallbacks) or it fails - Bumps the Android emulator to 35 due to the use of magic strings, I think The check for the Impeller backend actually being used is the honor system right now, as a bug in `flutter drive` (https://github.com/flutter/flutter/issues/162087) prevents me from seeing error output, meaning that it's impossible to be sure a particular Impeller backend is used (or understand why a crash happens), so I guess I'll work on that next. Due to https://github.com/flutter/flutter/issues/162088, we were accidentally running our Vulkan tests as OpenGLES 🤦🏼 .
This commit is contained in:
parent
e057941ee7
commit
9cc132d4c2
30
.ci.yaml
30
.ci.yaml
@ -1526,7 +1526,7 @@ targets:
|
||||
- engine/**
|
||||
- DEPS
|
||||
|
||||
- name: Linux_android_emu_34 android_engine_vulkan_tests
|
||||
- name: Linux_android_emu android_engine_vulkan_tests
|
||||
recipe: flutter/flutter_drone
|
||||
bringup: true
|
||||
timeout: 60
|
||||
@ -1539,7 +1539,7 @@ targets:
|
||||
{"dependency": "goldctl", "version": "git_revision:2387d6fff449587eecbb7e45b2692ca0710b63b9"}
|
||||
]
|
||||
|
||||
- name: Linux_android_emu_34 android_engine_opengles_tests
|
||||
- name: Linux_android_emu android_engine_opengles_tests
|
||||
recipe: flutter/flutter_drone
|
||||
bringup: true
|
||||
timeout: 60
|
||||
@ -1552,32 +1552,6 @@ targets:
|
||||
{"dependency": "goldctl", "version": "git_revision:2387d6fff449587eecbb7e45b2692ca0710b63b9"}
|
||||
]
|
||||
|
||||
- name: Linux_android_emu flutter_driver_android_test
|
||||
recipe: flutter/flutter_drone
|
||||
bringup: true
|
||||
timeout: 60
|
||||
properties:
|
||||
shard: android_engine_tests
|
||||
tags: >
|
||||
["framework", "hostonly", "shard", "linux"]
|
||||
dependencies: >-
|
||||
[
|
||||
{"dependency": "goldctl", "version": "git_revision:2387d6fff449587eecbb7e45b2692ca0710b63b9"}
|
||||
]
|
||||
presubmit_max_attempts: "2"
|
||||
|
||||
- name: Linux_android_emu_34 flutter_driver_android_test
|
||||
recipe: flutter/flutter_drone
|
||||
timeout: 60
|
||||
properties:
|
||||
shard: android_engine_tests
|
||||
tags: >
|
||||
["framework", "hostonly", "shard", "linux"]
|
||||
dependencies: >-
|
||||
[
|
||||
{"dependency": "goldctl", "version": "git_revision:2387d6fff449587eecbb7e45b2692ca0710b63b9"}
|
||||
]
|
||||
|
||||
- name: Linux web_benchmarks_canvaskit
|
||||
recipe: devicelab/devicelab_drone
|
||||
presubmit: false
|
||||
|
@ -3,6 +3,7 @@
|
||||
// found in the LICENSE file.
|
||||
|
||||
import 'package:file/file.dart';
|
||||
import 'package:file/local.dart';
|
||||
import 'package:glob/glob.dart';
|
||||
import 'package:glob/list_local_fs.dart';
|
||||
import 'package:path/path.dart' as path;
|
||||
@ -32,28 +33,78 @@ import '../utils.dart';
|
||||
/// to determine flakiness in the *same* state, or want better debugging, see
|
||||
/// `dev/integration_tests/android_engine_test/README.md`.
|
||||
Future<void> runAndroidEngineTests({required ImpellerBackend impellerBackend}) async {
|
||||
print('Running Flutter Driver Android tests...');
|
||||
print('Running Flutter Driver Android tests (backend=$impellerBackend)');
|
||||
|
||||
final String androidEngineTestPath = path.join('dev', 'integration_tests', 'android_engine_test');
|
||||
final List<FileSystemEntity> mains = Glob('$androidEngineTestPath/lib/**_main.dart').listSync();
|
||||
for (final FileSystemEntity file in mains) {
|
||||
await runCommand(
|
||||
'flutter',
|
||||
<String>[
|
||||
'drive',
|
||||
path.relative(file.path, from: androidEngineTestPath),
|
||||
// There are no reason to enable development flags for this test.
|
||||
// Disable them to work around flakiness issues, and in general just
|
||||
// make less things start up unnecessarily.
|
||||
'--no-dds',
|
||||
'--no-enable-dart-profiling',
|
||||
'--test-arguments=test',
|
||||
'--test-arguments=--reporter=expanded',
|
||||
],
|
||||
workingDirectory: androidEngineTestPath,
|
||||
environment: <String, String>{'ANDROID_ENGINE_TEST_GOLDEN_VARIANT': impellerBackend.name},
|
||||
|
||||
final File androidManifestXml = const LocalFileSystem().file(
|
||||
path.join(androidEngineTestPath, 'android', 'app', 'src', 'main', 'AndroidManifest.xml'),
|
||||
);
|
||||
final String androidManifestContents = androidManifestXml.readAsStringSync();
|
||||
|
||||
try {
|
||||
// Replace whatever the current backend is with the specified backend.
|
||||
final RegExp impellerBackendMetadata = RegExp(_impellerBackendMetadata(value: '.*'));
|
||||
androidManifestXml.writeAsStringSync(
|
||||
androidManifestContents.replaceFirst(
|
||||
impellerBackendMetadata,
|
||||
_impellerBackendMetadata(value: impellerBackend.name),
|
||||
),
|
||||
);
|
||||
|
||||
// Stdout will produce: "Using the Impeller rendering backend (.*)"
|
||||
// TODO(matanlurey): Enable once `flutter drive` retains error logs.
|
||||
// final RegExp impellerStdoutPattern = RegExp('Using the Imepller rendering backend (.*)');
|
||||
|
||||
for (final FileSystemEntity file in mains) {
|
||||
final CommandResult result = await runCommand(
|
||||
'flutter',
|
||||
<String>[
|
||||
'drive',
|
||||
path.relative(file.path, from: androidEngineTestPath),
|
||||
// There are no reason to enable development flags for this test.
|
||||
// Disable them to work around flakiness issues, and in general just
|
||||
// make less things start up unnecessarily.
|
||||
'--no-dds',
|
||||
'--no-enable-dart-profiling',
|
||||
'--test-arguments=test',
|
||||
'--test-arguments=--reporter=expanded',
|
||||
],
|
||||
workingDirectory: androidEngineTestPath,
|
||||
environment: <String, String>{'ANDROID_ENGINE_TEST_GOLDEN_VARIANT': impellerBackend.name},
|
||||
);
|
||||
final String? stdout = result.flattenedStdout;
|
||||
if (stdout == null) {
|
||||
foundError(<String>['No stdout produced.']);
|
||||
continue;
|
||||
}
|
||||
|
||||
// TODO(matanlurey): Enable once `flutter drive` retains error logs.
|
||||
// https://github.com/flutter/flutter/issues/162087.
|
||||
//
|
||||
// final Match? stdoutMatch = impellerStdoutPattern.firstMatch(stdout);
|
||||
// if (stdoutMatch == null) {
|
||||
// foundError(<String>['Could not find pattern ${impellerStdoutPattern.pattern}.', stdout]);
|
||||
// continue;
|
||||
// }
|
||||
|
||||
// final String reportedBackend = stdoutMatch.group(1)!.toLowerCase();
|
||||
// if (reportedBackend != impellerBackend.name) {
|
||||
// foundError(<String>[
|
||||
// 'Reported Imepller backend was $reportedBackend, expected ${impellerBackend.name}',
|
||||
// ]);
|
||||
// continue;
|
||||
// }
|
||||
}
|
||||
} finally {
|
||||
// Restore original contents.
|
||||
androidManifestXml.writeAsStringSync(androidManifestContents);
|
||||
}
|
||||
}
|
||||
|
||||
String _impellerBackendMetadata({required String value}) {
|
||||
return '<meta-data android:name="io.flutter.embedding.android.ImpellerBackend" android:value="$value" />';
|
||||
}
|
||||
|
||||
enum ImpellerBackend { vulkan, opengles }
|
||||
|
@ -137,9 +137,6 @@ Future<void> main(List<String> args) async {
|
||||
'web_skwasm_tests': webTestsSuite.runWebSkwasmUnitTests,
|
||||
// All web integration tests
|
||||
'web_long_running_tests': webTestsSuite.webLongRunningTestsRunner,
|
||||
// TODO(matanlurey): Remove once a post-submit runs with the new shards.
|
||||
// (Part of https://github.com/flutter/flutter/issues/161333)
|
||||
'android_engine_tests': () => runAndroidEngineTests(impellerBackend: ImpellerBackend.vulkan),
|
||||
'android_engine_vulkan_tests':
|
||||
() => runAndroidEngineTests(impellerBackend: ImpellerBackend.vulkan),
|
||||
'android_engine_opengles_tests':
|
||||
|
@ -19,7 +19,8 @@ See [`dev/bots/suite_runners/run_android_engine_tests.dart`](../../bots/suite_ru
|
||||
|
||||
```sh
|
||||
# TIP: If golden-files do not exist locally, this command will fail locally.
|
||||
SHARD=android_engine_tests bin/cache/dart-sdk/bin/dart dev/bots/test.dart
|
||||
SHARD=android_engine_vulkan_tests bin/cache/dart-sdk/bin/dart dev/bots/test.dart
|
||||
SHARD=android_engine_opengles_tests bin/cache/dart-sdk/bin/dart dev/bots/test.dart
|
||||
```
|
||||
|
||||
## Running the apps and tests
|
||||
|
@ -31,9 +31,9 @@ found in the LICENSE file. -->
|
||||
</activity>
|
||||
<!-- Don't delete the meta-data below.
|
||||
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
|
||||
<meta-data
|
||||
android:name="flutterEmbedding"
|
||||
android:value="2" />
|
||||
<meta-data android:name="flutterEmbedding" android:value="2" />
|
||||
<meta-data android:name="io.flutter.embedding.android.EnableImpeller" android:value="true" />
|
||||
<meta-data android:name="io.flutter.embedding.android.ImpellerBackend" android:value="vulkan" />
|
||||
</application>
|
||||
<!-- Required to query activities that can process text, see:
|
||||
https://developer.android.com/training/package-visibility and
|
||||
|
Loading…
Reference in New Issue
Block a user