blob: 77f40e6870391bb39fd5d6415cc3c73a3afab139 [file] [log] [blame]
// 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<void> 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<Uint8> a0;
}
final class Struct${size}BytesWrapper extends Struct {
external Struct${size}Bytes nested;
}
final class Copy${size}Bytes extends StructCopyBenchmark {
@override
Pointer<Struct${size}BytesWrapper> from = nullptr;
@override
Pointer<Struct${size}BytesWrapper> to = nullptr;
Copy${size}Bytes() : super('FfiStructCopy.Copy${size}Bytes');
@override
int get copySizeInBytes => sizeOf<Struct${size}BytesWrapper>();
@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;
}
}
}
''';