|  | // Copyright (c) 2020, 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. | 
|  | // | 
|  | // SharedObjects=ffi_test_functions | 
|  | // | 
|  | // VMOptions=--optimization-counter-threshold=200 | 
|  |  | 
|  | // @dart = 2.9 | 
|  |  | 
|  | import 'dart:ffi'; | 
|  |  | 
|  | import 'dylib_utils.dart'; | 
|  |  | 
|  | class MyStruct extends Struct { | 
|  | @Int8() | 
|  | int a; | 
|  | } | 
|  |  | 
|  | typedef _c_pass_struct = Int32 Function(Pointer<MyStruct> arg0); | 
|  |  | 
|  | typedef _dart_pass_struct = int Function(Pointer<MyStruct> arg0); | 
|  |  | 
|  | int pass_struct(Pointer<MyStruct> arg0) { | 
|  | _pass_struct ??= ffiTestFunctions | 
|  | .lookupFunction<_c_pass_struct, _dart_pass_struct>('PassStruct'); | 
|  | return _pass_struct(arg0); | 
|  | } | 
|  |  | 
|  | _dart_pass_struct _pass_struct; | 
|  |  | 
|  | final ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions"); | 
|  |  | 
|  | void main() { | 
|  | for (int i = 0; i < 10000; i++) { | 
|  | pass_struct(nullptr); | 
|  | } | 
|  | } |