| // 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. |
| |
| /// @description Check that WeakReference constructor rejects any object that is |
| /// not supported as an Expando key. Test Strings. |
| /// @author sgrekhov@unipro.ru |
| library gc_utils_lib; |
| |
| import "dart:io"; |
| import "dart:ffi"; |
| |
| void triggerGc() { |
| String _platformPath(String name, {String? path}) { |
| if (path == null) path = ""; |
| if (Platform.isLinux || Platform.isAndroid || Platform.isFuchsia) |
| return path + "lib" + name + ".so"; |
| if (Platform.isMacOS) return path + "lib" + name + ".dylib"; |
| if (Platform.isWindows) return path + name + ".dll"; |
| throw Exception("Platform not implemented"); |
| } |
| |
| DynamicLibrary dlOpenPlatformSpecific(String name, {String? path}) { |
| String fullPath = _platformPath(name, path: path); |
| return DynamicLibrary.open(fullPath); |
| } |
| |
| final ffiTestFunctions = dlOpenPlatformSpecific("ffi_test_functions"); |
| |
| void Function() _triggerGC = ffiTestFunctions |
| .lookupFunction<Void Function(), void Function()>("TriggerGC"); |
| _triggerGC(); |
| } |
| |
| Future<void> triggerGcWithDelay( |
| {Duration delay = const Duration(milliseconds: 3), int repeat = 1}) async { |
| for (int i = 0; i < repeat; i++) { |
| triggerGc(); |
| await Future.delayed(delay); |
| } |
| } |