// 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 'package:flutter/services.dart'; import '../common.dart'; const int _kNumIterations = 100000; void main() { assert(false, "Don't run benchmarks in debug mode! Use 'flutter run --release'."); final BenchmarkResultPrinter printer = BenchmarkResultPrinter(); const StandardMessageCodec codec = StandardMessageCodec(); final Stopwatch watch = Stopwatch(); watch.start(); for (int i = 0; i < _kNumIterations; i += 1) { codec.encodeMessage(null); } watch.stop(); printer.addResult( description: 'StandardMessageCodec null', value: watch.elapsedMicroseconds.toDouble() / _kNumIterations, unit: 'us per iteration', name: 'StandardMessageCodec_null', ); watch.reset(); watch.start(); for (int i = 0; i < _kNumIterations; i += 1) { codec.encodeMessage(12345); } watch.stop(); printer.addResult( description: 'StandardMessageCodec int', value: watch.elapsedMicroseconds.toDouble() / _kNumIterations, unit: 'us per iteration', name: 'StandardMessageCodec_int', ); watch.reset(); watch.start(); for (int i = 0; i < _kNumIterations; i += 1) { codec.encodeMessage('This is a performance test.'); } watch.stop(); printer.addResult( description: 'StandardMessageCodec string', value: watch.elapsedMicroseconds.toDouble() / _kNumIterations, unit: 'us per iteration', name: 'StandardMessageCodec_string', ); watch.reset(); watch.start(); for (int i = 0; i < _kNumIterations; i += 1) { codec.encodeMessage([1234, 'This is a performance test.', 1.25, true]); } watch.stop(); printer.addResult( description: 'StandardMessageCodec heterogenous list', value: watch.elapsedMicroseconds.toDouble() / _kNumIterations, unit: 'us per iteration', name: 'StandardMessageCodec_heterogenous_list', ); watch.reset(); watch.start(); for (int i = 0; i < _kNumIterations; i += 1) { codec.encodeMessage({ 'integer': 1234, 'string': 'This is a performance test.', 'float': 1.25, 'boolean': true, }); } watch.stop(); printer.addResult( description: 'StandardMessageCodec heterogenous map', value: watch.elapsedMicroseconds.toDouble() / _kNumIterations, unit: 'us per iteration', name: 'StandardMessageCodec_heterogenous_map', ); watch.reset(); watch.start(); for (int i = 0; i < _kNumIterations; i += 1) { codec.encodeMessage('special chars >\u263A\u{1F602}<'); } watch.stop(); printer.addResult( description: 'StandardMessageCodec unicode', value: watch.elapsedMicroseconds.toDouble() / _kNumIterations, unit: 'us per iteration', name: 'StandardMessageCodec_unicode', ); watch.reset(); printer.printToStdout(); }