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('libvflutter.so'); final greet = lib.lookupFunction Function(Pointer), Pointer Function(Pointer)>('vf_greet'); final vfree = lib.lookupFunction), void Function(Pointer)>('vf_free'); // Regression guard for the -gc none 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); }