| // 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'; |
| |
| int _counter = 0; |
| |
| Paragraph _generateParagraph() { |
| final ParagraphBuilder builder = |
| ParagraphBuilder(ParagraphStyle(fontFamily: 'sans-serif')) |
| ..pushStyle(TextStyle(fontSize: 12.0)) |
| ..addText( |
| '$_counter Lorem ipsum dolor sit amet, consectetur adipiscing elit, ' |
| 'sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.', |
| ); |
| _counter++; |
| return builder.build(); |
| } |
| |
| /// Repeatedly lays out a paragraph using the DOM measurement approach. |
| /// |
| /// Creates a different paragraph each time in order to avoid hitting the cache. |
| class BenchTextDomLayout extends RawRecorder { |
| BenchTextDomLayout() : super(name: benchmarkName); |
| |
| static const String benchmarkName = 'text_dom_layout'; |
| |
| @override |
| void body(Profile profile) { |
| final Paragraph paragraph = _generateParagraph(); |
| profile.record('layout', () { |
| paragraph.layout(const ParagraphConstraints(width: double.infinity)); |
| }); |
| } |
| } |
| |
| /// Repeatedly lays out a paragraph using the DOM measurement approach. |
| /// |
| /// Uses the same paragraph content to make sure we hit the cache. It doesn't |
| /// use the same paragraph instance because the layout method will shortcircuit |
| /// in that case. |
| class BenchTextDomCachedLayout extends RawRecorder { |
| BenchTextDomCachedLayout() : super(name: benchmarkName); |
| |
| static const String benchmarkName = 'text_dom_cached_layout'; |
| |
| final ParagraphBuilder builder = |
| ParagraphBuilder(ParagraphStyle(fontFamily: 'sans-serif')) |
| ..pushStyle(TextStyle(fontSize: 12.0)) |
| ..addText( |
| 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, ' |
| 'sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.', |
| ); |
| |
| @override |
| void body(Profile profile) { |
| final Paragraph paragraph = builder.build(); |
| profile.record('layout', () { |
| paragraph.layout(const ParagraphConstraints(width: double.infinity)); |
| }); |
| } |
| } |