Improve mustachio deduplication strategy #3906
Merged
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.
Currently mustachio has a very rudimentary deduplication strategy that leaves a fair number of unused partial render functions dangling in the generated code. This is because we delete a partial renderer function without taking great care about what partial functions it might have rendered, and which maybe are no longer rendered. This occurs particularly with deduplicated renderer functions that then don't become used any more.
This change introduces a renderer cache and a more formal 'reference-counting' strategy to know if a renderer becomes unused. Tracking all renderer functions (and the compilers that compiled them, and the used context stacks determined by compilers) in one place makes it possible to have a more accurate understanding of what renderer functions become unused through the deduplication process.
The new strategy is documented pretty well in this change, in the README.
Contribution guidelines:
dart format
.Note that many Dart repos have a weekly cadence for reviewing PRs - please allow for some latency before initial review feedback.