From 76c104f668c5710905ab4397291222696d4f7739 Mon Sep 17 00:00:00 2001 From: Harry Terkelsen Date: Wed, 9 Sep 2020 15:44:18 -0700 Subject: [PATCH] Remove the type parameter from `SkObjectFinalizationRegistry`. Dart2js will pass the type parameter to the native object, which causes an error in Chrome Canary. --- lib/web_ui/lib/src/engine/canvaskit/canvaskit_api.dart | 10 +++++----- .../lib/src/engine/canvaskit/skia_object_cache.dart | 5 ++--- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/lib/web_ui/lib/src/engine/canvaskit/canvaskit_api.dart b/lib/web_ui/lib/src/engine/canvaskit/canvaskit_api.dart index 8a67398f07181..95157cb63c479 100644 --- a/lib/web_ui/lib/src/engine/canvaskit/canvaskit_api.dart +++ b/lib/web_ui/lib/src/engine/canvaskit/canvaskit_api.dart @@ -1640,7 +1640,7 @@ class TypefaceFontProviderNamespace { Timer? _skObjectCollector; List _skObjectDeleteQueue = []; -final SkObjectFinalizationRegistry skObjectFinalizationRegistry = SkObjectFinalizationRegistry(js.allowInterop((SkDeletable deletable) { +final SkObjectFinalizationRegistry skObjectFinalizationRegistry = SkObjectFinalizationRegistry(js.allowInterop((SkDeletable deletable) { _skObjectDeleteQueue.add(deletable); _skObjectCollector ??= _scheduleSkObjectCollection(); })); @@ -1673,8 +1673,6 @@ Timer _scheduleSkObjectCollection() => Timer(Duration.zero, () { html.window.performance.measure('SkObject collection', 'SkObject collection-start', 'SkObject collection-end'); }); -typedef SkObjectFinalizer = void Function(T key); - /// Any Skia object that has a `delete` method. @JS() @anonymous @@ -1698,8 +1696,10 @@ class SkDeletable { /// 5. The finalizer function is called with the SkPaint as the sole argument. /// 6. We call `delete` on SkPaint. @JS('window.FinalizationRegistry') -class SkObjectFinalizationRegistry { - external SkObjectFinalizationRegistry(SkObjectFinalizer finalizer); +class SkObjectFinalizationRegistry { + // TODO(hterkelsen): Add a type for the `cleanup` function when + // native constructors support type parameters. + external SkObjectFinalizationRegistry(Function cleanup); external void register(Object ckObject, Object skObject); } diff --git a/lib/web_ui/lib/src/engine/canvaskit/skia_object_cache.dart b/lib/web_ui/lib/src/engine/canvaskit/skia_object_cache.dart index 160ee172f2f7d..36cdf7e7c5176 100644 --- a/lib/web_ui/lib/src/engine/canvaskit/skia_object_cache.dart +++ b/lib/web_ui/lib/src/engine/canvaskit/skia_object_cache.dart @@ -264,9 +264,8 @@ class SkiaObjectBox { bool _isDeleted = false; /// Deletes Skia objects when their wrappers are garbage collected. - static final SkObjectFinalizationRegistry boxRegistry = - SkObjectFinalizationRegistry( - js.allowInterop((SkiaObjectBox box) { + static final SkObjectFinalizationRegistry boxRegistry = + SkObjectFinalizationRegistry(js.allowInterop((SkiaObjectBox box) { box.delete(); }));