mirror of
https://github.com/dart-lang/sdk
synced 2024-10-04 18:36:29 +00:00
[benchmarks] Adding benchmarks for dynamic closure calls.
Bug: https://github.com/dart-lang/sdk/issues/40813 Change-Id: Ifdb7dfef4fc581c14cb570a534a64d73f5be9449 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/160726 Commit-Queue: Tess Strickland <sstrickl@google.com> Reviewed-by: Jonas Termansen <sortie@google.com>
This commit is contained in:
parent
5f3298eeac
commit
b02925a13f
513
benchmarks/Dynamic/dart/Dynamic.dart
Normal file
513
benchmarks/Dynamic/dart/Dynamic.dart
Normal file
|
@ -0,0 +1,513 @@
|
|||
// 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.
|
||||
//
|
||||
// This benchmark suite measures the overhead of dynamically calling functions
|
||||
// and closures by calling a set of functions and closures, testing non-dynamic
|
||||
// calls, calls after casting the function tearoff or closure to dynamic, and
|
||||
// similarly defined functions and closures except that the parameters and
|
||||
// return types are all dynamic.
|
||||
|
||||
import 'package:benchmark_harness/benchmark_harness.dart';
|
||||
|
||||
const int kRepeat = 100;
|
||||
|
||||
void main() {
|
||||
const NonDynamicFunction().report();
|
||||
const NonDynamicFunctionOptSkipped().report();
|
||||
const NonDynamicFunctionOptProvided().report();
|
||||
const NonDynamicFunctionNamedSkipped().report();
|
||||
const NonDynamicFunctionNamedProvided().report();
|
||||
const NonDynamicClosure().report();
|
||||
const NonDynamicClosureOptSkipped().report();
|
||||
const NonDynamicClosureOptProvided().report();
|
||||
const NonDynamicClosureNamedSkipped().report();
|
||||
const NonDynamicClosureNamedProvided().report();
|
||||
const DynamicCastFunction().report();
|
||||
const DynamicCastFunctionOptSkipped().report();
|
||||
const DynamicCastFunctionOptProvided().report();
|
||||
const DynamicCastFunctionNamedSkipped().report();
|
||||
const DynamicCastFunctionNamedProvided().report();
|
||||
const DynamicCastClosure().report();
|
||||
const DynamicCastClosureOptSkipped().report();
|
||||
const DynamicCastClosureOptProvided().report();
|
||||
const DynamicCastClosureNamedSkipped().report();
|
||||
const DynamicCastClosureNamedProvided().report();
|
||||
const DynamicDefFunction().report();
|
||||
const DynamicDefFunctionOptSkipped().report();
|
||||
const DynamicDefFunctionOptProvided().report();
|
||||
const DynamicDefFunctionNamedSkipped().report();
|
||||
const DynamicDefFunctionNamedProvided().report();
|
||||
const DynamicDefClosure().report();
|
||||
const DynamicDefClosureOptSkipped().report();
|
||||
const DynamicDefClosureOptProvided().report();
|
||||
const DynamicDefClosureNamedSkipped().report();
|
||||
const DynamicDefClosureNamedProvided().report();
|
||||
const DynamicClassASingleton().report();
|
||||
const DynamicClassBSingleton().report();
|
||||
const DynamicClassCFresh().report();
|
||||
const DynamicClassDFresh().report();
|
||||
}
|
||||
|
||||
@pragma('vm:never-inline')
|
||||
void f1(String s) {}
|
||||
@pragma('vm:never-inline')
|
||||
Function(String) c1 = (String s) => {};
|
||||
@pragma('vm:never-inline')
|
||||
void f2(String s, [String t = 'default']) {}
|
||||
@pragma('vm:never-inline')
|
||||
Function(String, [String]) c2 = (String s, [String t = 'default']) => {};
|
||||
@pragma('vm:never-inline')
|
||||
void f3(String s, {String t = 'default'}) {}
|
||||
@pragma('vm:never-inline')
|
||||
Function(String, {String t}) c3 = (String s, {String t = 'default'}) => {};
|
||||
@pragma('vm:never-inline')
|
||||
dynamic df1 = f1 as dynamic;
|
||||
@pragma('vm:never-inline')
|
||||
dynamic dc1 = c1 as dynamic;
|
||||
@pragma('vm:never-inline')
|
||||
dynamic df2 = f2 as dynamic;
|
||||
@pragma('vm:never-inline')
|
||||
dynamic dc2 = c2 as dynamic;
|
||||
@pragma('vm:never-inline')
|
||||
dynamic df3 = f3 as dynamic;
|
||||
@pragma('vm:never-inline')
|
||||
dynamic dc3 = c3 as dynamic;
|
||||
@pragma('vm:never-inline')
|
||||
dynamic df1NonCast(dynamic s) {}
|
||||
@pragma('vm:never-inline')
|
||||
Function dc1NonCast = (dynamic s) => {};
|
||||
@pragma('vm:never-inline')
|
||||
dynamic df2NonCast(dynamic s, [dynamic t = 'default']) {}
|
||||
@pragma('vm:never-inline')
|
||||
Function dc2NonCast = (dynamic s, [dynamic t = 'default']) => {};
|
||||
@pragma('vm:never-inline')
|
||||
dynamic df3NonCast(dynamic s, {dynamic t = 'default'}) {}
|
||||
@pragma('vm:never-inline')
|
||||
Function dc3NonCast = (dynamic s, {dynamic t = 'default'}) => {};
|
||||
|
||||
class A {
|
||||
const A();
|
||||
}
|
||||
|
||||
class B extends A {
|
||||
const B();
|
||||
}
|
||||
|
||||
@pragma('vm:never-inline')
|
||||
dynamic k = (A a) {};
|
||||
|
||||
class C {
|
||||
C();
|
||||
}
|
||||
|
||||
class D extends C {
|
||||
D();
|
||||
}
|
||||
|
||||
@pragma('vm:never-inline')
|
||||
dynamic j = (C c) {};
|
||||
|
||||
class NonDynamicFunction extends BenchmarkBase {
|
||||
const NonDynamicFunction() : super('Dynamic.NonDynamicFunction');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
f1('');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class NonDynamicClosure extends BenchmarkBase {
|
||||
const NonDynamicClosure() : super('Dynamic.NonDynamicClosure');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
c1('');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class NonDynamicFunctionOptSkipped extends BenchmarkBase {
|
||||
const NonDynamicFunctionOptSkipped()
|
||||
: super('Dynamic.NonDynamicFunctionOptSkipped');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
f2('');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class NonDynamicFunctionOptProvided extends BenchmarkBase {
|
||||
const NonDynamicFunctionOptProvided()
|
||||
: super('Dynamic.NonDynamicFunctionOptProvided');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
f2('', '');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class NonDynamicFunctionNamedSkipped extends BenchmarkBase {
|
||||
const NonDynamicFunctionNamedSkipped()
|
||||
: super('Dynamic.NonDynamicFunctionNamedSkipped');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
f3('');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class NonDynamicFunctionNamedProvided extends BenchmarkBase {
|
||||
const NonDynamicFunctionNamedProvided()
|
||||
: super('Dynamic.NonDynamicFunctionNamedProvided');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
f3('', t: '');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class NonDynamicClosureOptSkipped extends BenchmarkBase {
|
||||
const NonDynamicClosureOptSkipped()
|
||||
: super('Dynamic.NonDynamicClosureOptSkipped');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
c2('');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class NonDynamicClosureOptProvided extends BenchmarkBase {
|
||||
const NonDynamicClosureOptProvided()
|
||||
: super('Dynamic.NonDynamicClosureOptProvided');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
c2('', '');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class NonDynamicClosureNamedSkipped extends BenchmarkBase {
|
||||
const NonDynamicClosureNamedSkipped()
|
||||
: super('Dynamic.NonDynamicClosureNamedSkipped');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
c3('');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class NonDynamicClosureNamedProvided extends BenchmarkBase {
|
||||
const NonDynamicClosureNamedProvided()
|
||||
: super('Dynamic.NonDynamicClosureNamedProvided');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
c3('', t: '');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DynamicCastFunction extends BenchmarkBase {
|
||||
const DynamicCastFunction() : super('Dynamic.DynamicCastFunction');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
df1('');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DynamicCastClosure extends BenchmarkBase {
|
||||
const DynamicCastClosure() : super('Dynamic.DynamicCastClosure');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
dc1('');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DynamicCastFunctionOptSkipped extends BenchmarkBase {
|
||||
const DynamicCastFunctionOptSkipped()
|
||||
: super('Dynamic.DynamicCastFunctionOptSkipped');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
df2('');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DynamicCastFunctionOptProvided extends BenchmarkBase {
|
||||
const DynamicCastFunctionOptProvided()
|
||||
: super('Dynamic.DynamicCastFunctionOptProvided');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
df2('', '');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DynamicCastFunctionNamedSkipped extends BenchmarkBase {
|
||||
const DynamicCastFunctionNamedSkipped()
|
||||
: super('Dynamic.DynamicCastFunctionNamedSkipped');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
df3('');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DynamicCastFunctionNamedProvided extends BenchmarkBase {
|
||||
const DynamicCastFunctionNamedProvided()
|
||||
: super('Dynamic.DynamicCastFunctionNamedProvided');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
df3('', t: '');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DynamicCastClosureOptSkipped extends BenchmarkBase {
|
||||
const DynamicCastClosureOptSkipped()
|
||||
: super('Dynamic.DynamicCastClosureOptSkipped');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
dc2('');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DynamicCastClosureOptProvided extends BenchmarkBase {
|
||||
const DynamicCastClosureOptProvided()
|
||||
: super('Dynamic.DynamicCastClosureOptProvided');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
dc2('', '');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DynamicCastClosureNamedSkipped extends BenchmarkBase {
|
||||
const DynamicCastClosureNamedSkipped()
|
||||
: super('Dynamic.DynamicCastClosureNamedSkipped');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
dc3('');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DynamicCastClosureNamedProvided extends BenchmarkBase {
|
||||
const DynamicCastClosureNamedProvided()
|
||||
: super('Dynamic.DynamicCastClosureNamedProvided');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
dc3('', t: '');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DynamicDefFunction extends BenchmarkBase {
|
||||
const DynamicDefFunction() : super('Dynamic.DynamicDefFunction');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
df1NonCast('');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DynamicDefClosure extends BenchmarkBase {
|
||||
const DynamicDefClosure() : super('Dynamic.DynamicDefClosure');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
dc1NonCast('');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DynamicDefFunctionOptSkipped extends BenchmarkBase {
|
||||
const DynamicDefFunctionOptSkipped()
|
||||
: super('Dynamic.DynamicDefFunctionOptSkipped');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
df2NonCast('');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DynamicDefFunctionOptProvided extends BenchmarkBase {
|
||||
const DynamicDefFunctionOptProvided()
|
||||
: super('Dynamic.DynamicDefFunctionOptProvided');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
df2NonCast('', '');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DynamicDefFunctionNamedSkipped extends BenchmarkBase {
|
||||
const DynamicDefFunctionNamedSkipped()
|
||||
: super('Dynamic.DynamicDefFunctionNamedSkipped');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
df3NonCast('');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DynamicDefFunctionNamedProvided extends BenchmarkBase {
|
||||
const DynamicDefFunctionNamedProvided()
|
||||
: super('Dynamic.DynamicDefFunctionNamedProvided');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
df3NonCast('', t: '');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DynamicDefClosureOptSkipped extends BenchmarkBase {
|
||||
const DynamicDefClosureOptSkipped()
|
||||
: super('Dynamic.DynamicDefClosureOptSkipped');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
dc2NonCast('');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DynamicDefClosureOptProvided extends BenchmarkBase {
|
||||
const DynamicDefClosureOptProvided()
|
||||
: super('Dynamic.DynamicDefClosureOptProvided');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
dc2NonCast('', '');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DynamicDefClosureNamedSkipped extends BenchmarkBase {
|
||||
const DynamicDefClosureNamedSkipped()
|
||||
: super('Dynamic.DynamicDefClosureNamedSkipped');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
dc3NonCast('');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DynamicDefClosureNamedProvided extends BenchmarkBase {
|
||||
const DynamicDefClosureNamedProvided()
|
||||
: super('Dynamic.DynamicDefClosureNamedProvided');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
dc3NonCast('', t: '');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DynamicClassASingleton extends BenchmarkBase {
|
||||
final A a;
|
||||
const DynamicClassASingleton()
|
||||
: a = const A(),
|
||||
super('Dynamic.DynamicClassASingleton');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
k(a);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DynamicClassBSingleton extends BenchmarkBase {
|
||||
final B b;
|
||||
const DynamicClassBSingleton()
|
||||
: b = const B(),
|
||||
super('Dynamic.DynamicClassBSingleton');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
k(b);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DynamicClassCFresh extends BenchmarkBase {
|
||||
const DynamicClassCFresh() : super('Dynamic.DynamicClassCFresh');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
j(C());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DynamicClassDFresh extends BenchmarkBase {
|
||||
const DynamicClassDFresh() : super('Dynamic.DynamicClassDFresh');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
j(D());
|
||||
}
|
||||
}
|
||||
}
|
513
benchmarks/Dynamic/dart2/Dynamic.dart
Normal file
513
benchmarks/Dynamic/dart2/Dynamic.dart
Normal file
|
@ -0,0 +1,513 @@
|
|||
// 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.
|
||||
//
|
||||
// This benchmark suite measures the overhead of dynamically calling functions
|
||||
// and closures by calling a set of functions and closures, testing non-dynamic
|
||||
// calls, calls after casting the function tearoff or closure to dynamic, and
|
||||
// similarly defined functions and closures except that the parameters and
|
||||
// return types are all dynamic.
|
||||
|
||||
import 'package:benchmark_harness/benchmark_harness.dart';
|
||||
|
||||
const int kRepeat = 100;
|
||||
|
||||
void main() {
|
||||
const NonDynamicFunction().report();
|
||||
const NonDynamicFunctionOptSkipped().report();
|
||||
const NonDynamicFunctionOptProvided().report();
|
||||
const NonDynamicFunctionNamedSkipped().report();
|
||||
const NonDynamicFunctionNamedProvided().report();
|
||||
const NonDynamicClosure().report();
|
||||
const NonDynamicClosureOptSkipped().report();
|
||||
const NonDynamicClosureOptProvided().report();
|
||||
const NonDynamicClosureNamedSkipped().report();
|
||||
const NonDynamicClosureNamedProvided().report();
|
||||
const DynamicCastFunction().report();
|
||||
const DynamicCastFunctionOptSkipped().report();
|
||||
const DynamicCastFunctionOptProvided().report();
|
||||
const DynamicCastFunctionNamedSkipped().report();
|
||||
const DynamicCastFunctionNamedProvided().report();
|
||||
const DynamicCastClosure().report();
|
||||
const DynamicCastClosureOptSkipped().report();
|
||||
const DynamicCastClosureOptProvided().report();
|
||||
const DynamicCastClosureNamedSkipped().report();
|
||||
const DynamicCastClosureNamedProvided().report();
|
||||
const DynamicDefFunction().report();
|
||||
const DynamicDefFunctionOptSkipped().report();
|
||||
const DynamicDefFunctionOptProvided().report();
|
||||
const DynamicDefFunctionNamedSkipped().report();
|
||||
const DynamicDefFunctionNamedProvided().report();
|
||||
const DynamicDefClosure().report();
|
||||
const DynamicDefClosureOptSkipped().report();
|
||||
const DynamicDefClosureOptProvided().report();
|
||||
const DynamicDefClosureNamedSkipped().report();
|
||||
const DynamicDefClosureNamedProvided().report();
|
||||
const DynamicClassASingleton().report();
|
||||
const DynamicClassBSingleton().report();
|
||||
const DynamicClassCFresh().report();
|
||||
const DynamicClassDFresh().report();
|
||||
}
|
||||
|
||||
@pragma('vm:never-inline')
|
||||
void f1(String s) {}
|
||||
@pragma('vm:never-inline')
|
||||
Function(String) c1 = (String s) => {};
|
||||
@pragma('vm:never-inline')
|
||||
void f2(String s, [String t = 'default']) {}
|
||||
@pragma('vm:never-inline')
|
||||
Function(String, [String]) c2 = (String s, [String t = 'default']) => {};
|
||||
@pragma('vm:never-inline')
|
||||
void f3(String s, {String t = 'default'}) {}
|
||||
@pragma('vm:never-inline')
|
||||
Function(String, {String t}) c3 = (String s, {String t = 'default'}) => {};
|
||||
@pragma('vm:never-inline')
|
||||
dynamic df1 = f1 as dynamic;
|
||||
@pragma('vm:never-inline')
|
||||
dynamic dc1 = c1 as dynamic;
|
||||
@pragma('vm:never-inline')
|
||||
dynamic df2 = f2 as dynamic;
|
||||
@pragma('vm:never-inline')
|
||||
dynamic dc2 = c2 as dynamic;
|
||||
@pragma('vm:never-inline')
|
||||
dynamic df3 = f3 as dynamic;
|
||||
@pragma('vm:never-inline')
|
||||
dynamic dc3 = c3 as dynamic;
|
||||
@pragma('vm:never-inline')
|
||||
dynamic df1NonCast(dynamic s) {}
|
||||
@pragma('vm:never-inline')
|
||||
Function dc1NonCast = (dynamic s) => {};
|
||||
@pragma('vm:never-inline')
|
||||
dynamic df2NonCast(dynamic s, [dynamic t = 'default']) {}
|
||||
@pragma('vm:never-inline')
|
||||
Function dc2NonCast = (dynamic s, [dynamic t = 'default']) => {};
|
||||
@pragma('vm:never-inline')
|
||||
dynamic df3NonCast(dynamic s, {dynamic t = 'default'}) {}
|
||||
@pragma('vm:never-inline')
|
||||
Function dc3NonCast = (dynamic s, {dynamic t = 'default'}) => {};
|
||||
|
||||
class A {
|
||||
const A();
|
||||
}
|
||||
|
||||
class B extends A {
|
||||
const B();
|
||||
}
|
||||
|
||||
@pragma('vm:never-inline')
|
||||
dynamic k = (A a) {};
|
||||
|
||||
class C {
|
||||
C();
|
||||
}
|
||||
|
||||
class D extends C {
|
||||
D();
|
||||
}
|
||||
|
||||
@pragma('vm:never-inline')
|
||||
dynamic j = (C c) {};
|
||||
|
||||
class NonDynamicFunction extends BenchmarkBase {
|
||||
const NonDynamicFunction() : super('Dynamic.NonDynamicFunction');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
f1('');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class NonDynamicClosure extends BenchmarkBase {
|
||||
const NonDynamicClosure() : super('Dynamic.NonDynamicClosure');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
c1('');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class NonDynamicFunctionOptSkipped extends BenchmarkBase {
|
||||
const NonDynamicFunctionOptSkipped()
|
||||
: super('Dynamic.NonDynamicFunctionOptSkipped');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
f2('');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class NonDynamicFunctionOptProvided extends BenchmarkBase {
|
||||
const NonDynamicFunctionOptProvided()
|
||||
: super('Dynamic.NonDynamicFunctionOptProvided');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
f2('', '');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class NonDynamicFunctionNamedSkipped extends BenchmarkBase {
|
||||
const NonDynamicFunctionNamedSkipped()
|
||||
: super('Dynamic.NonDynamicFunctionNamedSkipped');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
f3('');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class NonDynamicFunctionNamedProvided extends BenchmarkBase {
|
||||
const NonDynamicFunctionNamedProvided()
|
||||
: super('Dynamic.NonDynamicFunctionNamedProvided');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
f3('', t: '');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class NonDynamicClosureOptSkipped extends BenchmarkBase {
|
||||
const NonDynamicClosureOptSkipped()
|
||||
: super('Dynamic.NonDynamicClosureOptSkipped');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
c2('');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class NonDynamicClosureOptProvided extends BenchmarkBase {
|
||||
const NonDynamicClosureOptProvided()
|
||||
: super('Dynamic.NonDynamicClosureOptProvided');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
c2('', '');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class NonDynamicClosureNamedSkipped extends BenchmarkBase {
|
||||
const NonDynamicClosureNamedSkipped()
|
||||
: super('Dynamic.NonDynamicClosureNamedSkipped');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
c3('');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class NonDynamicClosureNamedProvided extends BenchmarkBase {
|
||||
const NonDynamicClosureNamedProvided()
|
||||
: super('Dynamic.NonDynamicClosureNamedProvided');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
c3('', t: '');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DynamicCastFunction extends BenchmarkBase {
|
||||
const DynamicCastFunction() : super('Dynamic.DynamicCastFunction');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
df1('');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DynamicCastClosure extends BenchmarkBase {
|
||||
const DynamicCastClosure() : super('Dynamic.DynamicCastClosure');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
dc1('');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DynamicCastFunctionOptSkipped extends BenchmarkBase {
|
||||
const DynamicCastFunctionOptSkipped()
|
||||
: super('Dynamic.DynamicCastFunctionOptSkipped');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
df2('');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DynamicCastFunctionOptProvided extends BenchmarkBase {
|
||||
const DynamicCastFunctionOptProvided()
|
||||
: super('Dynamic.DynamicCastFunctionOptProvided');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
df2('', '');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DynamicCastFunctionNamedSkipped extends BenchmarkBase {
|
||||
const DynamicCastFunctionNamedSkipped()
|
||||
: super('Dynamic.DynamicCastFunctionNamedSkipped');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
df3('');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DynamicCastFunctionNamedProvided extends BenchmarkBase {
|
||||
const DynamicCastFunctionNamedProvided()
|
||||
: super('Dynamic.DynamicCastFunctionNamedProvided');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
df3('', t: '');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DynamicCastClosureOptSkipped extends BenchmarkBase {
|
||||
const DynamicCastClosureOptSkipped()
|
||||
: super('Dynamic.DynamicCastClosureOptSkipped');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
dc2('');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DynamicCastClosureOptProvided extends BenchmarkBase {
|
||||
const DynamicCastClosureOptProvided()
|
||||
: super('Dynamic.DynamicCastClosureOptProvided');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
dc2('', '');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DynamicCastClosureNamedSkipped extends BenchmarkBase {
|
||||
const DynamicCastClosureNamedSkipped()
|
||||
: super('Dynamic.DynamicCastClosureNamedSkipped');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
dc3('');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DynamicCastClosureNamedProvided extends BenchmarkBase {
|
||||
const DynamicCastClosureNamedProvided()
|
||||
: super('Dynamic.DynamicCastClosureNamedProvided');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
dc3('', t: '');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DynamicDefFunction extends BenchmarkBase {
|
||||
const DynamicDefFunction() : super('Dynamic.DynamicDefFunction');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
df1NonCast('');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DynamicDefClosure extends BenchmarkBase {
|
||||
const DynamicDefClosure() : super('Dynamic.DynamicDefClosure');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
dc1NonCast('');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DynamicDefFunctionOptSkipped extends BenchmarkBase {
|
||||
const DynamicDefFunctionOptSkipped()
|
||||
: super('Dynamic.DynamicDefFunctionOptSkipped');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
df2NonCast('');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DynamicDefFunctionOptProvided extends BenchmarkBase {
|
||||
const DynamicDefFunctionOptProvided()
|
||||
: super('Dynamic.DynamicDefFunctionOptProvided');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
df2NonCast('', '');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DynamicDefFunctionNamedSkipped extends BenchmarkBase {
|
||||
const DynamicDefFunctionNamedSkipped()
|
||||
: super('Dynamic.DynamicDefFunctionNamedSkipped');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
df3NonCast('');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DynamicDefFunctionNamedProvided extends BenchmarkBase {
|
||||
const DynamicDefFunctionNamedProvided()
|
||||
: super('Dynamic.DynamicDefFunctionNamedProvided');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
df3NonCast('', t: '');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DynamicDefClosureOptSkipped extends BenchmarkBase {
|
||||
const DynamicDefClosureOptSkipped()
|
||||
: super('Dynamic.DynamicDefClosureOptSkipped');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
dc2NonCast('');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DynamicDefClosureOptProvided extends BenchmarkBase {
|
||||
const DynamicDefClosureOptProvided()
|
||||
: super('Dynamic.DynamicDefClosureOptProvided');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
dc2NonCast('', '');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DynamicDefClosureNamedSkipped extends BenchmarkBase {
|
||||
const DynamicDefClosureNamedSkipped()
|
||||
: super('Dynamic.DynamicDefClosureNamedSkipped');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
dc3NonCast('');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DynamicDefClosureNamedProvided extends BenchmarkBase {
|
||||
const DynamicDefClosureNamedProvided()
|
||||
: super('Dynamic.DynamicDefClosureNamedProvided');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
dc3NonCast('', t: '');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DynamicClassASingleton extends BenchmarkBase {
|
||||
final A a;
|
||||
const DynamicClassASingleton()
|
||||
: a = const A(),
|
||||
super('Dynamic.DynamicClassASingleton');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
k(a);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DynamicClassBSingleton extends BenchmarkBase {
|
||||
final B b;
|
||||
const DynamicClassBSingleton()
|
||||
: b = const B(),
|
||||
super('Dynamic.DynamicClassBSingleton');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
k(b);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DynamicClassCFresh extends BenchmarkBase {
|
||||
const DynamicClassCFresh() : super('Dynamic.DynamicClassCFresh');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
j(C());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DynamicClassDFresh extends BenchmarkBase {
|
||||
const DynamicClassDFresh() : super('Dynamic.DynamicClassDFresh');
|
||||
|
||||
@override
|
||||
void run() {
|
||||
for (int i = 0; i < kRepeat; i++) {
|
||||
j(D());
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue