// Copyright (c) 2022, 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. import 'dart:io'; Future main() async { final contents = [ header, for (final size in sizes) generateSize(size), ].join('\n'); final uri = Platform.script.resolve('dart/benchmark_generated.dart'); await File.fromUri(uri).writeAsString(contents); } const sizes = [ 1, 32, 1024, 1024 * 32, ]; const header = '''// Copyright (c) 2022, 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. import 'dart:ffi'; import 'package:ffi/ffi.dart'; import 'FfiStructCopy.dart'; '''; String generateSize(int size) => ''' final class Struct${size}Bytes extends Struct { @Array($size) external Array a0; } final class Struct${size}BytesWrapper extends Struct { external Struct${size}Bytes nested; } final class Copy${size}Bytes extends StructCopyBenchmark { @override Pointer from = nullptr; @override Pointer to = nullptr; Copy${size}Bytes() : super('FfiStructCopy.Copy${size}Bytes'); @override int get copySizeInBytes => sizeOf(); @override void setup(int batchSize) { from = calloc(batchSize); to = calloc(batchSize); } @override void run(int batchSize) { for (int i = 0; i < batchSize; i++) { to[i].nested = from[i].nested; } } } ''';