// 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.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.delayed(pageDelay); } final Timeline timeline = await driver.traceAction(() async { await Future.delayed(duration); }); final TimelineSummary summary = TimelineSummary.summarize(timeline); summary.writeSummaryToFile(testName, pretty: true); summary.writeTimelineToFile(testName, pretty: true); driver.close(); }); }