// Copyright (c) 2020, 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. // // @dart=2.10 // // A benchmark that contains several other benchmarks. // // With no arguments, run all benchmarks once. // With arguments, run only the specified benchmarks in command-line order. // // -N: run benchmarks N times, defaults to once. // ignore_for_file: library_prefixes import '../../BigIntParsePrint/dart2/BigIntParsePrint.dart' deferred as lib_BigIntParsePrint; import '../../ListCopy/dart2/ListCopy.dart' deferred as lib_ListCopy; import '../../MapCopy/dart/MapCopy.dart' deferred as lib_MapCopy; import '../../MD5/dart2/md5.dart' deferred as lib_MD5; import '../../RuntimeType/dart2/RuntimeType.dart' deferred as lib_RuntimeType; import '../../SHA1/dart2/sha1.dart' deferred as lib_SHA1; import '../../SHA256/dart2/sha256.dart' deferred as lib_SHA256; import '../../SkeletalAnimation/dart2/SkeletalAnimation.dart' deferred as lib_SkeletalAnimation; import '../../SkeletalAnimationSIMD/dart2/SkeletalAnimationSIMD.dart' deferred as lib_SkeletalAnimationSIMD; import '../../TypedDataDuplicate/dart2/TypedDataDuplicate.dart' deferred as lib_TypedDataDuplicate; import '../../Utf8Decode/dart2/Utf8Decode.dart' deferred as lib_Utf8Decode; import '../../Utf8Encode/dart2/Utf8Encode.dart' deferred as lib_Utf8Encode; class Lib { final Future Function() load; final void Function() main; Lib(this.load, this.main); } final Map benchmarks = { 'BigIntParsePrint': Lib( lib_BigIntParsePrint.loadLibrary, () => lib_BigIntParsePrint.main(), ), 'ListCopy': Lib(lib_ListCopy.loadLibrary, () => lib_ListCopy.main()), 'MapCopy': Lib(lib_MapCopy.loadLibrary, () => lib_MapCopy.main([])), 'MD5': Lib(lib_MD5.loadLibrary, () => lib_MD5.main()), 'RuntimeType': Lib(lib_RuntimeType.loadLibrary, () => lib_RuntimeType.main()), 'SHA1': Lib(lib_SHA1.loadLibrary, () => lib_SHA1.main()), 'SHA256': Lib(lib_SHA256.loadLibrary, () => lib_SHA256.main()), 'SkeletalAnimation': Lib( lib_SkeletalAnimation.loadLibrary, () => lib_SkeletalAnimation.main(), ), 'SkeletalAnimationSIMD': Lib( lib_SkeletalAnimationSIMD.loadLibrary, () => lib_SkeletalAnimationSIMD.main(), ), 'TypedDataDuplicate': Lib( lib_TypedDataDuplicate.loadLibrary, () => lib_TypedDataDuplicate.main(), ), 'Utf8Decode': Lib(lib_Utf8Decode.loadLibrary, () => lib_Utf8Decode.main([])), 'Utf8Encode': Lib(lib_Utf8Encode.loadLibrary, () => lib_Utf8Encode.main([])), }; void main(List originalArguments) async { final List args = List.of(originalArguments); int repeats = 1; for (final arg in args.toList()) { final int count = int.tryParse(arg); if (count != null && count < 0) { repeats = 0 - count; args.remove(arg); } } final preload = args.remove('--preload'); List libs = []; for (final name in args.toList()) { final lib = benchmarks[name]; if (lib == null) { print("Unknown benchmark: '$name'"); } else { libs.add(lib); args.remove(name); } } if (args.isNotEmpty) return; // We will have printed an error. if (libs.isEmpty) libs = benchmarks.values.toList(); if (preload) { for (final lib in libs) { await lib.load(); } } for (var i = 0; i < repeats; i++) { for (final lib in libs) { if (!preload) await lib.load(); lib.main(); } } }