diff --git a/.ci.yaml b/.ci.yaml index 7d90cc3551..2817621bd4 100644 --- a/.ci.yaml +++ b/.ci.yaml @@ -1957,6 +1957,17 @@ targets: task_name: new_gallery__crane_perf scheduler: luci + - name: Linux_android old_gallery__transition_perf + bringup: true + recipe: devicelab/devicelab_drone + presubmit: false + timeout: 60 + properties: + tags: > + ["devicelab", "android", "linux"] + task_name: old_gallery__transition_perf + scheduler: luci + - name: Linux_android new_gallery__transition_perf recipe: devicelab/devicelab_drone presubmit: false diff --git a/TESTOWNERS b/TESTOWNERS index 3a2d76c4c8..ebba87b939 100644 --- a/TESTOWNERS +++ b/TESTOWNERS @@ -64,6 +64,7 @@ /dev/devicelab/bin/tasks/list_text_layout_impeller_perf__e2e_summary.dart @dnfield @flutter/engine /dev/devicelab/bin/tasks/multi_widget_construction_perf__e2e_summary.dart @zanderso @flutter/engine /dev/devicelab/bin/tasks/new_gallery__crane_perf.dart @zanderso @flutter/engine +/dev/devicelab/bin/tasks/old_gallery__transition_perf.dart @jonahwilliams @flutter/engine /dev/devicelab/bin/tasks/picture_cache_perf__e2e_summary.dart @zanderso @flutter/engine /dev/devicelab/bin/tasks/platform_channels_benchmarks.dart @gaaclarke @flutter/engine /dev/devicelab/bin/tasks/platform_views_scroll_perf__timeline_summary.dart @zanderso @flutter/engine diff --git a/dev/devicelab/bin/tasks/old_gallery__transition_perf.dart b/dev/devicelab/bin/tasks/old_gallery__transition_perf.dart new file mode 100644 index 0000000000..55f01bf61a --- /dev/null +++ b/dev/devicelab/bin/tasks/old_gallery__transition_perf.dart @@ -0,0 +1,17 @@ +// 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 'package:flutter_devicelab/framework/devices.dart'; +import 'package:flutter_devicelab/framework/framework.dart'; +import 'package:flutter_devicelab/framework/utils.dart'; +import 'package:flutter_devicelab/tasks/perf_tests.dart'; + +void main() async { + deviceOperatingSystem = DeviceOperatingSystem.android; + await task(PerfTest( + '${flutterDirectory.path}/dev/integration_tests/flutter_gallery', + 'test_driver/page_transitions_perf.dart', + 'page_transition_perf', + ).run); +} diff --git a/dev/integration_tests/flutter_gallery/test_driver/page_transitions_perf.dart b/dev/integration_tests/flutter_gallery/test_driver/page_transitions_perf.dart new file mode 100644 index 0000000000..fd93bb5d70 --- /dev/null +++ b/dev/integration_tests/flutter_gallery/test_driver/page_transitions_perf.dart @@ -0,0 +1,14 @@ +// 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 'package:flutter/material.dart'; +import 'package:flutter_driver/driver_extension.dart'; +import 'package:flutter_gallery/gallery/app.dart' show GalleryApp; + +void main() { + enableFlutterDriverExtension(); + // As in lib/main.dart: overriding https://github.com/flutter/flutter/issues/13736 + // for better visual effect at the cost of performance. + runApp(const GalleryApp(testMode: true)); +} diff --git a/dev/integration_tests/flutter_gallery/test_driver/page_transitions_perf_test.dart b/dev/integration_tests/flutter_gallery/test_driver/page_transitions_perf_test.dart new file mode 100644 index 0000000000..0ef7ae4614 --- /dev/null +++ b/dev/integration_tests/flutter_gallery/test_driver/page_transitions_perf_test.dart @@ -0,0 +1,39 @@ +// 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 'package:flutter_driver/flutter_driver.dart'; +import 'package:test/test.dart' hide TypeMatcher, isInstanceOf; + +void main() { + group('page transition performance test', () { + late FlutterDriver driver; + + setUpAll(() async { + driver = await FlutterDriver.connect(); + + await driver.waitUntilFirstFrameRasterized(); + }); + + tearDownAll(() async { + driver.close(); + }); + + test('measure', () async { + final Timeline timeline = await driver.traceAction(() async { + await driver.tap(find.text('Material')); + + for (int i = 0; i < 10; i++) { + await driver.tap(find.text('Banner')); + await Future.delayed(const Duration(milliseconds: 500)); + await driver.waitFor(find.byTooltip('Back')); + await driver.tap(find.byTooltip('Back')); + await Future.delayed(const Duration(milliseconds: 500)); + } + }); + + final TimelineSummary summary = TimelineSummary.summarize(timeline); + await summary.writeTimelineToFile('page_transition_perf', pretty: true); + }, timeout: Timeout.none); + }); +}