Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 097e63e

Browse files
committed
Keep old toJSAnyShallow/toObjectShallow, make new toJSWrapper/fromJSWrapper & use only in finalization code
1 parent 702929d commit 097e63e

File tree

4 files changed

+29
-9
lines changed

4 files changed

+29
-9
lines changed

lib/web_ui/lib/src/engine/canvaskit/native_memory.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import 'package:ui/src/engine.dart';
2222
/// 6. We call `delete` on SkPaint.
2323
DomFinalizationRegistry _finalizationRegistry = DomFinalizationRegistry(
2424
(JSBoxedDartObject boxedUniq) {
25-
final UniqueRef<Object> uniq = boxedUniq.toDart as UniqueRef<Object>;
25+
final UniqueRef<Object> uniq = boxedUniq.fromJSWrapper as UniqueRef<Object>;
2626
uniq.collect();
2727
}.toJS
2828
);
@@ -34,7 +34,7 @@ NativeMemoryFinalizationRegistry nativeMemoryFinalizationRegistry = NativeMemory
3434
class NativeMemoryFinalizationRegistry {
3535
void register(Object owner, UniqueRef<Object> ref) {
3636
if (browserSupportsFinalizationRegistry) {
37-
_finalizationRegistry.register(owner.toJSAnyShallow, ref.toJSBox);
37+
_finalizationRegistry.register(owner.toJSWrapper, ref.toJSWrapper);
3838
}
3939
}
4040
}

lib/web_ui/lib/src/engine/dom.dart

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ import 'dart:typed_data';
99

1010
import 'package:js/js_util.dart' as js_util;
1111
import 'package:meta/meta.dart';
12-
import 'package:ui/src/engine/skwasm/skwasm_stub.dart' if (dart.library.ffi) 'package:ui/src/engine/skwasm/skwasm_impl.dart';
12+
import 'package:ui/src/engine/skwasm/skwasm_stub.dart'
13+
if (dart.library.ffi) 'package:ui/src/engine/skwasm/skwasm_impl.dart';
1314

1415
import 'browser_detection.dart';
1516

@@ -37,14 +38,23 @@ import 'browser_detection.dart';
3738
/// are currently represented across web backends, these extensions should be
3839
/// used carefully and only on types that are known to not contains `JSNull` and
3940
/// `JSUndefined`.
40-
4141
extension ObjectToJSAnyExtension on Object {
4242
// Once `Object.toJSBox` is faster (see
4343
// https://github.com/dart-lang/sdk/issues/55183) we can remove this
4444
// backend-specific workaround.
4545
@pragma('wasm:prefer-inline')
4646
@pragma('dart2js:tryInline')
47-
JSAny get toJSAnyShallow => dartToJsWrapper(this);
47+
JSAny get toJSWrapper => dartToJsWrapper(this);
48+
49+
@pragma('wasm:prefer-inline')
50+
@pragma('dart2js:tryInline')
51+
JSAny get toJSAnyShallow {
52+
if (isWasm) {
53+
return toJSAnyDeep;
54+
} else {
55+
return this as JSAny;
56+
}
57+
}
4858

4959
@pragma('wasm:prefer-inline')
5060
@pragma('dart2js:tryInline')
@@ -54,7 +64,17 @@ extension ObjectToJSAnyExtension on Object {
5464
extension JSAnyToObjectExtension on JSAny {
5565
@pragma('wasm:prefer-inline')
5666
@pragma('dart2js:tryInline')
57-
Object get toObjectShallow => jsWrapperToDart(this);
67+
Object get fromJSWrapper => jsWrapperToDart(this);
68+
69+
@pragma('wasm:prefer-inline')
70+
@pragma('dart2js:tryInline')
71+
Object get toObjectShallow {
72+
if (isWasm) {
73+
return toObjectDeep;
74+
} else {
75+
return this;
76+
}
77+
}
5878

5979
@pragma('wasm:prefer-inline')
6080
@pragma('dart2js:tryInline')

lib/web_ui/lib/src/engine/skwasm/skwasm_impl/memory.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,13 @@ class SkwasmFinalizationRegistry<T extends NativeType> {
3636
final DisposeFunction<T> dispose;
3737

3838
void register(SkwasmObjectWrapper<T> wrapper) {
39-
final JSAny jsWrapper = wrapper.toJSAnyShallow;
39+
final JSAny jsWrapper = wrapper.toJSWrapper;
4040
registry.registerWithToken(
4141
jsWrapper, wrapper.handle.address.toJS, jsWrapper);
4242
}
4343

4444
void evict(SkwasmObjectWrapper<T> wrapper) {
45-
final JSAny jsWrapper = wrapper.toJSAnyShallow;
45+
final JSAny jsWrapper = wrapper.toJSWrapper;
4646
registry.unregister(jsWrapper);
4747
dispose(wrapper.handle);
4848
}

lib/web_ui/test/canvaskit/canvaskit_api_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1929,7 +1929,7 @@ void _paragraphTests() {
19291929
// So the test simply tests that a FinalizationRegistry can be constructed
19301930
// and its `register` method can be called.
19311931
final DomFinalizationRegistry registry = DomFinalizationRegistry((String arg) {}.toJS);
1932-
registry.register(Object().toJSAnyShallow, Object().toJSAnyShallow);
1932+
registry.register(Object().toJSWrapper, Object().toJSWrapper);
19331933
});
19341934
}
19351935

0 commit comments

Comments
 (0)