flutter/dev/benchmarks/macrobenchmarks/test_driver/util.dart
gaaclarke 11025e4acd
Sped up the time to find macrobenchmarks. (#131959)
This reduce the execution time of macrobenchmarks driver tests.

I tried to find the exact size to scroll the screen but I couldn't find a way to do that with driver tests.
2023-08-04 23:41:24 +00:00

73 lines
2.4 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:flutter_driver/flutter_driver.dart';
import 'package:macrobenchmarks/common.dart';
import 'package:test/test.dart' hide TypeMatcher, isInstanceOf;
typedef DriverTestCallBack = Future<void> Function(FlutterDriver driver);
Future<void> runDriverTestForRoute(String routeName, DriverTestCallBack body) async {
final FlutterDriver driver = await FlutterDriver.connect();
// The slight initial delay avoids starting the timing during a
// period of increased load on the device. Without this delay, the
// benchmark has greater noise.
// See: https://github.com/flutter/flutter/issues/19434
await Future<void>.delayed(const Duration(milliseconds: 250));
await driver.forceGC();
final SerializableFinder scrollable = find.byValueKey(kScrollableName);
expect(scrollable, isNotNull);
final SerializableFinder button = find.byValueKey(routeName);
expect(button, isNotNull);
// -320 comes from the logical pixels for a full screen scroll for the
// smallest reference device, iPhone 4, whose physical screen dimensions are
// 960px × 640px.
const double dyScroll = -320.0;
await driver.scrollUntilVisible(scrollable, button, dyScroll: dyScroll);
await driver.tap(button);
await body(driver);
driver.close();
}
void macroPerfTest(
String testName,
String routeName, {
Duration? pageDelay,
Duration duration = const Duration(seconds: 3),
Future<void> Function(FlutterDriver driver)? driverOps,
Future<void> Function(FlutterDriver driver)? setupOps,
}) {
test(testName, () async {
late Timeline timeline;
await runDriverTestForRoute(routeName, (FlutterDriver driver) async {
if (pageDelay != null) {
// Wait for the page to load
await Future<void>.delayed(pageDelay);
}
if (setupOps != null) {
await setupOps(driver);
}
timeline = await driver.traceAction(() async {
final Future<void> durationFuture = Future<void>.delayed(duration);
if (driverOps != null) {
await driverOps(driver);
}
await durationFuture;
});
});
expect(timeline, isNotNull);
final TimelineSummary summary = TimelineSummary.summarize(timeline);
await summary.writeTimelineToFile(testName, pretty: true);
}, timeout: Timeout.none);
}