| // 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'; |
| |
| final class Struct1Bytes extends Struct { |
| @Array(1) |
| external Array<Uint8> a0; |
| } |
| |
| final class Struct1BytesWrapper extends Struct { |
| external Struct1Bytes nested; |
| } |
| |
| final class Copy1Bytes extends StructCopyBenchmark { |
| @override |
| Pointer<Struct1BytesWrapper> from = nullptr; |
| @override |
| Pointer<Struct1BytesWrapper> to = nullptr; |
| |
| Copy1Bytes() : super('FfiStructCopy.Copy1Bytes'); |
| |
| @override |
| int get copySizeInBytes => sizeOf<Struct1BytesWrapper>(); |
| |
| @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; |
| } |
| } |
| } |
| |
| final class Struct32Bytes extends Struct { |
| @Array(32) |
| external Array<Uint8> a0; |
| } |
| |
| final class Struct32BytesWrapper extends Struct { |
| external Struct32Bytes nested; |
| } |
| |
| final class Copy32Bytes extends StructCopyBenchmark { |
| @override |
| Pointer<Struct32BytesWrapper> from = nullptr; |
| @override |
| Pointer<Struct32BytesWrapper> to = nullptr; |
| |
| Copy32Bytes() : super('FfiStructCopy.Copy32Bytes'); |
| |
| @override |
| int get copySizeInBytes => sizeOf<Struct32BytesWrapper>(); |
| |
| @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; |
| } |
| } |
| } |
| |
| final class Struct1024Bytes extends Struct { |
| @Array(1024) |
| external Array<Uint8> a0; |
| } |
| |
| final class Struct1024BytesWrapper extends Struct { |
| external Struct1024Bytes nested; |
| } |
| |
| final class Copy1024Bytes extends StructCopyBenchmark { |
| @override |
| Pointer<Struct1024BytesWrapper> from = nullptr; |
| @override |
| Pointer<Struct1024BytesWrapper> to = nullptr; |
| |
| Copy1024Bytes() : super('FfiStructCopy.Copy1024Bytes'); |
| |
| @override |
| int get copySizeInBytes => sizeOf<Struct1024BytesWrapper>(); |
| |
| @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; |
| } |
| } |
| } |
| |
| final class Struct32768Bytes extends Struct { |
| @Array(32768) |
| external Array<Uint8> a0; |
| } |
| |
| final class Struct32768BytesWrapper extends Struct { |
| external Struct32768Bytes nested; |
| } |
| |
| final class Copy32768Bytes extends StructCopyBenchmark { |
| @override |
| Pointer<Struct32768BytesWrapper> from = nullptr; |
| @override |
| Pointer<Struct32768BytesWrapper> to = nullptr; |
| |
| Copy32768Bytes() : super('FfiStructCopy.Copy32768Bytes'); |
| |
| @override |
| int get copySizeInBytes => sizeOf<Struct32768BytesWrapper>(); |
| |
| @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; |
| } |
| } |
| } |