|
import 'package:benchmark_harness/benchmark_harness.dart'; |
|
import 'package:drivers_app/common/extension/build_context_extension.dart'; |
|
import 'package:drivers_app/generated/l10n.dart'; |
|
import 'package:flutter/material.dart'; |
|
import 'package:flutter_localizations/flutter_localizations.dart'; |
|
import 'package:flutter_test/flutter_test.dart'; |
|
|
|
import 'test_utils/i18n_utils.dart'; |
|
|
|
extension BuildContextExtensions on BuildContext { |
|
I18n get i18n => I18n.of(this); |
|
} |
|
|
|
class Directly extends BenchmarkBase { |
|
const Directly(this.times) : super('direclty access to i18n'); |
|
|
|
final int times; |
|
|
|
@override |
|
void run() { |
|
for (var i = 0; i < times; i++) { |
|
final a = I18n.current.profile; |
|
final b = I18n.current.myLoads; |
|
} |
|
} |
|
} |
|
|
|
class Indirectly extends BenchmarkBase { |
|
const Indirectly(this.times) : super('indireclty access to i18n'); |
|
|
|
final int times; |
|
|
|
@override |
|
void run() { |
|
for (var i = 0; i < times; i++) { |
|
final i18n = I18n.current; |
|
final a = i18n.profile; |
|
final b = i18n.myLoads; |
|
} |
|
} |
|
} |
|
|
|
class IndirectlyOutside extends BenchmarkBase { |
|
const IndirectlyOutside(this.times) |
|
: super('indireclty outside access to i18n'); |
|
|
|
final int times; |
|
|
|
@override |
|
void run() { |
|
final i18n = I18n.current; |
|
|
|
for (var i = 0; i < times; i++) { |
|
final a = i18n.profile; |
|
final b = i18n.myLoads; |
|
} |
|
} |
|
} |
|
|
|
class DirectlyWithContext extends BenchmarkBase { |
|
const DirectlyWithContext(this.times, this.context) |
|
: super('direclty access to i18n'); |
|
|
|
final int times; |
|
final BuildContext context; |
|
|
|
@override |
|
void run() { |
|
for (var i = 0; i < times; i++) { |
|
final a = context.i18n.profile; |
|
final b = context.i18n.myLoads; |
|
} |
|
} |
|
} |
|
|
|
class IndirectlyWithContext extends BenchmarkBase { |
|
const IndirectlyWithContext(this.times, this.context) |
|
: super('indireclty access to i18n'); |
|
|
|
final int times; |
|
final BuildContext context; |
|
|
|
@override |
|
void run() { |
|
for (var i = 0; i < times; i++) { |
|
final i18n = context.i18n; |
|
final a = i18n.profile; |
|
final b = i18n.myLoads; |
|
} |
|
} |
|
} |
|
|
|
class IndirectlyOutsideWithContext extends BenchmarkBase { |
|
const IndirectlyOutsideWithContext(this.times, this.context) |
|
: super('indireclty outside access to i18n'); |
|
|
|
final int times; |
|
final BuildContext context; |
|
|
|
@override |
|
void run() { |
|
final i18n = context.i18n; |
|
|
|
for (var i = 0; i < times; i++) { |
|
final a = i18n.profile; |
|
final b = i18n.myLoads; |
|
} |
|
} |
|
} |
|
|
|
class IndirectlyOutsideWithoutExtensionWithContext extends BenchmarkBase { |
|
const IndirectlyOutsideWithoutExtensionWithContext(this.times, this.context) |
|
: super('indireclty outside access without extension to i18n'); |
|
|
|
final int times; |
|
final BuildContext context; |
|
|
|
@override |
|
void run() { |
|
final i18n = I18n.of(context); |
|
|
|
for (var i = 0; i < times; i++) { |
|
final a = i18n.profile; |
|
final b = i18n.myLoads; |
|
} |
|
} |
|
} |
|
|
|
void main() { |
|
const times = 9999999; |
|
|
|
setUp(() async { |
|
await i18nLoadLocale(); |
|
}); |
|
|
|
test('measuring', () async { |
|
const Directly(times).report(); |
|
const Indirectly(times).report(); |
|
const IndirectlyOutside(times).report(); |
|
}, skip: true); |
|
|
|
testWidgets('measuring with context', (WidgetTester tester) async { |
|
await tester.pumpWidget( |
|
MaterialApp( |
|
localizationsDelegates: const [ |
|
I18n.delegate, |
|
GlobalMaterialLocalizations.delegate, |
|
GlobalWidgetsLocalizations.delegate, |
|
GlobalCupertinoLocalizations.delegate, |
|
], |
|
supportedLocales: I18n.delegate.supportedLocales, |
|
home: Builder( |
|
builder: (BuildContext context) { |
|
DirectlyWithContext(times, context).report(); |
|
IndirectlyWithContext(times, context).report(); |
|
IndirectlyOutsideWithContext(times, context).report(); |
|
IndirectlyOutsideWithoutExtensionWithContext(times, context).report(); |
|
|
|
return Container(); |
|
}, |
|
), |
|
), |
|
); |
|
}); |
|
} |