| // 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/scheduler.dart'; |
| // See //dev/devicelab/bin/tasks/flutter_gallery__image_cache_memory.dart |
| |
| import 'package:flutter/widgets.dart'; |
| import 'package:flutter_test/flutter_test.dart'; |
| |
| // Once we provide an option for images to be resized to |
| // fit the container, we should see a significant drop in |
| // the amount of memory consumed by this benchmark. |
| Future<void> main() async { |
| const int numItems = 10; |
| |
| runApp(Directionality( |
| textDirection: TextDirection.ltr, |
| child: ListView.builder( |
| key: const Key('ImageList'), |
| itemCount: numItems, |
| itemBuilder: (BuildContext context, int position) { |
| return SizedBox( |
| width: 200, |
| height: 200, |
| child: Center( |
| child: Image.asset( |
| 'monochrome/red-square-1024x1024.png', |
| package: 'flutter_gallery_assets', |
| width: 100, |
| height: 100, |
| fit: BoxFit.contain, |
| key: Key('image_$position'), |
| ), |
| ), |
| ); |
| }, |
| ), |
| )); |
| |
| await SchedulerBinding.instance.endOfFrame; |
| |
| // We are waiting for the GPU to rasterize a frame here. This makes this |
| // flaky, we can rely on a more deterministic source such as |
| // PlatformDispatcher.onReportTimings once |
| // https://github.com/flutter/flutter/issues/26154 is addressed. |
| await Future<void>.delayed(const Duration(milliseconds: 50)); |
| debugPrint('==== MEMORY BENCHMARK ==== READY ===='); |
| |
| final WidgetController controller = |
| LiveWidgetController(WidgetsBinding.instance); |
| |
| debugPrint('Scrolling...'); |
| final Finder list = find.byKey(const Key('ImageList')); |
| final Finder lastItem = find.byKey(const Key('image_${numItems - 1}')); |
| do { |
| await controller.drag(list, const Offset(0.0, -30.0)); |
| await Future<void>.delayed(const Duration(milliseconds: 20)); |
| } while (!lastItem.precache()); |
| |
| debugPrint('==== MEMORY BENCHMARK ==== DONE ===='); |
| } |