anchor.diff:        await summary.writeSummaryToFile('transitions', pretty: true);
         final String histogramPath = path.join(testOutputsDirectory, 'transition_durations.timeline.json');
         await saveDurationsHistogram(timeline.json['traceEvents'], histogramPath);
  +
  +      // Execute the remaining tests.
  +      final Iterable<Demo> unprofiledDemos = demos.where((Demo demo) => !demo.profiled);
  +      await runDemos(unprofiledDemos, driver);
  +
       }, timeout: const Timeout(const Duration(minutes: 5)));
     });
   }
  
positive.code: import 'package:path/path.dart' as path;
  import 'package:test/test.dart';
  
  // Warning: this list must be kept in sync with the value of
  // kAllGalleryItems.map((GalleryItem item) => item.title).toList();
  final List<String> demoTitles = <String>[
    // Demos
    'Pesto',
    'Shrine',
    'Contact profile',
    'Animation',
    // Material Components
    'Bottom navigation',
    'Buttons',
    'Cards',
    'Chips',
    'Date and time pickers',
    'Dialog',
    'Drawer',
    'Expand/collapse list control',
    'Expansion panels',
    'Floating action button',
    'Grid',
    'Icons',
    'Leave-behind list items',
    'List',
    'Menus',
    'Modal bottom sheet',
    'Page selector',
    'Persistent bottom sheet',
    'Progress indicators',
    'Pull to refresh',
    'Scrollable tabs',
    'Selection controls',
    'Sliders',
    'Snackbar',
    'Tabs',
    'Text fields',
    'Tooltips',
    // Cupertino Components
    'Activity Indicator',
    'Buttons',
    'Dialogs',
    'Sliders',
    'Switches',
    // Style
    'Colors',
    'Typography'
  ];
  
  // Subset of [demoTitles] that needs frameSync turned off.
  final List<String> unsynchedDemoTitles = <String>[
    'Progress indicators',
    'Activity Indicator',
  ];
  
  final FileSystem _fs = const LocalFileSystem();
  
negative.code:   await file.writeAsString(const JsonEncoder.withIndent('  ').convert(durations));
  }
  
  /// Scrolls each demo menu item into view, launches it, then returns to the
  /// home screen twice.
  Future<Null> runDemos(Iterable<Demo> demos, FlutterDriver driver) async {
    for (Demo demo in demos) {
      print('Testing "${demo.title}" demo');
      final SerializableFinder menuItem = find.text(demo.title);
      await driver.scrollIntoView(menuItem, alignment: 0.5);
      await new Future<Null>.delayed(kWaitBetweenActions);
  
      for (int i = 0; i < 2; i += 1) {
        await driver.tap(menuItem); // Launch the demo
        await new Future<Null>.delayed(kWaitBetweenActions);
        if (demo.synchronized) {
          await driver.tap(find.byTooltip('Back'));
        } else {
          await driver.runUnsynchronized<Future<Null>>(() async {
            await new Future<Null>.delayed(kWaitBetweenActions);
            await driver.tap(find.byTooltip('Back'));
          });
        }
        await new Future<Null>.delayed(kWaitBetweenActions);
      }
      print('Success');
    }
  }
  
  void main() {
    group('flutter gallery transitions', () {
      FlutterDriver driver;
  