This repository was archived by the owner on Feb 25, 2025. It is now read-only.
[web] remove obsolete object caches; simplify native object management#40862
Merged
auto-submit[bot] merged 1 commit intoflutter:mainfrom Apr 3, 2023
Merged
[web] remove obsolete object caches; simplify native object management#40862auto-submit[bot] merged 1 commit intoflutter:mainfrom
auto-submit[bot] merged 1 commit intoflutter:mainfrom
Conversation
CaseyHillers
approved these changes
Apr 2, 2023
engine-flutter-autoroll
added a commit
to engine-flutter-autoroll/flutter
that referenced
this pull request
Apr 3, 2023
yjbanov
pushed a commit
that referenced
this pull request
Apr 3, 2023
…anagement" (#40882) Reverts #40862 Google Testing is failing on ``` The compiler crashed: root::dart:_engine::SkObjectFinalizationRegistry::@methods::|staticInteropFactoryStub is already bound to Reference to dart:_engine::SkObjectFinalizationRegistry::@methods::|staticInteropFactoryStub, trying to bind to Reference to SkObjectFinalizationRegistry.|staticInteropFactoryStub with node SkObjectFinalizationRegistry.|staticInteropFactoryStub (Procedure:1207727) ```
yjbanov
added a commit
that referenced
this pull request
Apr 4, 2023
#40894) (this is attempt 3; details below) Remove obsolete object caches and introduce a simpler way to manage native objects: * Remove the unused `SynchronousSkiaObjectCache`. * Introduce new library `native_memory.dart` that's smaller and simpler than `skia_object_cache.dart`. * Introduce two types of native object references: * `UniqueRef` a reference with a unique Dart object owner. * `CountedRef` a ref-counted reference with multiple Dart object owners. * All native references use GC (via `FinalizationRegistry`) as a back-up. * The new library removes everything related to object resurrection that was needed only in browsers that didn't support `FinalizationRegistry`. All browsers support it now. * Remove the ad hoc `SkParagraph` cache that predates the introduction of `Paragraph.dispose`. * Rewrite `CkParagraph` in terms of `UniqueRef`. * Rewrite `CkImage` in terms of `CountedRef`; delete `SkiaObjectBox`. This PR does not migrate all objects from the old `skia_object_cache.dart` to `native_memory.dart`. That would be too big of a change. The migration can be done in multiple smaller PRs. This also removes a few unnecessary relayouts observed in flutter/flutter#120921, but not all of them (more details in flutter/flutter#120921 (comment)) ## About attempt 3 More about [attempt 2 here](#40862). In this attempt 3 I'm replacing the `factory` with a top-level function.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
(this is attempt 2; details below)
Remove obsolete object caches and introduce a simpler way to manage native objects:
SynchronousSkiaObjectCache.native_memory.dartthat's smaller and simpler thanskia_object_cache.dart.UniqueRefa reference with a unique Dart object owner.CountedRefa ref-counted reference with multiple Dart object owners.FinalizationRegistry) as a back-up.FinalizationRegistry. All browsers support it now.SkParagraphcache that predates the introduction ofParagraph.dispose.CkParagraphin terms ofUniqueRef.CkImagein terms ofCountedRef; deleteSkiaObjectBox.This PR does not migrate all objects from the old
skia_object_cache.darttonative_memory.dart. That would be too big of a change. The migration can be done in multiple smaller PRs.This also removes a few unnecessary relayouts observed in flutter/flutter#120921, but not all of them (more details in flutter/flutter#120921 (comment))
About attempt 2
This is the second attempt to land this. The first attempt (#40617) was reverted (#40861).
The issue with the first attempt was in the expression
SkObjectFinalizationRegistry((UniqueRef<Object> uniq) {...}.toJS), which as of right now is not supported by dart2js. This second iteration usesjs_util.callConstructorto invoke the constructor. I'm not sure why it didn't trigger in our tests, but I suspect the difference is in how dart2js handles code between pre-rewritten SDK and post-rewritten SDK.