Skip to content

Commit

Permalink
Allow A/B tests to run as just aggregator of local engine benchmarks (f…
Browse files Browse the repository at this point in the history
…lutter#146479)

Add `--ab-local-engine-only` flag to change A/B benchmark aggregate behavior to instead run the number of tasks specified with the local engine only, not the default engine.  This is useful when you are trying to get average and noise results for a particular engine branch, without needing the default engine every time you change the engine.

Fixes flutter#143770
  • Loading branch information
jmagman authored Apr 12, 2024
1 parent a34086a commit 53cba24
Showing 1 changed file with 26 additions and 15 deletions.
41 changes: 26 additions & 15 deletions dev/devicelab/bin/run.dart
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ Future<void> main(List<String> rawArgs) async {
deviceId: deviceId,
resultsFile: resultsFile,
taskName: taskNames.single,
onlyLocalEngine: (args['ab-local-engine-only'] as bool?) ?? false,
);
} else {
await runTasks(taskNames,
Expand Down Expand Up @@ -142,6 +143,7 @@ Future<void> _runABTest({
required String? deviceId,
required String resultsFile,
required String taskName,
bool onlyLocalEngine = false,
}) async {
print('$taskName A/B test. Will run $runsPerTest times.');

Expand All @@ -155,23 +157,27 @@ Future<void> _runABTest({
for (int i = 1; i <= runsPerTest; i++) {
section('Run #$i');

print('Running with the default engine (A)');
final TaskResult defaultEngineResult = await runTask(
taskName,
silent: silent,
deviceId: deviceId,
);

print('Default engine result:');
print(const JsonEncoder.withIndent(' ').convert(defaultEngineResult));

if (!defaultEngineResult.succeeded) {
stderr.writeln('Task failed on the default engine.');
exit(1);
if (onlyLocalEngine) {
print('Skipping default engine (A)');
} else {
print('Running with the default engine (A)');
final TaskResult defaultEngineResult = await runTask(
taskName,
silent: silent,
deviceId: deviceId,
);

print('Default engine result:');
print(const JsonEncoder.withIndent(' ').convert(defaultEngineResult));

if (!defaultEngineResult.succeeded) {
stderr.writeln('Task failed on the default engine.');
exit(1);
}

abTest.addAResult(defaultEngineResult);
}

abTest.addAResult(defaultEngineResult);

print('Running with the local engine (B)');
final TaskResult localEngineResult = await runTask(
taskName,
Expand Down Expand Up @@ -273,6 +279,11 @@ ArgParser createArgParser(List<String> taskNames) {
'The filename may contain a single # character to be replaced by a sequence\n'
'number if the name already exists.',
)
..addFlag(
'ab-local-engine-only',
help: 'When running the A/B aggregator, do not run benchmarks with the default engine (A), only the local engine (B).\n'
'Shows the averages and noise report for the local engine without comparison to anything else.',
)
..addFlag(
'exit',
help: 'Exit on the first test failure. Currently flakes are intentionally (though '
Expand Down

0 comments on commit 53cba24

Please sign in to comment.