// 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. import 'dart:ui'; import 'recorder.dart'; /// Repeatedly paints a grid of rectangles. /// /// Measures the performance of the `drawRect` operation. class BenchDrawRect extends SceneBuilderRecorder { BenchDrawRect() : super(name: benchmarkName); static const String benchmarkName = 'draw_rect'; /// Number of rows in the grid. static const int kRows = 25; /// Number of columns in the grid. static const int kColumns = 40; /// Counter used to offset the rendered rects to make them wobble. /// /// The wobbling is there so a human could visually verify that the benchmark /// is correctly pumping frames. double wobbleCounter = 0; @override void onDrawFrame(SceneBuilder sceneBuilder) { final PictureRecorder pictureRecorder = PictureRecorder(); final Canvas canvas = Canvas(pictureRecorder); final Paint paint = Paint()..color = const Color.fromARGB(255, 255, 0, 0); final Size windowSize = window.physicalSize; final Size cellSize = Size( windowSize.width / kColumns, windowSize.height / kRows, ); final Size rectSize = cellSize * 0.8; for (int row = 0; row < kRows; row++) { canvas.save(); for (int col = 0; col < kColumns; col++) { canvas.drawRect( Offset((wobbleCounter - 5).abs(), 0) & rectSize, paint, ); canvas.translate(cellSize.width, 0); } canvas.restore(); canvas.translate(0, cellSize.height); } wobbleCounter += 1; wobbleCounter = wobbleCounter % 10; final Picture picture = pictureRecorder.endRecording(); sceneBuilder.pushOffset(0.0, 0.0); sceneBuilder.addPicture(Offset.zero, picture); sceneBuilder.pop(); } }