main.dart 14 KB
Newer Older
Ian Hickson's avatar
Ian Hickson committed
1
// Copyright 2014 The Flutter Authors. All rights reserved.
2 3 4
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

5 6 7
import 'package:flutter/material.dart';

import 'common.dart';
8
import 'src/animated_blur_backdrop_filter.dart';
9
import 'src/animated_complex_image_filtered.dart';
10
import 'src/animated_complex_opacity.dart';
11
import 'src/animated_image.dart';
Dan Field's avatar
Dan Field committed
12
import 'src/animated_placeholder.dart';
13
import 'src/animation_with_microtasks.dart';
14
import 'src/backdrop_filter.dart';
15
import 'src/clipper_cache.dart';
16
import 'src/color_filter_and_fade.dart';
17
import 'src/color_filter_cache.dart';
18
import 'src/color_filter_with_unstable_child.dart';
19
import 'src/cubic_bezier.dart';
20
import 'src/cull_opacity.dart';
21
import 'src/draw_points.dart';
22
import 'src/filtered_child_animation.dart';
23
import 'src/fullscreen_textfield.dart';
24
import 'src/gradient_perf.dart';
25 26 27
import 'src/heavy_grid_view.dart';
import 'src/large_image_changer.dart';
import 'src/large_images.dart';
28
import 'src/list_text_layout.dart';
29
import 'src/multi_widget_construction.dart';
30
import 'src/opacity_peephole.dart';
31
import 'src/picture_cache.dart';
32
import 'src/picture_cache_complexity_scoring.dart';
33
import 'src/post_backdrop_filter.dart';
34
import 'src/raster_cache_use_memory.dart';
35
import 'src/shader_mask_cache.dart';
36
import 'src/simple_animation.dart';
37
import 'src/simple_scroll.dart';
38
import 'src/sliders.dart';
39
import 'src/stack_size.dart';
40
import 'src/text.dart';
41

Dan Field's avatar
Dan Field committed
42
const String kMacrobenchmarks = 'Macrobenchmarks';
43

44
void main() => runApp(const MacrobenchmarksApp());
45 46

class MacrobenchmarksApp extends StatelessWidget {
47
  const MacrobenchmarksApp({super.key, this.initialRoute = '/'});
48

49 50 51 52
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: kMacrobenchmarks,
53
      initialRoute: initialRoute,
54
      routes: <String, WidgetBuilder>{
55 56 57 58 59 60 61
        '/': (BuildContext context) => const HomePage(),
        kCullOpacityRouteName: (BuildContext context) => const CullOpacityPage(),
        kCubicBezierRouteName: (BuildContext context) => const CubicBezierPage(),
        kBackdropFilterRouteName: (BuildContext context) => const BackdropFilterPage(),
        kPostBackdropFilterRouteName: (BuildContext context) => const PostBackdropFilterPage(),
        kSimpleAnimationRouteName: (BuildContext context) => const SimpleAnimationPage(),
        kPictureCacheRouteName: (BuildContext context) => const PictureCachePage(),
62
        kPictureCacheComplexityScoringRouteName: (BuildContext context) => const PictureCacheComplexityScoringPage(),
63 64 65 66 67
        kLargeImageChangerRouteName: (BuildContext context) => const LargeImageChangerPage(),
        kLargeImagesRouteName: (BuildContext context) => const LargeImagesPage(),
        kTextRouteName: (BuildContext context) => const TextPage(),
        kFullscreenTextRouteName: (BuildContext context) => const TextFieldPage(),
        kAnimatedPlaceholderRouteName: (BuildContext context) => const AnimatedPlaceholderPage(),
68
        kClipperCacheRouteName: (BuildContext context) => const ClipperCachePage(),
69
        kColorFilterAndFadeRouteName: (BuildContext context) => const ColorFilterAndFadePage(),
70
        kColorFilterCacheRouteName: (BuildContext context) => const ColorFilterCachePage(),
71
        kColorFilterWithUnstableChildName: (BuildContext context) => const ColorFilterWithUnstableChildPage(),
72
        kFadingChildAnimationRouteName: (BuildContext context) => const FilteredChildAnimationPage(FilterType.opacity),
73
        kImageFilteredTransformAnimationRouteName: (BuildContext context) => const FilteredChildAnimationPage(FilterType.rotateFilter),
74
        kMultiWidgetConstructionRouteName: (BuildContext context) => const MultiWidgetConstructTable(10, 20),
75
        kHeavyGridViewRouteName: (BuildContext context) => const HeavyGridViewPage(),
76
        kRasterCacheUseMemory: (BuildContext context) => const RasterCacheUseMemory(),
77
        kShaderMaskCacheRouteName: (BuildContext context) => const ShaderMaskCachePage(),
78 79
        kSimpleScrollRouteName: (BuildContext context) => const SimpleScroll(),
        kStackSizeRouteName: (BuildContext context) => const StackSizePage(),
80
        kAnimationWithMicrotasksRouteName: (BuildContext context) => const AnimationWithMicrotasks(),
81
        kAnimatedImageRouteName: (BuildContext context) => const AnimatedImagePage(),
82 83
        kOpacityPeepholeRouteName: (BuildContext context) => const OpacityPeepholePage(),
        ...opacityPeepholeRoutes,
84 85
        kGradientPerfRouteName: (BuildContext context) => const GradientPerfHomePage(),
        ...gradientPerfRoutes,
86
        kAnimatedComplexOpacityPerfRouteName: (BuildContext context) => const AnimatedComplexOpacity(),
87
        kListTextLayoutRouteName: (BuildContext context) => const ColumnOfText(),
88
        kAnimatedComplexImageFilteredPerfRouteName: (BuildContext context) => const AnimatedComplexImageFiltered(),
89
        kAnimatedBlurBackdropFilter: (BuildContext context) => const AnimatedBlurBackdropFilter(),
90
        kSlidersRouteName: (BuildContext context) => const SlidersPage(),
91
        kDrawPointsPageRougeName: (BuildContext context) => const DrawPointsPage(),
92 93 94
      },
    );
  }
95 96

  final String initialRoute;
97 98 99
}

class HomePage extends StatelessWidget {
100
  const HomePage({super.key});
101

102 103 104 105 106
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text(kMacrobenchmarks)),
      body: ListView(
107
        key: const Key(kScrollableName),
108
        children: <Widget>[
109
          ElevatedButton(
110 111
            key: const Key(kCullOpacityRouteName),
            child: const Text('Cull opacity'),
112
            onPressed: () {
113 114
              Navigator.pushNamed(context, kCullOpacityRouteName);
            },
115
          ),
116
          ElevatedButton(
117 118
            key: const Key(kCubicBezierRouteName),
            child: const Text('Cubic Bezier'),
119
            onPressed: () {
120 121
              Navigator.pushNamed(context, kCubicBezierRouteName);
            },
122
          ),
123
          ElevatedButton(
124 125
            key: const Key(kBackdropFilterRouteName),
            child: const Text('Backdrop Filter'),
126
            onPressed: () {
127 128 129
              Navigator.pushNamed(context, kBackdropFilterRouteName);
            },
          ),
130
          ElevatedButton(
131 132 133 134 135 136
            key: const Key(kPostBackdropFilterRouteName),
            child: const Text('Post Backdrop Filter'),
            onPressed: () {
              Navigator.pushNamed(context, kPostBackdropFilterRouteName);
            },
          ),
137
          ElevatedButton(
138 139 140 141 142 143
            key: const Key(kSimpleAnimationRouteName),
            child: const Text('Simple Animation'),
            onPressed: () {
              Navigator.pushNamed(context, kSimpleAnimationRouteName);
            },
          ),
144
          ElevatedButton(
145 146 147 148 149 150
            key: const Key(kPictureCacheRouteName),
            child: const Text('Picture Cache'),
            onPressed: () {
              Navigator.pushNamed(context, kPictureCacheRouteName);
            },
          ),
151 152 153 154 155 156 157
          ElevatedButton(
            key: const Key(kPictureCacheComplexityScoringRouteName),
            child: const Text('Picture Cache Complexity Scoring'),
            onPressed: () {
              Navigator.pushNamed(context, kPictureCacheComplexityScoringRouteName);
            },
          ),
158
          ElevatedButton(
159 160 161 162 163 164
            key: const Key(kLargeImagesRouteName),
            child: const Text('Large Images'),
            onPressed: () {
              Navigator.pushNamed(context, kLargeImagesRouteName);
            },
          ),
165
          ElevatedButton(
166 167 168 169 170 171
            key: const Key(kTextRouteName),
            child: const Text('Text'),
            onPressed: () {
              Navigator.pushNamed(context, kTextRouteName);
            },
          ),
172 173 174 175 176 177 178
          ElevatedButton(
            key: const Key(kFullscreenTextRouteName),
            child: const Text('Fullscreen Text'),
            onPressed: () {
              Navigator.pushNamed(context, kFullscreenTextRouteName);
            },
          ),
179
          ElevatedButton(
Dan Field's avatar
Dan Field committed
180 181 182 183 184 185
            key: const Key(kAnimatedPlaceholderRouteName),
            child: const Text('Animated Placeholder'),
            onPressed: () {
              Navigator.pushNamed(context, kAnimatedPlaceholderRouteName);
            },
          ),
186 187 188 189 190 191 192
          ElevatedButton(
            key: const Key(kClipperCacheRouteName),
            child: const Text('Clipper Cache'),
            onPressed: () {
              Navigator.pushNamed(context, kClipperCacheRouteName);
            },
          ),
193
          ElevatedButton(
194 195 196 197 198 199
            key: const Key(kColorFilterAndFadeRouteName),
            child: const Text('Color Filter and Fade'),
            onPressed: () {
              Navigator.pushNamed(context, kColorFilterAndFadeRouteName);
            },
          ),
200 201 202 203 204 205 206
          ElevatedButton(
            key: const Key(kColorFilterCacheRouteName),
            child: const Text('Color Filter Cache'),
            onPressed: () {
              Navigator.pushNamed(context, kColorFilterCacheRouteName);
            },
          ),
207 208
          ElevatedButton(
            key: const Key(kColorFilterWithUnstableChildName),
Lioness100's avatar
Lioness100 committed
209
            child: const Text('Color Filter with Unstable Child'),
210 211 212 213
            onPressed: () {
              Navigator.pushNamed(context, kColorFilterWithUnstableChildName);
            },
          ),
214 215 216 217 218 219 220
          ElevatedButton(
            key: const Key(kRasterCacheUseMemory),
            child: const Text('RasterCache Use Memory'),
            onPressed: () {
              Navigator.pushNamed(context, kRasterCacheUseMemory);
            },
          ),
221 222 223 224 225 226 227
          ElevatedButton(
            key: const Key(kShaderMaskCacheRouteName),
            child: const Text('Shader Mask Cache'),
            onPressed: () {
              Navigator.pushNamed(context, kShaderMaskCacheRouteName);
            },
          ),
228
          ElevatedButton(
229 230 231 232 233 234
            key: const Key(kFadingChildAnimationRouteName),
            child: const Text('Fading Child Animation'),
            onPressed: () {
              Navigator.pushNamed(context, kFadingChildAnimationRouteName);
            },
          ),
235
          ElevatedButton(
236 237 238 239 240 241
            key: const Key(kImageFilteredTransformAnimationRouteName),
            child: const Text('ImageFiltered Transform Animation'),
            onPressed: () {
              Navigator.pushNamed(context, kImageFilteredTransformAnimationRouteName);
            },
          ),
242
          ElevatedButton(
243 244
            key: const Key(kMultiWidgetConstructionRouteName),
            child: const Text('Widget Construction and Destruction'),
245
            onPressed: () {
246
              Navigator.pushNamed(context, kMultiWidgetConstructionRouteName);
247 248
            },
          ),
249
          ElevatedButton(
250 251 252 253 254 255
            key: const Key(kHeavyGridViewRouteName),
            child: const Text('Heavy Grid View'),
            onPressed: () {
              Navigator.pushNamed(context, kHeavyGridViewRouteName);
            },
          ),
256
          ElevatedButton(
257 258 259 260 261 262
            key: const Key(kLargeImageChangerRouteName),
            child: const Text('Large Image Changer'),
            onPressed: () {
              Navigator.pushNamed(context, kLargeImageChangerRouteName);
            },
          ),
263 264 265 266 267 268 269
          ElevatedButton(
            key: const Key(kStackSizeRouteName),
            child: const Text('Stack Size'),
            onPressed: () {
              Navigator.pushNamed(context, kStackSizeRouteName);
            },
          ),
270 271 272 273 274 275 276
          ElevatedButton(
            key: const Key(kAnimationWithMicrotasksRouteName),
            child: const Text('Animation With Microtasks'),
            onPressed: () {
              Navigator.pushNamed(context, kAnimationWithMicrotasksRouteName);
            },
          ),
277 278 279 280 281 282 283
          ElevatedButton(
            key: const Key(kAnimatedImageRouteName),
            child: const Text('Animated Image'),
            onPressed: () {
              Navigator.pushNamed(context, kAnimatedImageRouteName);
            },
          ),
284 285 286 287 288 289 290
          ElevatedButton(
            key: const Key(kOpacityPeepholeRouteName),
            child: const Text('Opacity Peephole tests'),
            onPressed: () {
              Navigator.pushNamed(context, kOpacityPeepholeRouteName);
            },
          ),
291 292 293 294 295 296 297
          ElevatedButton(
            key: const Key(kGradientPerfRouteName),
            child: const Text('Gradient performance tests'),
            onPressed: () {
              Navigator.pushNamed(context, kGradientPerfRouteName);
            },
          ),
298 299 300 301 302 303 304
          ElevatedButton(
            key: const Key(kAnimatedComplexOpacityPerfRouteName),
            child: const Text('Animated complex opacity perf'),
            onPressed: () {
              Navigator.pushNamed(context, kAnimatedComplexOpacityPerfRouteName);
            },
          ),
305 306 307 308 309 310 311
          ElevatedButton(
            key: const Key(kAnimatedComplexImageFilteredPerfRouteName),
            child: const Text('Animated complex image filtered perf'),
            onPressed: () {
              Navigator.pushNamed(context, kAnimatedComplexImageFilteredPerfRouteName);
            },
          ),
312 313 314 315 316 317 318
          ElevatedButton(
            key: const Key(kListTextLayoutRouteName),
            child: const Text('A list with lots of text'),
            onPressed: () {
              Navigator.pushNamed(context, kListTextLayoutRouteName);
            },
          ),
319 320 321 322 323 324 325
          ElevatedButton(
            key: const Key(kAnimatedBlurBackdropFilter),
            child: const Text('An animating backdrop filter'),
            onPressed: () {
              Navigator.pushNamed(context, kAnimatedBlurBackdropFilter);
            },
          ),
326 327 328 329 330 331 332
          ElevatedButton(
            key: const Key(kSlidersRouteName),
            child: const Text('Sliders'),
            onPressed: () {
              Navigator.pushNamed(context, kSlidersRouteName);
            },
          ),
333 334 335 336 337 338 339
          ElevatedButton(
            key: const Key(kDrawPointsPageRougeName),
            child: const Text('Draw Points'),
            onPressed: () {
              Navigator.pushNamed(context, kDrawPointsPageRougeName);
            },
          )
340 341 342 343 344
        ],
      ),
    );
  }
}