[Observation] Optimize the storage of registrar entries, provide KeyPath caching, and distinctness notification #78151
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 alters the macro code-generation for Observable types. The types now house a distinctness check by testing
shouldNotifyObservers
which by default emits only on new values for things that conform to equatable.Furthermore it removes the bottleneck of creating key paths by pre-caching them as cachedKeypath prefixed static members. This avoids the cache miss potential of KeyPaths and also avoids the cache lookup/lock acquisition (which dominate most of the traces of high frequency accessed properties for observable types).
Additionally some table bookkeeping was removed so that the registrar itself is now faster.