add old gallery page transition (#106701)

diff --git a/.ci.yaml b/.ci.yaml
index 7d90cc3..2817621 100644
--- a/.ci.yaml
+++ b/.ci.yaml
@@ -1957,6 +1957,17 @@
       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 3a2d76c..ebba87b 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 0000000..55f01bf
--- /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 0000000..fd93bb5
--- /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 0000000..0ef7ae4
--- /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<void>.delayed(const Duration(milliseconds: 500));
+          await driver.waitFor(find.byTooltip('Back'));
+          await driver.tap(find.byTooltip('Back'));
+          await Future<void>.delayed(const Duration(milliseconds: 500));
+        }
+      });
+
+      final TimelineSummary summary = TimelineSummary.summarize(timeline);
+      await summary.writeTimelineToFile('page_transition_perf', pretty: true);
+    }, timeout: Timeout.none);
+  });
+}