migrate textfield_perf to e2e (#64503)

diff --git a/dev/benchmarks/macrobenchmarks/test/textfield_perf_e2e.dart b/dev/benchmarks/macrobenchmarks/test/textfield_perf_e2e.dart
new file mode 100644
index 0000000..e8e546a
--- /dev/null
+++ b/dev/benchmarks/macrobenchmarks/test/textfield_perf_e2e.dart
@@ -0,0 +1,27 @@
+// 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(
+    'textfield_perf',
+    kTextRouteName,
+    // 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>('basic-textfield'));
+      controller.tap(textfield);
+      // Caret should be cached, so repeated blinking should not require recompute.
+      await Future<void>.delayed(const Duration(milliseconds: 5000));
+    },
+  );
+}
diff --git a/dev/devicelab/bin/tasks/textfield_perf__e2e_summary.dart b/dev/devicelab/bin/tasks/textfield_perf__e2e_summary.dart
new file mode 100644
index 0000000..de6e3a4
--- /dev/null
+++ b/dev/devicelab/bin/tasks/textfield_perf__e2e_summary.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 '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(createTextfieldPerfE2ETest());
+}
diff --git a/dev/devicelab/lib/tasks/perf_tests.dart b/dev/devicelab/lib/tasks/perf_tests.dart
index 6b4231e..0484327 100644
--- a/dev/devicelab/lib/tasks/perf_tests.dart
+++ b/dev/devicelab/lib/tasks/perf_tests.dart
@@ -281,6 +281,13 @@
   ).run;
 }
 
+TaskFunction createTextfieldPerfE2ETest() {
+  return PerfTest.e2e(
+    '${flutterDirectory.path}/dev/benchmarks/macrobenchmarks',
+    'test/textfield_perf_e2e.dart',
+  ).run;
+}
+
 TaskFunction createColorFilterAndFadePerfTest() {
   return PerfTest(
     '${flutterDirectory.path}/dev/benchmarks/macrobenchmarks',
diff --git a/dev/devicelab/manifest.yaml b/dev/devicelab/manifest.yaml
index e1a0d4f..882b3db 100644
--- a/dev/devicelab/manifest.yaml
+++ b/dev/devicelab/manifest.yaml
@@ -263,6 +263,13 @@
     stage: devicelab
     required_agent_capabilities: ["mac/android"]
 
+  textfield_perf__e2e_summary:
+    description: >
+      Measures the runtime performance of textfield on Android.
+    stage: devicelab
+    required_agent_capabilities: ["linux/android"]
+    flaky: true
+
   color_filter_and_fade_perf__timeline_summary:
     description: >
       Measures the runtime performance of color filter with fade on Android.