1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
import 'dart:ffi';
import 'dart:io';
import 'package:ffi/ffi.dart';
int rss() => int.parse(File('/proc/self/status').readAsLinesSync()
.firstWhere((l)=>l.startsWith('VmRSS')).split(RegExp(r'\s+'))[1]);
void main(){
final lib = DynamicLibrary.open('libnimflutter.so');
final greet = lib.lookupFunction<Pointer<Utf8> Function(Pointer<Utf8>),
Pointer<Utf8> Function(Pointer<Utf8>)>('nf_greet');
final vfree = lib.lookupFunction<Void Function(Pointer<Void>),
void Function(Pointer<Void>)>('nf_free');
// Regression guard for the shared-heap ownership rule: RSS must stay flat.
final arg = 'fixed'.toNativeUtf8();
for (var i=0;i<5000;i++){ vfree(greet(arg).cast()); }
final before = rss();
for (var i=0;i<900000;i++){ vfree(greet(arg).cast()); }
print('native-only before: $before kB after: ${rss()} kB');
calloc.free(arg);
}
|