| // Copyright 2019 The Chromium 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 'dart:async'; | |
| import 'package:flutter_driver/flutter_driver.dart'; | |
| import 'package:test/test.dart' hide TypeMatcher, isInstanceOf; | |
| void macroPerfTest( | |
| String testName, | |
| String routeName, | |
| {Duration pageDelay, Duration duration = const Duration(seconds: 3)}) { | |
| test(testName, () 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 button = find.byValueKey(routeName); | |
| expect(button, isNotNull); | |
| await driver.tap(button); | |
| if (pageDelay != null) { | |
| // Wait for the page to load | |
| await Future<void>.delayed(pageDelay); | |
| } | |
| final Timeline timeline = await driver.traceAction(() async { | |
| await Future<void>.delayed(duration); | |
| }); | |
| final TimelineSummary summary = TimelineSummary.summarize(timeline); | |
| summary.writeSummaryToFile(testName, pretty: true); | |
| summary.writeTimelineToFile(testName, pretty: true); | |
| driver.close(); | |
| }); | |
| } |