openkraken / kraken

A web standards-compliant, high-performance rendering engine based on Flutter.
https://openkraken.com
Apache License 2.0
4.93k stars 304 forks source link

优化 Dart FFI 与 C++ 通信的方式 #128

Closed andycall closed 2 years ago

andycall commented 3 years ago

发现 Dart 现在支持传入一个 Dart_Handler 作为 FFI 函数的参数,这意味着任何一个 Dart 对象、函数都可以直接传递到 C,然后通过 dart_api.h 里面提供的符号进行一些调用操作,包括直接获取属性,转成函数等。

看样子是可以在中间去掉 Map 有关的映射来让 C++ 对象和 Dart 对象直接对接。

https://github.com/dart-lang/sdk/issues/36858 https://github.com/dart-lang/sdk/issues/35770 https://github.com/google/webcrypto.dart/blob/6dd34605b16097f2845742e04cce1aa4854b07d8/src/webcrypto_dart_dl.c#L49-L72

andycall commented 3 years ago

因为 Dart_Handler 并不是持久保存,无法使用 CommandBuffer 来实现,因此是否会带来性能优化待确定。