// 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<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 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<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 ====');
}
