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
41 lines
1.4 KiB
Dart
41 lines
1.4 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.
|
|
|
|
import 'dart:ui';
|
|
|
|
import 'package:flutter_driver/driver_extension.dart';
|
|
import 'package:flutter/painting.dart' show DefaultShaderWarmUp, PaintingBinding;
|
|
import 'package:macrobenchmarks/main.dart' as app;
|
|
|
|
class CubicBezierShaderWarmUp extends DefaultShaderWarmUp {
|
|
@override
|
|
Future<void> warmUpOnCanvas(Canvas canvas) async {
|
|
await super.warmUpOnCanvas(canvas);
|
|
|
|
// Warm up the cubic shaders used by CubicBezierPage.
|
|
//
|
|
// This tests that our custom shader warm up is working properly.
|
|
// Without this custom shader warm up, the worst frame time is about 115ms.
|
|
// With this, the worst frame time is about 70ms. (Data collected on a Moto
|
|
// G4 based on Flutter version 704814c67a874077710524d30412337884bf0254.
|
|
final Path path = Path();
|
|
path.moveTo(20.0, 20.0);
|
|
// This cubic path is based on
|
|
// https://skia.org/user/api/SkPath_Reference#SkPath_cubicTo
|
|
path.cubicTo(300.0, 80.0, -140.0, 90.0, 220.0, 10.0);
|
|
final Paint paint = Paint();
|
|
paint.isAntiAlias = true;
|
|
paint.strokeWidth = 18.0;
|
|
paint.style = PaintingStyle.stroke;
|
|
paint.strokeCap = StrokeCap.round;
|
|
canvas.drawPath(path, paint);
|
|
}
|
|
}
|
|
|
|
void main() {
|
|
PaintingBinding.shaderWarmUp = CubicBezierShaderWarmUp();
|
|
enableFlutterDriverExtension();
|
|
app.main();
|
|
}
|