Unverified Commit f7b2d6e7 authored by Ian Hickson's avatar Ian Hickson Committed by GitHub

Try to make this test less flaky. (#13254)

parent c358898a
......@@ -10,6 +10,7 @@ import 'package:flutter_driver/driver_extension.dart';
void main() {
enableFlutterDriverExtension();
debugPrint('Application starting...');
runApp(new MyApp());
}
......@@ -40,37 +41,42 @@ Widget builds: $_widgetBuilds''';
Future<Null> _nextState() async {
switch (_state) {
case FrameState.initial:
_widgetBuilds = 0;
_summary = 'Producing texture frames at .5x speed...';
_state = FrameState.slow;
_icon = Icons.stop;
channel.invokeMethod('start', _flutterFrameRate ~/ 2);
break;
case FrameState.slow:
await channel.invokeMethod('stop');
await _summarizeStats();
_icon = Icons.fast_forward;
_state = FrameState.afterSlow;
break;
case FrameState.afterSlow:
_widgetBuilds = 0;
_summary = 'Producing texture frames at 2x speed...';
_state = FrameState.fast;
_icon = Icons.stop;
channel.invokeMethod('start', (_flutterFrameRate * 2).toInt());
break;
case FrameState.fast:
await channel.invokeMethod('stop');
await _summarizeStats();
_state = FrameState.afterFast;
_icon = Icons.replay;
break;
case FrameState.afterFast:
_summary = 'Press play to start again';
_state = FrameState.initial;
_icon = Icons.play_arrow;
break;
case FrameState.initial:
debugPrint('Starting .5x speed test...');
_widgetBuilds = 0;
_summary = 'Producing texture frames at .5x speed...';
_state = FrameState.slow;
_icon = Icons.stop;
channel.invokeMethod('start', _flutterFrameRate ~/ 2);
break;
case FrameState.slow:
debugPrint('Stopping .5x speed test...');
await channel.invokeMethod('stop');
await _summarizeStats();
_icon = Icons.fast_forward;
_state = FrameState.afterSlow;
break;
case FrameState.afterSlow:
debugPrint('Starting 2x speed test...');
_widgetBuilds = 0;
_summary = 'Producing texture frames at 2x speed...';
_state = FrameState.fast;
_icon = Icons.stop;
channel.invokeMethod('start', (_flutterFrameRate * 2).toInt());
break;
case FrameState.fast:
debugPrint('Stopping 2x speed test...');
await channel.invokeMethod('stop');
await _summarizeStats();
_state = FrameState.afterFast;
_icon = Icons.replay;
break;
case FrameState.afterFast:
debugPrint('Test complete.');
_summary = 'Press play to start again';
_state = FrameState.initial;
_icon = Icons.play_arrow;
break;
}
setState(() {});
}
......@@ -81,26 +87,34 @@ Widget builds: $_widgetBuilds''';
_calibrate();
}
static const int calibrationTickCount = 600;
/// Measures Flutter's frame rate.
Future<Null> _calibrate() async {
await new Future<Null>.delayed(const Duration(milliseconds: 200));
debugPrint('Awaiting calm (3 second pause)...');
await new Future<Null>.delayed(const Duration(milliseconds: 3000));
debugPrint('Calibrating...');
DateTime startTime;
int tickCount = 0;
Ticker ticker;
ticker = createTicker((Duration _) {
tickCount++;
if (tickCount == 120) {
ticker = createTicker((Duration time) {
tickCount += 1;
if (tickCount == calibrationTickCount) { // about 10 seconds
final Duration elapsed = new DateTime.now().difference(startTime);
ticker.stop();
ticker.dispose();
setState(() {
_flutterFrameRate = tickCount * 1000 / elapsed.inMilliseconds;
debugPrint('Calibrated: frame rate ${_flutterFrameRate.toStringAsFixed(1)}fps.');
_summary = '''
Flutter frame rate is ${_flutterFrameRate.toStringAsFixed(1)}fps.
Press play to produce texture frames.''';
_icon = Icons.play_arrow;
_state = FrameState.initial;
});
} else {
if ((tickCount % (calibrationTickCount ~/ 20)) == 0)
debugPrint('Calibrating... ${(100.0 * tickCount / calibrationTickCount).floor()}%');
}
});
ticker.start();
......@@ -113,7 +127,7 @@ Press play to produce texture frames.''';
@override
Widget build(BuildContext context) {
_widgetBuilds++;
_widgetBuilds += 1;
return new MaterialApp(
home: new Scaffold(
body: new Center(
......
......@@ -8,7 +8,7 @@ import 'package:test/test.dart';
final RegExp calibrationRegExp = new RegExp('Flutter frame rate is (.*)fps');
final RegExp statsRegExp = new RegExp('Produced: (.*)fps\nConsumed: (.*)fps\nWidget builds: (.*)');
const Duration samplingTime = const Duration(seconds: 3);
const Duration samplingTime = const Duration(seconds: 8);
Future<Null> main() async {
group('texture suite', () {
......@@ -28,7 +28,7 @@ Future<Null> main() async {
final SerializableFinder summary = find.byValueKey('summary');
// Wait for calibration to complete and fab to appear.
await driver.waitFor(fab, timeout: const Duration(seconds: 10));
await driver.waitFor(fab, timeout: const Duration(seconds: 40));
final String calibrationResult = await driver.getText(summary);
final Match matchCalibration = calibrationRegExp.matchAsPrefix(calibrationResult);
......@@ -58,7 +58,7 @@ Future<Null> main() async {
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: const Timeout(const Duration(minutes: 1)));
tearDownAll(() async {
driver?.close();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment