Unverified Commit 797ec7b6 authored by Oleksandr Karpovich's avatar Oleksandr Karpovich Committed by GitHub

Correct the usage of FinalizationRegistry API in web targets (#1077)

Fixes
https://youtrack.jetbrains.com/projects/SKIKO/issues/SKIKO-1040/Web-targets-not-optimal-use-of-FinalizationRegistry-API

It improves some microbenhcmarks according to
https://github.com/WebKit/JetStream/pull/84#discussion_r2254866128
parent 80ceb885
package org.jetbrains.skia.impl package org.jetbrains.skia.impl
/**
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/FinalizationRegistry
*/
internal external class FinalizationRegistry(cleanup: (dynamic) -> Unit) { internal external class FinalizationRegistry(cleanup: (dynamic) -> Unit) {
fun register(obj: dynamic, handle: dynamic)
fun unregister(obj: dynamic) /**
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/FinalizationRegistry/register
*/
fun register(obj: dynamic, handle: dynamic, unregisterToken: dynamic)
/**
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/FinalizationRegistry/unregister
*/
fun unregister(unregisterToken: dynamic)
} }
private val registry = FinalizationRegistry { private val registry = FinalizationRegistry {
...@@ -11,7 +22,7 @@ private val registry = FinalizationRegistry { ...@@ -11,7 +22,7 @@ private val registry = FinalizationRegistry {
} }
internal actual fun register(managed: Managed, thunk: FinalizationThunk) { internal actual fun register(managed: Managed, thunk: FinalizationThunk) {
registry.register(managed, thunk) registry.register(managed, thunk, managed)
} }
internal actual fun unregister(managed: Managed) { internal actual fun unregister(managed: Managed) {
......
package org.jetbrains.skia.impl package org.jetbrains.skia.impl
/**
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/FinalizationRegistry
*/
internal external class FinalizationRegistry(cleanup: (JsReference<FinalizationThunk>) -> Unit) { internal external class FinalizationRegistry(cleanup: (JsReference<FinalizationThunk>) -> Unit) {
fun register(obj: JsReference<Managed>, handle: JsReference<FinalizationThunk>) /**
fun unregister(obj: JsReference<Managed>) * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/FinalizationRegistry/register
*/
fun register(obj: JsReference<Managed>, handle: JsReference<FinalizationThunk>, unregisterToken: JsReference<Managed>)
/**
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/FinalizationRegistry/unregister
*/
fun unregister(unregisterToken: JsReference<Managed>)
} }
private val registry = FinalizationRegistry { thunk: JsReference<FinalizationThunk> -> private val registry = FinalizationRegistry { thunk: JsReference<FinalizationThunk> ->
...@@ -10,7 +20,8 @@ private val registry = FinalizationRegistry { thunk: JsReference<FinalizationThu ...@@ -10,7 +20,8 @@ private val registry = FinalizationRegistry { thunk: JsReference<FinalizationThu
} }
internal actual fun register(managed: Managed, thunk: FinalizationThunk) { internal actual fun register(managed: Managed, thunk: FinalizationThunk) {
registry.register(managed.toJsReference(), thunk.toJsReference()) val managedRef = managed.toJsReference()
registry.register(managedRef, thunk.toJsReference(), managedRef)
} }
internal actual fun unregister(managed: Managed) { internal actual fun unregister(managed: Managed) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment