Add a basic scrolling test for the Gallery home page.
Current numbers from my Nexus 5:
"average_frame_build_time_millis": 22.6854,
"missed_frame_build_budget_count": 15,
"frame_count": 15
Filed https://github.com/flutter/flutter/issues/3296
@yjbanov @hansmuller @vlidholt
diff --git a/examples/material_gallery/pubspec.yaml b/examples/material_gallery/pubspec.yaml
index 38040c2..954510c 100644
--- a/examples/material_gallery/pubspec.yaml
+++ b/examples/material_gallery/pubspec.yaml
@@ -16,3 +16,5 @@
test: any # flutter_test provides the version constraints
flutter_test:
path: ../../packages/flutter_test
+ flutter_driver:
+ path: ../../packages/flutter_driver
diff --git a/examples/material_gallery/test_driver/scroll_perf.dart b/examples/material_gallery/test_driver/scroll_perf.dart
new file mode 100644
index 0000000..1b0b033
--- /dev/null
+++ b/examples/material_gallery/test_driver/scroll_perf.dart
@@ -0,0 +1,11 @@
+// Copyright 2016 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 'package:flutter_driver/driver_extension.dart';
+import 'package:material_gallery/main.dart' as app;
+
+void main() {
+ enableFlutterDriverExtension();
+ app.main();
+}
diff --git a/examples/material_gallery/test_driver/scroll_perf_test.dart b/examples/material_gallery/test_driver/scroll_perf_test.dart
new file mode 100644
index 0000000..c07b571
--- /dev/null
+++ b/examples/material_gallery/test_driver/scroll_perf_test.dart
@@ -0,0 +1,50 @@
+// Copyright 2016 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';
+
+void main() {
+ group('scrolling performance test', () {
+ FlutterDriver driver;
+
+ setUpAll(() async {
+ driver = await FlutterDriver.connect();
+ });
+
+ tearDownAll(() async {
+ if (driver != null)
+ driver.close();
+ });
+
+ test('measure', () async {
+ Timeline timeline = await driver.traceAction(() async {
+ // Find the scrollable stock list
+ ObjectRef stockList = await driver.findByValueKey('Gallery List');
+ expect(stockList, isNotNull);
+
+ await driver.tap(await driver.findByText('Demos'));
+ await driver.tap(await driver.findByText('Components'));
+ await driver.tap(await driver.findByText('Style'));
+
+ // Scroll down
+ for (int i = 0; i < 5; i++) {
+ await driver.scroll(stockList, 0.0, -300.0, new Duration(milliseconds: 300));
+ await new Future<Null>.delayed(new Duration(milliseconds: 500));
+ }
+
+ // Scroll up
+ for (int i = 0; i < 5; i++) {
+ await driver.scroll(stockList, 0.0, 300.0, new Duration(milliseconds: 300));
+ await new Future<Null>.delayed(new Duration(milliseconds: 500));
+ }
+ });
+
+ TimelineSummary summary = new TimelineSummary.summarize(timeline);
+ summary.writeSummaryToFile('home_scroll_perf', pretty: true);
+ summary.writeTimelineToFile('home_scroll_perf', pretty: true);
+ });
+ });
+}