diff --git a/dev/benchmarks/complex_layout/pubspec.yaml b/dev/benchmarks/complex_layout/pubspec.yaml index 3b0c7e4ecd..5cd007c01e 100644 --- a/dev/benchmarks/complex_layout/pubspec.yaml +++ b/dev/benchmarks/complex_layout/pubspec.yaml @@ -15,7 +15,7 @@ dependencies: # //packages/flutter_tools/lib/src/commands/update_packages.dart # and run # flutter update-packages --force-upgrade - flutter_gallery_assets: 0.1.8 + flutter_gallery_assets: 0.1.9+2 async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -82,4 +82,4 @@ flutter: - packages/flutter_gallery_assets/people/square/ali.png - packages/flutter_gallery_assets/places/india_chettinad_silk_maker.png -# PUBSPEC CHECKSUM: f69a +# PUBSPEC CHECKSUM: e4f8 diff --git a/dev/benchmarks/macrobenchmarks/pubspec.yaml b/dev/benchmarks/macrobenchmarks/pubspec.yaml index f7f56ec595..8118b4a207 100644 --- a/dev/benchmarks/macrobenchmarks/pubspec.yaml +++ b/dev/benchmarks/macrobenchmarks/pubspec.yaml @@ -15,7 +15,7 @@ dependencies: # //packages/flutter_tools/lib/src/commands/update_packages.dart # and run # flutter update-packages --force-upgrade - flutter_gallery_assets: 0.1.8 + flutter_gallery_assets: 0.1.9+2 async: 2.2.0 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -79,4 +79,4 @@ dev_dependencies: flutter: uses-material-design: true -# PUBSPEC CHECKSUM: f69a +# PUBSPEC CHECKSUM: e4f8 diff --git a/dev/devicelab/bin/tasks/flutter_gallery__image_cache_memory.dart b/dev/devicelab/bin/tasks/flutter_gallery__image_cache_memory.dart new file mode 100644 index 0000000000..c3bc7892ab --- /dev/null +++ b/dev/devicelab/bin/tasks/flutter_gallery__image_cache_memory.dart @@ -0,0 +1,17 @@ +// Copyright 2016 The Chromium 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 'dart:async'; + +import 'package:flutter_devicelab/framework/framework.dart'; +import 'package:flutter_devicelab/framework/utils.dart'; +import 'package:flutter_devicelab/tasks/perf_tests.dart'; + +Future main() async { + await task(MemoryTest( + '${flutterDirectory.path}/examples/flutter_gallery', + 'test_memory/image_cache_memory.dart', + 'io.flutter.demo.gallery', + ).run); +} diff --git a/dev/devicelab/manifest.yaml b/dev/devicelab/manifest.yaml index 9392670eac..02b57cefa1 100644 --- a/dev/devicelab/manifest.yaml +++ b/dev/devicelab/manifest.yaml @@ -527,6 +527,13 @@ tasks: stage: devicelab required_agent_capabilities: ["linux/android"] + flutter_gallery__image_cache_memory: + description: > + Measures memory usage for a list of large red squares in smaller containers. + stage: devicelab + required_agent_capabilities: ["linux/android"] + flaky: true + analyzer_benchmark: description: > Measures the speed of Dart analyzer. diff --git a/examples/flutter_gallery/pubspec.yaml b/examples/flutter_gallery/pubspec.yaml index c5aab9f244..3d9e13951c 100644 --- a/examples/flutter_gallery/pubspec.yaml +++ b/examples/flutter_gallery/pubspec.yaml @@ -19,7 +19,7 @@ dependencies: shrine_images: 1.1.2 # Also update dev/benchmarks/complex_layout/pubspec.yaml - flutter_gallery_assets: 0.1.8 + flutter_gallery_assets: 0.1.9+2 charcode: 1.1.2 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" meta: 1.1.6 # THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade" @@ -88,6 +88,7 @@ flutter: assets: - lib/gallery/example_code.dart - packages/flutter_gallery_assets/people/ali_landscape.png + - packages/flutter_gallery_assets/monochrome/red-square-1024x1024.png - packages/flutter_gallery_assets/logos/flutter_white/logo.png - packages/flutter_gallery_assets/logos/fortnightly/fortnightly_logo.png - packages/flutter_gallery_assets/videos/bee.mp4 @@ -253,4 +254,4 @@ flutter: - asset: packages/flutter_gallery_assets/fonts/merriweather/Merriweather-Regular.ttf - asset: packages/flutter_gallery_assets/fonts/merriweather/Merriweather-Light.ttf -# PUBSPEC CHECKSUM: 7863 +# PUBSPEC CHECKSUM: 35c1 diff --git a/examples/flutter_gallery/test_memory/image_cache_memory.dart b/examples/flutter_gallery/test_memory/image_cache_memory.dart new file mode 100644 index 0000000000..6632fd745a --- /dev/null +++ b/examples/flutter_gallery/test_memory/image_cache_memory.dart @@ -0,0 +1,63 @@ +// Copyright 2016 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// See //dev/devicelab/bin/tasks/flutter_gallery__image_cache_memory.dart + +import 'dart:async'; + +import 'package:flutter/widgets.dart'; +import 'package:flutter/scheduler.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 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 Container( + 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 such as `Window.onReportTimings` once + // https://github.com/flutter/flutter/issues/26154 is addressed. + await Future.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.delayed(const Duration(milliseconds: 20)); + } while (!lastItem.precache()); + + debugPrint('==== MEMORY BENCHMARK ==== DONE ===='); +} diff --git a/packages/flutter_tools/lib/src/commands/update_packages.dart b/packages/flutter_tools/lib/src/commands/update_packages.dart index 9c80937f1c..18fdebf06a 100644 --- a/packages/flutter_tools/lib/src/commands/update_packages.dart +++ b/packages/flutter_tools/lib/src/commands/update_packages.dart @@ -21,7 +21,7 @@ import '../runner/flutter_command.dart'; /// package version in cases when upgrading to the latest breaks Flutter. const Map _kManuallyPinnedDependencies = { // Add pinned packages here. - 'flutter_gallery_assets': '0.1.8', // See //examples/flutter_gallery/pubspec.yaml + 'flutter_gallery_assets': '0.1.9+2', // See //examples/flutter_gallery/pubspec.yaml 'build_daemon': '0.6.1', // Crashes at 1.0 'test': '1.6.3', // | Tests are timing out at 1.6.4 https://github.com/flutter/flutter/issues/33823 'test_api': '0.2.5', // | diff --git a/packages/flutter_tools/pubspec.yaml b/packages/flutter_tools/pubspec.yaml index a4cca93fbc..55753dbbb1 100644 --- a/packages/flutter_tools/pubspec.yaml +++ b/packages/flutter_tools/pubspec.yaml @@ -19,7 +19,7 @@ dependencies: http: 0.12.0+2 intl: 0.15.8 json_rpc_2: 2.1.0 - linter: 0.1.90 + linter: 0.1.91 meta: 1.1.6 multicast_dns: 0.1.1 mustache: 1.1.1 @@ -119,4 +119,4 @@ dartdoc: # Exclude this package from the hosted API docs. nodoc: true -# PUBSPEC CHECKSUM: ef94 +# PUBSPEC CHECKSUM: bf95