// 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.

// This example shows the draw operations to warm up the GPU shaders by default.

import 'dart:ui' as ui;

import 'package:flutter/material.dart';
import 'package:flutter/painting.dart' show DefaultShaderWarmUp;

Future<void> beginFrame(Duration timeStamp) async {
  // PAINT
  final ui.PictureRecorder recorder = ui.PictureRecorder();
  const ui.Rect paintBounds = ui.Rect.fromLTRB(0, 0, 1000, 1000);
  final ui.Canvas canvas = ui.Canvas(recorder, paintBounds);
  final ui.Paint backgroundPaint = ui.Paint()..color = Colors.white;
  canvas.drawRect(paintBounds, backgroundPaint);
  await const DefaultShaderWarmUp(
          drawCallSpacing: 80.0, canvasSize: ui.Size(1024, 1024))
      .warmUpOnCanvas(canvas);
  final ui.Picture picture = recorder.endRecording();

  // COMPOSITE
  final ui.SceneBuilder sceneBuilder = ui.SceneBuilder()
    ..pushClipRect(paintBounds)
    ..addPicture(ui.Offset.zero, picture)
    ..pop();
  ui.window.render(sceneBuilder.build());
}

Future<void> main() async {
  ui.window.onBeginFrame = beginFrame;
  ui.window.scheduleFrame();
}
