From 71ad03fa34454185a4bbba8d93ebd82b85cb313a Mon Sep 17 00:00:00 2001 From: Devon Carew Date: Thu, 13 Feb 2025 13:53:57 -0800 Subject: [PATCH] [benchmarks] contribute a package:intl benchmark Change-Id: I9ce75ad7ba1599e4bd6311e0ae0397005d46fe86 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/409762 Commit-Queue: Devon Carew Reviewed-by: Stephen Adams --- benchmarks/Intl/dart/format.dart | 103 +++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 benchmarks/Intl/dart/format.dart diff --git a/benchmarks/Intl/dart/format.dart b/benchmarks/Intl/dart/format.dart new file mode 100644 index 00000000000..366fee139c6 --- /dev/null +++ b/benchmarks/Intl/dart/format.dart @@ -0,0 +1,103 @@ +// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +// Micro-benchmarks for formatting with Intl. + +import 'package:benchmark_harness/benchmark_harness.dart'; +import 'package:intl/intl.dart'; + +var DATES = List.generate( + 100, + (i) => DateTime.fromMillisecondsSinceEpoch(1417666640631 - i * 1649837618), +); + +const DATE_FORMATS = ['Hm', 'MMM yyyy', 'MMM dd, yyyy']; + +var NUMBERS = [ + 12.345, + 1.2345, + -12.345, + 20000000.1, + -200000001.2, + ...List.generate(90, (i) => (i - 45) * i * 0.716739 + 0.21), +]; + +const NUMBER_FORMATS = ['\$#,##0.0', '#%', '#,##0', '#.##%']; + +const LOCALE = 'en_US'; + +var g; + +class Base extends BenchmarkBase { + Base(name, variant) : super('Intl.$name.format.$variant'); + + var formatters; + var data; + + @override + void run() { + for (var datum in data) { + for (var formatter in formatters) { + g = formatter.format(datum); + } + } + + // TODO(devoncarew): Duplicated for golem investigation. + for (var datum in data) { + for (var formatter in formatters) { + g = formatter.format(datum); + } + } + // TODO(devoncarew): Duplicated for golem investigation. + } +} + +class DateBenchmark extends Base { + DateBenchmark() : super('DateFormat', 'oneshot'); + + @override + void setup() { + formatters = DATE_FORMATS.map((s) => DateFormat(s, LOCALE)); + data = DATES; + } +} + +class DateBenchmarkReused extends Base { + DateBenchmarkReused() : super('DateFormat', 'reused'); + + @override + void setup() { + formatters = DATE_FORMATS.map((s) => DateFormat(s, LOCALE)).toList(); + data = DATES; + } +} + +class NumberBenchmark extends Base { + NumberBenchmark() : super('NumberFormat', 'oneshot'); + + @override + void setup() { + formatters = NUMBER_FORMATS.map((s) => NumberFormat(s, LOCALE)); + data = NUMBERS; + } +} + +class NumberBenchmarkReused extends Base { + NumberBenchmarkReused() : super('NumberFormat', 'reused'); + + @override + void setup() { + formatters = NUMBER_FORMATS.map((s) => NumberFormat(s, LOCALE)).toList(); + data = NUMBERS; + } +} + +void main() { + DateBenchmark().report(); + DateBenchmarkReused().report(); + NumberBenchmark().report(); + NumberBenchmarkReused().report(); + + if (g is! String) throw 'Error'; +}