| // 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'; |
| import 'package:web_benchmarks/client.dart'; |
| |
| import 'gallery_automator.dart'; |
| |
| /// A recorder that measures frame building durations for the Gallery. |
| class GalleryRecorder extends WidgetRecorder { |
| GalleryRecorder({ |
| required this.benchmarkName, |
| this.shouldRunPredicate, |
| this.testScrollingOnly = false, |
| }) : assert(testScrollingOnly || shouldRunPredicate != null), |
| super(name: benchmarkName, useCustomWarmUp: true); |
| |
| /// The name of the gallery benchmark to be run. |
| /// |
| /// See `common.dart` for the list of the names of all benchmarks. |
| final String benchmarkName; |
| |
| /// A function that accepts the name of a demo and returns whether we should |
| /// run this demo in this benchmark. |
| /// |
| /// See `common.dart` for examples. |
| /// |
| /// The name of any demo has the format `<demo-name>@<demo-type>`, such as |
| /// `progress-indicator@material`. |
| /// A list of all demo names can be obtained using |
| /// [allGalleryDemoDescriptions]. |
| final bool Function(String)? shouldRunPredicate; |
| |
| /// Whether this benchmark only tests scrolling. |
| final bool testScrollingOnly; |
| |
| GalleryAutomator? _galleryAutomator; |
| bool get _finished => _galleryAutomator?.finished ?? false; |
| |
| /// Whether we should continue recording. |
| @override |
| bool shouldContinue() => !_finished || profile.shouldContinue(); |
| |
| /// Creates the [GalleryAutomator] widget. |
| @override |
| Widget createWidget() { |
| _galleryAutomator = GalleryAutomator( |
| benchmarkName: benchmarkName, |
| shouldRunPredicate: shouldRunPredicate, |
| testScrollsOnly: testScrollingOnly, |
| stopWarmingUpCallback: profile.stopWarmingUp, |
| ); |
| return _galleryAutomator!.createWidget(); |
| } |
| } |