This repository was archived by the owner on Feb 25, 2025. It is now read-only.
File tree Expand file tree Collapse file tree 4 files changed +16
-9
lines changed Expand file tree Collapse file tree 4 files changed +16
-9
lines changed Original file line number Diff line number Diff line change @@ -20,7 +20,7 @@ import 'package:ui/src/engine.dart';
2020/// 4. GC decides to perform a GC cycle and collects CkPaint.
2121/// 5. The finalizer function is called with the SkPaint as the sole argument.
2222/// 6. We call `delete` on SkPaint.
23- DomFinalizationRegistry _finalizationRegistry = DomFinalizationRegistry (
23+ DomFinalizationRegistry _finalizationRegistry = createDomFinalizationRegistry (
2424 (UniqueRef <Object > uniq) {
2525 uniq.collect ();
2626 }.toJS
Original file line number Diff line number Diff line change @@ -3438,9 +3438,19 @@ extension DomTextDecoderExtension on DomTextDecoder {
34383438
34393439@JS ('window.FinalizationRegistry' )
34403440@staticInterop
3441- class DomFinalizationRegistry {
3442- external factory DomFinalizationRegistry (JSFunction cleanup);
3443- }
3441+ class DomFinalizationRegistry {}
3442+
3443+ @JS ('window.FinalizationRegistry' )
3444+ external JSAny ? get _finalizationRegistryConstructor;
3445+
3446+ // Note: We don't use a factory constructor here because there is an issue in
3447+ // dart2js that causes a crash in the Google3 build if we do use a factory
3448+ // constructor. See b/284478971
3449+ DomFinalizationRegistry createDomFinalizationRegistry (JSFunction cleanup) =>
3450+ js_util.callConstructor (
3451+ _finalizationRegistryConstructor! .toObjectShallow,
3452+ < Object > [cleanup]
3453+ );
34443454
34453455extension DomFinalizationRegistryExtension on DomFinalizationRegistry {
34463456 @JS ('register' )
@@ -3461,9 +3471,6 @@ extension DomFinalizationRegistryExtension on DomFinalizationRegistry {
34613471 void unregister (Object token) => _unregister (token.toJSAnyShallow);
34623472}
34633473
3464- @JS ('window.FinalizationRegistry' )
3465- external JSAny ? get _finalizationRegistryConstructor;
3466-
34673474/// Whether the current browser supports `FinalizationRegistry` .
34683475bool browserSupportsFinalizationRegistry =
34693476 _finalizationRegistryConstructor != null ;
Original file line number Diff line number Diff line change @@ -28,7 +28,7 @@ typedef DisposeFunction<T extends NativeType> = void Function(Pointer<T>);
2828
2929class SkwasmFinalizationRegistry <T extends NativeType > {
3030 SkwasmFinalizationRegistry (this .dispose)
31- : registry = DomFinalizationRegistry (((JSNumber address) =>
31+ : registry = createDomFinalizationRegistry (((JSNumber address) =>
3232 dispose (Pointer <T >.fromAddress (address.toDart.toInt ()))
3333 ).toJS);
3434
Original file line number Diff line number Diff line change @@ -1907,7 +1907,7 @@ void _paragraphTests() {
19071907 // FinalizationRegistry because it depends on GC, which cannot be controlled,
19081908 // So the test simply tests that a FinalizationRegistry can be constructed
19091909 // and its `register` method can be called.
1910- final DomFinalizationRegistry registry = DomFinalizationRegistry ((String arg) {}.toJS);
1910+ final DomFinalizationRegistry registry = createDomFinalizationRegistry ((String arg) {}.toJS);
19111911 registry.register (Object (), Object ());
19121912 });
19131913}
You can’t perform that action at this time.
0 commit comments