| // 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:math' as math; |
| import 'dart:ui'; |
| |
| import 'package:meta/meta.dart'; |
| |
| // Used to randomize data. |
| // |
| // Using constant seed for reproducibility. |
| final math.Random _random = math.Random(0); |
| |
| /// Random words used by benchmarks that contain text. |
| final List<String> lipsum = 'Lorem ipsum dolor sit amet, consectetur adipiscing ' |
| 'elit. Vivamus ut ligula a neque mattis posuere. Sed suscipit lobortis ' |
| 'sodales. Morbi sed neque molestie, hendrerit odio ac, aliquam velit. ' |
| 'Curabitur non quam sit amet nibh sollicitudin ultrices. Fusce ' |
| 'ullamcorper bibendum commodo. In et feugiat nisl. Aenean vulputate in ' |
| 'odio vestibulum ultricies. Nunc dolor libero, hendrerit eu urna sit ' |
| 'amet, pretium iaculis nulla. Ut porttitor nisl et leo iaculis, vel ' |
| 'fringilla odio pulvinar. Ut eget ligula id odio auctor egestas nec a ' |
| 'nisl. Aliquam luctus dolor et magna posuere mattis. ' |
| 'Suspendisse fringilla nisl et massa congue, eget ' |
| 'imperdiet lectus porta. Vestibulum sed dui sed dui porta imperdiet ut in risus. ' |
| 'Fusce diam purus, faucibus id accumsan sit amet, semper a sem. Sed aliquam ' |
| 'lacus eget libero ultricies, quis hendrerit tortor posuere. Pellentesque ' |
| 'sagittis eu est in maximus. Proin auctor fringilla dolor in hendrerit. Nam ' |
| 'pulvinar rhoncus tellus. Nullam vel mauris semper, volutpat tellus at, sagittis ' |
| 'lectus. Donec vitae nibh mauris. Morbi posuere sem id eros tristique tempus. ' |
| 'Vivamus lacinia sapien neque, eu semper purus gravida ut.'.split(' '); |
| |
| /// Generates strings and builds pre-laid out paragraphs to be used by |
| /// benchmarks. |
| List<Paragraph> generateLaidOutParagraphs({ |
| @required int paragraphCount, |
| @required int minWordCountPerParagraph, |
| @required int maxWordCountPerParagraph, |
| @required double widthConstraint, |
| @required Color color, |
| }) { |
| final List<Paragraph> strings = <Paragraph>[]; |
| int wordPointer = 0; // points to the next word in lipsum to extract |
| for (int i = 0; i < paragraphCount; i++) { |
| final int wordCount = minWordCountPerParagraph + |
| _random.nextInt(maxWordCountPerParagraph - minWordCountPerParagraph + 1); |
| final List<String> string = <String>[]; |
| for (int j = 0; j < wordCount; j++) { |
| string.add(lipsum[wordPointer]); |
| wordPointer = (wordPointer + 1) % lipsum.length; |
| } |
| |
| final ParagraphBuilder builder = |
| ParagraphBuilder(ParagraphStyle(fontFamily: 'sans-serif')) |
| ..pushStyle(TextStyle(color: color, fontSize: 18.0)) |
| ..addText(string.join(' ')) |
| ..pop(); |
| final Paragraph paragraph = builder.build(); |
| |
| // Fill half the screen. |
| paragraph.layout(ParagraphConstraints(width: widthConstraint)); |
| strings.add(paragraph); |
| } |
| return strings; |
| } |