mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00

## Description This moves another 15-20ms from the animation jank of one of our important client to the startup latency. Unfortunately, this is probably not captured in our current benchmarks (presumably some other bottlenecks overshadow this shader compilation in the worst_frame benchmark). Considering that drawing images is such a common operation, maybe we should add one in the future to benchmark this. We need this PR to land soon for our client because this changes the API to return Future. ## Related Issues https://github.com/flutter/flutter/issues/813
34 lines
1.1 KiB
Dart
34 lines
1.1 KiB
Dart
// Copyright 2019 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.
|
|
|
|
// 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();
|
|
final 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().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();
|
|
}
|