main.dart 15.9 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_advanced_blend.dart';
9
import 'src/animated_blur_backdrop_filter.dart';
10
import 'src/animated_complex_image_filtered.dart';
11
import 'src/animated_complex_opacity.dart';
12
import 'src/animated_image.dart';
Dan Field's avatar
Dan Field committed
13
import 'src/animated_placeholder.dart';
14
import 'src/animation_with_microtasks.dart';
15
import 'src/backdrop_filter.dart';
16
import 'src/clipper_cache.dart';
17
import 'src/color_filter_and_fade.dart';
18
import 'src/color_filter_cache.dart';
19
import 'src/color_filter_with_unstable_child.dart';
20
import 'src/cubic_bezier.dart';
21
import 'src/cull_opacity.dart';
22
import 'src/draw_atlas.dart';
23
import 'src/draw_points.dart';
24
import 'src/draw_vertices.dart';
25
import 'src/filtered_child_animation.dart';
26
import 'src/fullscreen_textfield.dart';
27
import 'src/gradient_perf.dart';
28 29 30
import 'src/heavy_grid_view.dart';
import 'src/large_image_changer.dart';
import 'src/large_images.dart';
31
import 'src/list_text_layout.dart';
32
import 'src/multi_widget_construction.dart';
33
import 'src/opacity_peephole.dart';
34
import 'src/path_tessellation.dart';
35
import 'src/picture_cache.dart';
36
import 'src/picture_cache_complexity_scoring.dart';
37
import 'src/post_backdrop_filter.dart';
38
import 'src/raster_cache_use_memory.dart';
39
import 'src/shader_mask_cache.dart';
40
import 'src/simple_animation.dart';
41
import 'src/simple_scroll.dart';
42
import 'src/sliders.dart';
43
import 'src/stack_size.dart';
44
import 'src/text.dart';
45
import 'src/very_long_picture_scrolling.dart';
46

Dan Field's avatar
Dan Field committed
47
const String kMacrobenchmarks = 'Macrobenchmarks';
48

49
void main() => runApp(const MacrobenchmarksApp());
50 51

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

54 55 56 57
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: kMacrobenchmarks,
58
      initialRoute: initialRoute,
59
      routes: <String, WidgetBuilder>{
60 61 62 63 64 65 66
        '/': (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(),
67
        kPictureCacheComplexityScoringRouteName: (BuildContext context) => const PictureCacheComplexityScoringPage(),
68 69 70
        kLargeImageChangerRouteName: (BuildContext context) => const LargeImageChangerPage(),
        kLargeImagesRouteName: (BuildContext context) => const LargeImagesPage(),
        kTextRouteName: (BuildContext context) => const TextPage(),
71
        kPathTessellationRouteName: (BuildContext context) => const PathTessellationPage(),
72 73
        kFullscreenTextRouteName: (BuildContext context) => const TextFieldPage(),
        kAnimatedPlaceholderRouteName: (BuildContext context) => const AnimatedPlaceholderPage(),
74
        kClipperCacheRouteName: (BuildContext context) => const ClipperCachePage(),
75
        kColorFilterAndFadeRouteName: (BuildContext context) => const ColorFilterAndFadePage(),
76
        kColorFilterCacheRouteName: (BuildContext context) => const ColorFilterCachePage(),
77
        kColorFilterWithUnstableChildName: (BuildContext context) => const ColorFilterWithUnstableChildPage(),
78
        kFadingChildAnimationRouteName: (BuildContext context) => const FilteredChildAnimationPage(FilterType.opacity),
79
        kImageFilteredTransformAnimationRouteName: (BuildContext context) => const FilteredChildAnimationPage(FilterType.rotateFilter),
80
        kMultiWidgetConstructionRouteName: (BuildContext context) => const MultiWidgetConstructTable(10, 20),
81
        kHeavyGridViewRouteName: (BuildContext context) => const HeavyGridViewPage(),
82
        kRasterCacheUseMemory: (BuildContext context) => const RasterCacheUseMemory(),
83
        kShaderMaskCacheRouteName: (BuildContext context) => const ShaderMaskCachePage(),
84 85
        kSimpleScrollRouteName: (BuildContext context) => const SimpleScroll(),
        kStackSizeRouteName: (BuildContext context) => const StackSizePage(),
86
        kAnimationWithMicrotasksRouteName: (BuildContext context) => const AnimationWithMicrotasks(),
87
        kAnimatedImageRouteName: (BuildContext context) => const AnimatedImagePage(),
88 89
        kOpacityPeepholeRouteName: (BuildContext context) => const OpacityPeepholePage(),
        ...opacityPeepholeRoutes,
90 91
        kGradientPerfRouteName: (BuildContext context) => const GradientPerfHomePage(),
        ...gradientPerfRoutes,
92
        kAnimatedComplexOpacityPerfRouteName: (BuildContext context) => const AnimatedComplexOpacity(),
93
        kListTextLayoutRouteName: (BuildContext context) => const ColumnOfText(),
94
        kAnimatedComplexImageFilteredPerfRouteName: (BuildContext context) => const AnimatedComplexImageFiltered(),
95
        kAnimatedBlurBackdropFilter: (BuildContext context) => const AnimatedBlurBackdropFilter(),
96
        kSlidersRouteName: (BuildContext context) => const SlidersPage(),
97
        kDrawPointsPageRougeName: (BuildContext context) => const DrawPointsPage(),
98 99
        kDrawVerticesPageRouteName: (BuildContext context) => const DrawVerticesPage(),
        kDrawAtlasPageRouteName: (BuildContext context) => const DrawAtlasPage(),
100
        kAnimatedAdvancedBlend: (BuildContext context) => const AnimatedAdvancedBlend(),
101
        kVeryLongPictureScrollingRouteName: (BuildContext context) => const VeryLongPictureScrollingPerf(),
102 103 104
      },
    );
  }
105 106

  final String initialRoute;
107 108 109
}

class HomePage extends StatelessWidget {
110
  const HomePage({super.key});
111

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