Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Keep old toJSAnyShallow/toObjectShallow, make new toJSWrapper/fromJSW…
…rapper & use only in finalization code
  • Loading branch information
mkustermann committed Mar 18, 2024
commit 097e63eba6fde8534ed61da3da603adc8335724a
4 changes: 2 additions & 2 deletions lib/web_ui/lib/src/engine/canvaskit/native_memory.dart
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import 'package:ui/src/engine.dart';
/// 6. We call `delete` on SkPaint.
DomFinalizationRegistry _finalizationRegistry = DomFinalizationRegistry(
(JSBoxedDartObject boxedUniq) {
final UniqueRef<Object> uniq = boxedUniq.toDart as UniqueRef<Object>;
final UniqueRef<Object> uniq = boxedUniq.fromJSWrapper as UniqueRef<Object>;
uniq.collect();
}.toJS
);
Expand All @@ -34,7 +34,7 @@ NativeMemoryFinalizationRegistry nativeMemoryFinalizationRegistry = NativeMemory
class NativeMemoryFinalizationRegistry {
void register(Object owner, UniqueRef<Object> ref) {
if (browserSupportsFinalizationRegistry) {
_finalizationRegistry.register(owner.toJSAnyShallow, ref.toJSBox);
_finalizationRegistry.register(owner.toJSWrapper, ref.toJSWrapper);
}
}
}
Expand Down
28 changes: 24 additions & 4 deletions lib/web_ui/lib/src/engine/dom.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ import 'dart:typed_data';

import 'package:js/js_util.dart' as js_util;
import 'package:meta/meta.dart';
import 'package:ui/src/engine/skwasm/skwasm_stub.dart' if (dart.library.ffi) 'package:ui/src/engine/skwasm/skwasm_impl.dart';
import 'package:ui/src/engine/skwasm/skwasm_stub.dart'
if (dart.library.ffi) 'package:ui/src/engine/skwasm/skwasm_impl.dart';

import 'browser_detection.dart';

Expand Down Expand Up @@ -37,14 +38,23 @@ import 'browser_detection.dart';
/// are currently represented across web backends, these extensions should be
/// used carefully and only on types that are known to not contains `JSNull` and
/// `JSUndefined`.

extension ObjectToJSAnyExtension on Object {
// Once `Object.toJSBox` is faster (see
// https://github.com/dart-lang/sdk/issues/55183) we can remove this
// backend-specific workaround.
@pragma('wasm:prefer-inline')
@pragma('dart2js:tryInline')
JSAny get toJSAnyShallow => dartToJsWrapper(this);
JSAny get toJSWrapper => dartToJsWrapper(this);

@pragma('wasm:prefer-inline')
@pragma('dart2js:tryInline')
JSAny get toJSAnyShallow {
if (isWasm) {
return toJSAnyDeep;
} else {
return this as JSAny;
}
}

@pragma('wasm:prefer-inline')
@pragma('dart2js:tryInline')
Expand All @@ -54,7 +64,17 @@ extension ObjectToJSAnyExtension on Object {
extension JSAnyToObjectExtension on JSAny {
@pragma('wasm:prefer-inline')
@pragma('dart2js:tryInline')
Object get toObjectShallow => jsWrapperToDart(this);
Object get fromJSWrapper => jsWrapperToDart(this);

@pragma('wasm:prefer-inline')
@pragma('dart2js:tryInline')
Object get toObjectShallow {
if (isWasm) {
return toObjectDeep;
} else {
return this;
}
}

@pragma('wasm:prefer-inline')
@pragma('dart2js:tryInline')
Expand Down
4 changes: 2 additions & 2 deletions lib/web_ui/lib/src/engine/skwasm/skwasm_impl/memory.dart
Original file line number Diff line number Diff line change
Expand Up @@ -36,13 +36,13 @@ class SkwasmFinalizationRegistry<T extends NativeType> {
final DisposeFunction<T> dispose;

void register(SkwasmObjectWrapper<T> wrapper) {
final JSAny jsWrapper = wrapper.toJSAnyShallow;
final JSAny jsWrapper = wrapper.toJSWrapper;
registry.registerWithToken(
jsWrapper, wrapper.handle.address.toJS, jsWrapper);
}

void evict(SkwasmObjectWrapper<T> wrapper) {
final JSAny jsWrapper = wrapper.toJSAnyShallow;
final JSAny jsWrapper = wrapper.toJSWrapper;
registry.unregister(jsWrapper);
dispose(wrapper.handle);
}
Expand Down
2 changes: 1 addition & 1 deletion lib/web_ui/test/canvaskit/canvaskit_api_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -1929,7 +1929,7 @@ void _paragraphTests() {
// So the test simply tests that a FinalizationRegistry can be constructed
// and its `register` method can be called.
final DomFinalizationRegistry registry = DomFinalizationRegistry((String arg) {}.toJS);
registry.register(Object().toJSAnyShallow, Object().toJSAnyShallow);
registry.register(Object().toJSWrapper, Object().toJSWrapper);
});
}

Expand Down