mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00
macrobenchmark: TextField with complex paragraph (#73374)
This commit is contained in:
parent
4a52532e15
commit
cbe72db135
@ -55,6 +55,7 @@ The key `[test_name]` can be:
|
||||
- `post_backdrop_filter_perf`
|
||||
- `simple_animation_perf`
|
||||
- `textfield_perf`
|
||||
- `fullscreen_textfield_perf`
|
||||
|
||||
### E2E benchmarks
|
||||
|
||||
|
@ -11,6 +11,7 @@ const String kPictureCacheRouteName = '/picture_cache';
|
||||
const String kLargeImageChangerRouteName = '/large_image_changer';
|
||||
const String kLargeImagesRouteName = '/large_images';
|
||||
const String kTextRouteName = '/text';
|
||||
const String kFullscreenTextRouteName = '/fullscreen_text';
|
||||
const String kAnimatedPlaceholderRouteName = '/animated_placeholder';
|
||||
const String kColorFilterAndFadeRouteName = '/color_filter_and_fade';
|
||||
const String kFadingChildAnimationRouteName = '/fading_child_animation';
|
||||
|
@ -12,6 +12,7 @@ import 'src/color_filter_and_fade.dart';
|
||||
import 'src/cubic_bezier.dart';
|
||||
import 'src/cull_opacity.dart';
|
||||
import 'src/filtered_child_animation.dart';
|
||||
import 'src/fullscreenTextField.dart';
|
||||
import 'src/heavy_grid_view.dart';
|
||||
import 'src/large_image_changer.dart';
|
||||
import 'src/large_images.dart';
|
||||
@ -45,6 +46,7 @@ class MacrobenchmarksApp extends StatelessWidget {
|
||||
kLargeImageChangerRouteName: (BuildContext context) => LargeImageChangerPage(),
|
||||
kLargeImagesRouteName: (BuildContext context) => LargeImagesPage(),
|
||||
kTextRouteName: (BuildContext context) => TextPage(),
|
||||
kFullscreenTextRouteName: (BuildContext context) => TextFieldPage(),
|
||||
kAnimatedPlaceholderRouteName: (BuildContext context) => AnimatedPlaceholderPage(),
|
||||
kColorFilterAndFadeRouteName: (BuildContext context) => ColorFilterAndFadePage(),
|
||||
kFadingChildAnimationRouteName: (BuildContext context) => const FilteredChildAnimationPage(FilterType.opacity),
|
||||
@ -123,6 +125,13 @@ class HomePage extends StatelessWidget {
|
||||
Navigator.pushNamed(context, kTextRouteName);
|
||||
},
|
||||
),
|
||||
ElevatedButton(
|
||||
key: const Key(kFullscreenTextRouteName),
|
||||
child: const Text('Fullscreen Text'),
|
||||
onPressed: () {
|
||||
Navigator.pushNamed(context, kFullscreenTextRouteName);
|
||||
},
|
||||
),
|
||||
ElevatedButton(
|
||||
key: const Key(kAnimatedPlaceholderRouteName),
|
||||
child: const Text('Animated Placeholder'),
|
||||
|
@ -0,0 +1,63 @@
|
||||
// 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';
|
||||
|
||||
const String textLotsOfText = 'Lorem ipsum dolor sit amet, consectetur '
|
||||
'adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna '
|
||||
'aliqua. Odio facilisis mauris sit amet massa. Tellus pellentesque eu '
|
||||
'tincidunt tortor aliquam nulla facilisi cras fermentum. Sit amet risus nullam '
|
||||
'eget felis eget nunc. Placerat in egestas erat imperdiet sed. Vestibulum '
|
||||
'mattis ullamcorper velit sed. At auctor urna nunc id cursus metus aliquam. In '
|
||||
'nibh mauris cursus mattis. Quis blandit turpis cursus in hac habitasse platea '
|
||||
'dictumst. Orci a scelerisque purus semper eget duis at tellus. At tempor '
|
||||
'commodo ullamcorper a lacus. At auctor urna nunc id cursus metus aliquam '
|
||||
'eleifend. Sagittis aliquam malesuada bibendum arcu vitae elementum. Massa sed '
|
||||
'elementum tempus egestas sed sed risus. Amet consectetur adipiscing elit ut '
|
||||
'aliquam purus sit amet luctus. Elementum nisi quis eleifend quam adipiscing '
|
||||
'vitae. Aliquam sem fringilla ut morbi tincidunt augue.'
|
||||
'👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦'
|
||||
'👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦'
|
||||
'👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦'
|
||||
'👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦'
|
||||
'👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦'
|
||||
'👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦'
|
||||
'👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦'
|
||||
'👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦'
|
||||
'👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦'
|
||||
'👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦'
|
||||
'👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦'
|
||||
'👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦'
|
||||
'👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦'
|
||||
'👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦'
|
||||
'👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦'
|
||||
'👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦👨👩👦'
|
||||
'😀 😃 😄 😁 😆 😅 😂 🤣 🥲 ☺️ 😊 😇 🙂 🙃 😉 😌 😍 🥰 😘 😗 😙'
|
||||
'😚 😋 😛 😝 😜 🤪 🤨 🧐 🤓 😎 🥸 🤩 🥳 😏 😒 😞 😔 😟 😕 🙁 ☹'
|
||||
'️ 😣 😖 😫 😩 🥺 😢 😭 😤 😠 😡 🤬 🤯 😳 🥵 🥶 😱 😨 😰 😥 😓 '
|
||||
'🤗 🤔 🤭 🤫 🤥 😶 😐 😑 😬 🙄 😯 😦 😧 😮 😲 🥱 😴 🤤 😪 😵 '
|
||||
'🤐 🥴 🤢 🤮 🤧 😷 🤒 🤕 🤑 🤠 😈 👿 👹 👺 🤡 💩 👻 💀 ☠️ 👽 '
|
||||
'👾 🤖 🎃 😺 😸 😹 😻 😼 😽 🙀 😿 😾'
|
||||
'️ 😣 😖 😫 😩 🥺 😢 😭 😤 😠 😡 🤬 🤯 😳 🥵 🥶 😱 😨 😰 😥 😓 '
|
||||
'🤗 🤔 🤭 🤫 🤥 😶 😐 😑 😬 🙄 😯 😦 😧 😮 😲 🥱 😴 🤤 😪 😵 '
|
||||
'🤐 🥴 🤢 🤮 🤧 😷 🤒 🤕 🤑 🤠 😈 👿 👹 👺 🤡 💩 👻 💀 ☠️ 👽 '
|
||||
'👾 🤖 🎃 😺 😸 😹 😻 😼 😽 🙀 😿 😾'
|
||||
'👋 🤚 🖐 ✋ 🖖 👌 🤌 🤏 ✌️ 🤞 🤟 🤘 🤙 👈 👉 👆 🖕 👇 ☝️ 👍 👎'
|
||||
' ✊ 👊 🤛 🤜 👏 🙌 👐 🤲 🤝 🙏 ✍️ 💅 🤳 💪 🦾 🦵 🦿 🦶 👣 👂 '
|
||||
'🦻 👃 🫀 🫁 🧠 🦷 🦴 👀 👁 👅 👄 💋 🩸';
|
||||
|
||||
class TextFieldPage extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Material(
|
||||
child: Container(
|
||||
child: TextField(
|
||||
maxLines: null,
|
||||
controller: TextEditingController(text: textLotsOfText),
|
||||
key: const Key('fullscreen-textfield'),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
// 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/foundation.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:macrobenchmarks/common.dart';
|
||||
|
||||
import 'util.dart';
|
||||
|
||||
void main() {
|
||||
macroPerfTestE2E(
|
||||
'fullscreen_textfield_perf',
|
||||
kFullscreenTextRouteName,
|
||||
// The driver version doesn't have this delay because the delay caused
|
||||
// by the communication between the host and the test device is long enough
|
||||
// for the driver test, but there isn't such delay in this host independent
|
||||
// test.
|
||||
pageDelay: const Duration(milliseconds: 50),
|
||||
body: (WidgetController controller) async {
|
||||
final Finder textfield = find.byKey(const ValueKey<String>('fullscreen-textfield'));
|
||||
controller.tap(textfield);
|
||||
await Future<void>.delayed(const Duration(milliseconds: 5000));
|
||||
},
|
||||
);
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
// 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:macrobenchmarks/common.dart';
|
||||
|
||||
import 'util.dart';
|
||||
|
||||
void main() {
|
||||
macroPerfTest(
|
||||
'fullscreen_textfield_perf',
|
||||
kFullscreenTextRouteName,
|
||||
driverOps: (FlutterDriver driver) async {
|
||||
final SerializableFinder textfield = find.byValueKey('fullscreen-textfield');
|
||||
driver.tap(textfield);
|
||||
await Future<void>.delayed(const Duration(milliseconds: 5000));
|
||||
},
|
||||
);
|
||||
}
|
12
dev/devicelab/bin/tasks/fullscreen_textfield_perf.dart
Normal file
12
dev/devicelab/bin/tasks/fullscreen_textfield_perf.dart
Normal file
@ -0,0 +1,12 @@
|
||||
// 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/tasks/perf_tests.dart';
|
||||
import 'package:flutter_devicelab/framework/adb.dart';
|
||||
import 'package:flutter_devicelab/framework/framework.dart';
|
||||
|
||||
Future<void> main() async {
|
||||
deviceOperatingSystem = DeviceOperatingSystem.android;
|
||||
await task(createFullscreenTextfieldPerfTest());
|
||||
}
|
@ -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 'dart:async';
|
||||
|
||||
import 'package:flutter_devicelab/tasks/perf_tests.dart';
|
||||
import 'package:flutter_devicelab/framework/adb.dart';
|
||||
import 'package:flutter_devicelab/framework/framework.dart';
|
||||
|
||||
Future<void> main() async {
|
||||
deviceOperatingSystem = DeviceOperatingSystem.android;
|
||||
await task(createFullscreenTextfieldPerfE2ETest());
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
// 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/tasks/perf_tests.dart';
|
||||
import 'package:flutter_devicelab/framework/adb.dart';
|
||||
import 'package:flutter_devicelab/framework/framework.dart';
|
||||
|
||||
Future<void> main() async {
|
||||
deviceOperatingSystem = DeviceOperatingSystem.android;
|
||||
await task(createFullscreenTextfieldPerfTest());
|
||||
}
|
@ -281,6 +281,22 @@ TaskFunction createTextfieldPerfE2ETest() {
|
||||
).run;
|
||||
}
|
||||
|
||||
TaskFunction createFullscreenTextfieldPerfTest() {
|
||||
return PerfTest(
|
||||
'${flutterDirectory.path}/dev/benchmarks/macrobenchmarks',
|
||||
'test_driver/run_app.dart',
|
||||
'fullscreen_textfield_perf',
|
||||
testDriver: 'test_driver/fullscreen_textfield_perf_test.dart',
|
||||
).run;
|
||||
}
|
||||
|
||||
TaskFunction createFullscreenTextfieldPerfE2ETest() {
|
||||
return PerfTest.e2e(
|
||||
'${flutterDirectory.path}/dev/benchmarks/macrobenchmarks',
|
||||
'test/fullscreen_textfield_perf_e2e.dart',
|
||||
).run;
|
||||
}
|
||||
|
||||
TaskFunction createColorFilterAndFadePerfTest() {
|
||||
return PerfTest(
|
||||
'${flutterDirectory.path}/dev/benchmarks/macrobenchmarks',
|
||||
|
@ -157,6 +157,12 @@ tasks:
|
||||
stage: devicelab
|
||||
required_agent_capabilities: ["mac/android"]
|
||||
|
||||
fullscreen_textfield_perf__timeline_summary:
|
||||
description: >
|
||||
Measures the runtime performance of large textfields with complex paragraph on Android.
|
||||
stage: devicelab
|
||||
required_agent_capabilities: ["mac/android"]
|
||||
|
||||
color_filter_and_fade_perf__timeline_summary:
|
||||
description: >
|
||||
Measures the runtime performance of color filter with fade on Android.
|
||||
|
Loading…
Reference in New Issue
Block a user