main_test.dart 2.67 KB
Newer Older
1 2 3 4 5
// Copyright 2017 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';
6

7
import 'package:flutter_driver/flutter_driver.dart';
8
import 'package:test/test.dart' hide TypeMatcher, isInstanceOf;
9

10 11
final RegExp calibrationRegExp = RegExp('Flutter frame rate is (.*)fps');
final RegExp statsRegExp = RegExp('Produced: (.*)fps\nConsumed: (.*)fps\nWidget builds: (.*)');
12
const Duration samplingTime = Duration(seconds: 8);
13

14
Future<void> main() async {
15 16 17 18 19 20 21
  group('texture suite', () {
    FlutterDriver driver;

    setUpAll(() async {
      driver = await FlutterDriver.connect();
    });

22 23 24 25 26
    // 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.
27 28 29 30 31
    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.
32
      await driver.waitFor(fab);
33 34 35 36 37 38 39 40

      final String calibrationResult = await driver.getText(summary);
      final Match matchCalibration = calibrationRegExp.matchAsPrefix(calibrationResult);
      expect(matchCalibration, isNotNull);
      final double flutterFrameRate = double.parse(matchCalibration.group(1));

      // Texture frame stats at 0.5x Flutter frame rate
      await driver.tap(fab);
41
      await Future<void>.delayed(samplingTime);
42 43 44 45 46 47 48 49 50 51 52
      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);
53
      await Future<void>.delayed(samplingTime);
54 55 56 57 58
      await driver.tap(fab);

      final String statsFast = await driver.getText(summary);
      final Match matchFast = statsRegExp.matchAsPrefix(statsFast);
      expect(matchFast, isNotNull);
59
      expect(double.parse(matchFast.group(1)), closeTo(flutterFrameRate * 2.0, 5.0));
60 61
      expect(double.parse(matchFast.group(2)), closeTo(flutterFrameRate, 10.0));
      expect(int.parse(matchFast.group(3)), 1);
62
    });
63 64 65 66 67 68

    tearDownAll(() async {
      driver?.close();
    });
  });
}