Add benchmark case for RasterCache (#103338)
diff --git a/.ci.yaml b/.ci.yaml
index 8c23a46..6aefb61 100644
--- a/.ci.yaml
+++ b/.ci.yaml
@@ -1396,6 +1396,17 @@
task_name: color_filter_cache_perf__e2e_summary
scheduler: luci
+ - name: Linux_android raster_cache_use_memory_perf__e2e_summary
+ recipe: devicelab/devicelab_drone
+ presubmit: false
+ bringup: true
+ timeout: 60
+ properties:
+ tags: >
+ ["devicelab","android","linux"]
+ task_name: raster_cache_use_memory_perf__e2e_summary
+ scheduler: luci
+
- name: Linux_android shader_mask_cache_perf__e2e_summary
recipe: devicelab/devicelab_drone
presubmit: false
diff --git a/TESTOWNERS b/TESTOWNERS
index 138354d..0eea918 100644
--- a/TESTOWNERS
+++ b/TESTOWNERS
@@ -70,6 +70,7 @@
/dev/devicelab/bin/tasks/platform_views_scroll_perf__timeline_summary.dart @zanderso @flutter/engine
/dev/devicelab/bin/tasks/plugin_dependencies_test.dart @jmagman @flutter/tool
/dev/devicelab/bin/tasks/routing_test.dart @zanderso @flutter/tool
+/dev/devicelab/bin/tasks/raster_cache_use_memory_perf__e2e_summary.dart @flar @flutter/engine
/dev/devicelab/bin/tasks/textfield_perf__e2e_summary.dart @zanderso @flutter/engine
/dev/devicelab/bin/tasks/web_size__compile_test.dart @yjbanov @flutter/web
/dev/devicelab/bin/tasks/opacity_peephole_col_of_rows_perf__e2e_summary.dart @flar @flutter/engine
diff --git a/dev/benchmarks/macrobenchmarks/lib/common.dart b/dev/benchmarks/macrobenchmarks/lib/common.dart
index fe340ce..3937824 100644
--- a/dev/benchmarks/macrobenchmarks/lib/common.dart
+++ b/dev/benchmarks/macrobenchmarks/lib/common.dart
@@ -21,6 +21,7 @@
const String kImageFilteredTransformAnimationRouteName = '/imagefiltered_transform_animation';
const String kMultiWidgetConstructionRouteName = '/multi_widget_construction';
const String kHeavyGridViewRouteName = '/heavy_gridview';
+const String kRasterCacheUseMemory = '/raster_cache_use_memory';
const String kShaderMaskCacheRouteName = '/shader_mask_cache';
const String kSimpleScrollRouteName = '/simple_scroll';
const String kStackSizeRouteName = '/stack_size';
diff --git a/dev/benchmarks/macrobenchmarks/lib/main.dart b/dev/benchmarks/macrobenchmarks/lib/main.dart
index 356fbd5..b04ebc7 100644
--- a/dev/benchmarks/macrobenchmarks/lib/main.dart
+++ b/dev/benchmarks/macrobenchmarks/lib/main.dart
@@ -28,6 +28,7 @@
import 'src/picture_cache.dart';
import 'src/picture_cache_complexity_scoring.dart';
import 'src/post_backdrop_filter.dart';
+import 'src/raster_cache_use_memory.dart';
import 'src/shader_mask_cache.dart';
import 'src/simple_animation.dart';
import 'src/simple_scroll.dart';
@@ -67,6 +68,7 @@
kImageFilteredTransformAnimationRouteName: (BuildContext context) => const FilteredChildAnimationPage(FilterType.rotateFilter),
kMultiWidgetConstructionRouteName: (BuildContext context) => const MultiWidgetConstructTable(10, 20),
kHeavyGridViewRouteName: (BuildContext context) => const HeavyGridViewPage(),
+ kRasterCacheUseMemory: (BuildContext context) => const RasterCacheUseMemory(),
kShaderMaskCacheRouteName: (BuildContext context) => const ShaderMaskCachePage(),
kSimpleScrollRouteName: (BuildContext context) => const SimpleScroll(),
kStackSizeRouteName: (BuildContext context) => const StackSizePage(),
@@ -194,6 +196,13 @@
},
),
ElevatedButton(
+ key: const Key(kRasterCacheUseMemory),
+ child: const Text('RasterCache Use Memory'),
+ onPressed: () {
+ Navigator.pushNamed(context, kRasterCacheUseMemory);
+ },
+ ),
+ ElevatedButton(
key: const Key(kShaderMaskCacheRouteName),
child: const Text('Shader Mask Cache'),
onPressed: () {
diff --git a/dev/benchmarks/macrobenchmarks/lib/src/raster_cache_use_memory.dart b/dev/benchmarks/macrobenchmarks/lib/src/raster_cache_use_memory.dart
new file mode 100644
index 0000000..58e666c
--- /dev/null
+++ b/dev/benchmarks/macrobenchmarks/lib/src/raster_cache_use_memory.dart
@@ -0,0 +1,129 @@
+// 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 'dart:ui';
+import 'package:flutter/material.dart';
+
+class RasterCacheUseMemory extends StatefulWidget {
+ const RasterCacheUseMemory({super.key});
+
+ @override
+ State<RasterCacheUseMemory> createState() => _RasterCacheUseMemoryState();
+}
+
+class _RasterCacheUseMemoryState extends State<RasterCacheUseMemory>
+ with TickerProviderStateMixin {
+ final ScrollController _controller = ScrollController();
+
+ @override
+ void initState() {
+ super.initState();
+ _controller.addListener(() {
+ if (_controller.offset < 5) {
+ _controller.animateTo(20,
+ duration: const Duration(milliseconds: 1000), curve: Curves.ease);
+ } else if (_controller.offset >= 19) {
+ _controller.animateTo(0,
+ duration: const Duration(milliseconds: 1000), curve: Curves.ease);
+ }
+ });
+ Timer(const Duration(milliseconds: 1000), () {
+ _controller.animateTo(150,
+ duration: const Duration(milliseconds: 1000), curve: Curves.ease);
+ });
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ return Scaffold(
+ backgroundColor: Colors.lightBlue,
+ body: ListView(
+ controller: _controller,
+ children: <Widget>[
+ RepaintBoundary(
+ child: ImageFiltered(
+ imageFilter: ImageFilter.blur(
+ sigmaX: 4,
+ sigmaY: 4,
+ ),
+ child: RepaintBoundary(
+ child: Container(
+ width: 50,
+ height: 50,
+ color: Colors.red,
+ ),
+ ),
+ ),
+ ),
+ ShaderMask(
+ shaderCallback: (Rect bounds) {
+ return const RadialGradient(
+ center: Alignment.topLeft,
+ radius: 1.0,
+ colors: <Color>[Colors.yellow, Colors.deepOrange],
+ tileMode: TileMode.mirror,
+ ).createShader(bounds);
+ },
+ blendMode: BlendMode.srcATop,
+ child: Opacity(
+ opacity: 0.5,
+ child: Column(
+ children: <Widget>[
+ ImageFiltered(
+ imageFilter: ImageFilter.blur(
+ sigmaX: 4,
+ sigmaY: 4,
+ ),
+ child: Row(
+ children: <Widget>[
+ ImageFiltered(
+ imageFilter: ImageFilter.blur(
+ sigmaX: 4,
+ sigmaY: 4,
+ ),
+ child: RepaintBoundary(
+ child: Container(
+ margin: const EdgeInsets.fromLTRB(10, 5, 10, 5),
+ decoration: BoxDecoration(
+ color: Colors.white70,
+ boxShadow: const <BoxShadow>[
+ BoxShadow(
+ blurRadius: 5.0,
+ ),
+ ],
+ borderRadius: BorderRadius.circular(5.0),
+ ),
+ child: const FlutterLogo(
+ size: 50,
+ ),
+ ),
+ ),
+ )
+ ],
+ ),
+ )
+ ],
+ ),
+ ),
+ ),
+ const RepaintBoundary(
+ child: FlutterLogo(
+ size: 50,
+ ),
+ ),
+ Container(
+ height: 800,
+ ),
+ ],
+ ),
+ );
+ }
+
+ @override
+ void dispose() {
+ _controller.dispose();
+ super.dispose();
+ }
+}
diff --git a/dev/benchmarks/macrobenchmarks/test/raster_cache_use_memory_perf_e2e.dart b/dev/benchmarks/macrobenchmarks/test/raster_cache_use_memory_perf_e2e.dart
new file mode 100644
index 0000000..66de397
--- /dev/null
+++ b/dev/benchmarks/macrobenchmarks/test/raster_cache_use_memory_perf_e2e.dart
@@ -0,0 +1,16 @@
+// 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:macrobenchmarks/common.dart';
+
+import 'util.dart';
+
+void main() {
+ macroPerfTestE2E(
+ 'raster_cache_use_memory_perf',
+ kRasterCacheUseMemory,
+ pageDelay: const Duration(seconds: 1),
+ duration: const Duration(seconds: 10),
+ );
+}
diff --git a/dev/devicelab/bin/tasks/raster_cache_use_memory_perf__e2e_summary.dart b/dev/devicelab/bin/tasks/raster_cache_use_memory_perf__e2e_summary.dart
new file mode 100644
index 0000000..491fecb
--- /dev/null
+++ b/dev/devicelab/bin/tasks/raster_cache_use_memory_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/framework/devices.dart';
+import 'package:flutter_devicelab/framework/framework.dart';
+import 'package:flutter_devicelab/tasks/perf_tests.dart';
+
+Future<void> main() async {
+ deviceOperatingSystem = DeviceOperatingSystem.android;
+ await task(createRasterCacheUseMemoryPerfE2ETest());
+}
diff --git a/dev/devicelab/lib/tasks/perf_tests.dart b/dev/devicelab/lib/tasks/perf_tests.dart
index 263c1fa..609ed48 100644
--- a/dev/devicelab/lib/tasks/perf_tests.dart
+++ b/dev/devicelab/lib/tasks/perf_tests.dart
@@ -384,6 +384,13 @@
).run;
}
+TaskFunction createRasterCacheUseMemoryPerfE2ETest() {
+ return PerfTest.e2e(
+ '${flutterDirectory.path}/dev/benchmarks/macrobenchmarks',
+ 'test/raster_cache_use_memory_perf_e2e.dart',
+ ).run;
+}
+
TaskFunction createShaderMaskCachePerfE2ETest() {
return PerfTest.e2e(
'${flutterDirectory.path}/dev/benchmarks/macrobenchmarks',