| // 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 'dart:async'; |
| |
| import 'package:flutter_driver/flutter_driver.dart'; |
| import 'package:test/test.dart' hide TypeMatcher, isInstanceOf; |
| |
| final RegExp calibrationRegExp = RegExp('Flutter frame rate is (.*)fps'); |
| final RegExp statsRegExp = RegExp('Produced: (.*)fps\nConsumed: (.*)fps\nWidget builds: (.*)'); |
| const Duration samplingTime = Duration(seconds: 8); |
| |
| Future<void> main() async { |
| group('texture suite', () { |
| late FlutterDriver driver; |
| |
| setUpAll(() async { |
| driver = await FlutterDriver.connect(); |
| }); |
| |
| // This test verifies that we can consume texture frames at a rate |
| // close to the minimum of the rate at which they are produced |
| // and Flutter's frame rate. It also verifies that we do not rebuild the |
| // Widget tree during texture consumption. The test starts by measuring |
| // Flutter's frame rate. |
| test('texture rendering', () async { |
| final SerializableFinder fab = find.byValueKey('fab'); |
| final SerializableFinder summary = find.byValueKey('summary'); |
| |
| // Wait for calibration to complete and fab to appear. |
| await driver.waitFor(fab); |
| |
| final String calibrationResult = await driver.getText(summary); |
| final Match? matchCalibration = calibrationRegExp.matchAsPrefix(calibrationResult); |
| expect(matchCalibration, isNotNull); |
| final double flutterFrameRate = double.parse(matchCalibration?.group(1) ?? '0'); |
| |
| // Texture frame stats at 0.5x Flutter frame rate |
| await driver.tap(fab); |
| await Future<void>.delayed(samplingTime); |
| await driver.tap(fab); |
| |
| final String statsSlow = await driver.getText(summary); |
| final Match matchSlow = statsRegExp.matchAsPrefix(statsSlow)!; |
| expect(matchSlow, isNotNull); |
| expect(double.parse(matchSlow.group(1)!), closeTo(flutterFrameRate / 2.0, 5.0)); |
| expect(double.parse(matchSlow.group(2)!), closeTo(flutterFrameRate / 2.0, 5.0)); |
| expect(int.parse(matchSlow.group(3)!), 1); |
| |
| // Texture frame stats at 2.0x Flutter frame rate |
| await driver.tap(fab); |
| await Future<void>.delayed(samplingTime); |
| await driver.tap(fab); |
| |
| final String statsFast = await driver.getText(summary); |
| final Match matchFast = statsRegExp.matchAsPrefix(statsFast)!; |
| expect(matchFast, isNotNull); |
| expect(double.parse(matchFast.group(1)!), closeTo(flutterFrameRate * 2.0, 5.0)); |
| expect(double.parse(matchFast.group(2)!), closeTo(flutterFrameRate, 10.0)); |
| expect(int.parse(matchFast.group(3)!), 1); |
| }, timeout: Timeout.none); |
| |
| tearDownAll(() async { |
| driver.close(); |
| }); |
| }); |
| } |