-
Notifications
You must be signed in to change notification settings - Fork 28.6k
[Impeller] cache for text shadows. #166228
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Golden file changes have been found for this pull request. Click here to view and triage (e.g. because this is an intentional change). If you are still iterating on this change and are not ready to resolve the images on the Flutter Gold dashboard, consider marking this PR as a draft pull request above. You will still be able to view image results on the dashboard, commenting will be silenced, and the check will not try to resolve itself until marked ready for review. For more guidance, visit Writing a golden file test for Reviewers: Read the Tree Hygiene page and make sure this patch meets those guidelines before LGTMing. |
@@ -177,6 +177,12 @@ class RenderTargetAllocator { | |||
const std::shared_ptr<Texture>& existing_color_resolve_texture = nullptr, | |||
const std::shared_ptr<Texture>& existing_depth_stencil_texture = nullptr); | |||
|
|||
/// @brief Disable the cache until another call to enable. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This docstring talks about a cache but there is no description of anything as a cache in RenderTargetAllocator
. The details of RenderTargetCache
are creeping into its superclass. Can't we just put this into the render cache directly? When we call it we seem to know we have a RenderTargetCache (renderer.GetRenderTargetCache()->Enable();
)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It is leaky, that is true. That said, if there is no cache then there is no harm in calling enable/disable.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think the names RenderTargetAllocator::EnableCache
RenderTargetAllocator::DisableCache
make more sense since you aren't disabling the allocator.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Done
std::optional<Glyph> maybe_glyph = text_frame->AsSingleGlyph(); | ||
int64_t identifier = maybe_glyph.has_value() | ||
? maybe_glyph.value().index | ||
: reinterpret_cast<int64_t>(text_frame.get()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
question for @gaaclarke : is this safe/reasonable? The goal is only caching the same text frame. An alternative approach would be to have an ID system somewhere
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think so. Worst case scenario is that the text_frame gets copied and you get a cache miss. Since we have a std::shared_ptr to it I don't expect we'll copy it (but I wouldn't rule it out).
Doesn't the TextFrame have a font itself too? It's weird that we hash on the identifier which represents a font and have the font separately. Can the TextFrame be mutated?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah hashing the font is for the "single glyph" optimization for Icons, but its unnecessary for the general text frame case.
Golden file changes are available for triage from new commit, Click here to view. For more guidance, visit Writing a golden file test for Reviewers: Read the Tree Hygiene page and make sure this patch meets those guidelines before LGTMing. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
lgtm! thanks
Roll Flutter from a0b1b3253416 to 02f13c37841f (37 revisions) flutter/flutter@a0b1b32...02f13c3 2025-04-03 [email protected] Roll Packages from 07496eb to 4a36dc6 (3 revisions) (flutter/flutter#166542) 2025-04-03 [email protected] Roll Skia from b67e53719e78 to 5f65df75febd (2 revisions) (flutter/flutter#166538) 2025-04-03 [email protected] Update docs to debug the Android embedder (flutter/flutter#166170) 2025-04-03 [email protected] Roll Dart SDK from 72562ca93bb5 to d174ec16c3ea (1 revision) (flutter/flutter#166525) 2025-04-03 [email protected] [macOS] Implement merged UI and platform thread (flutter/flutter#162883) 2025-04-03 [email protected] Roll Skia from f91412f5d89d to b67e53719e78 (1 revision) (flutter/flutter#166527) 2025-04-03 [email protected] Roll Packages from 125c117 to 07496eb (31 revisions) (flutter/flutter#166457) 2025-04-03 [email protected] Roll Skia from 2be12bc2668b to f91412f5d89d (2 revisions) (flutter/flutter#166517) 2025-04-03 [email protected] Roll Dart SDK from 2a1a13cc3a91 to 72562ca93bb5 (2 revisions) (flutter/flutter#166514) 2025-04-03 [email protected] [native_assets] Roll dependencies (flutter/flutter#166282) 2025-04-03 [email protected] Fix read only TextField focus traversal on macOS (flutter/flutter#166056) 2025-04-03 [email protected] Roll Skia from c106d7831592 to 2be12bc2668b (1 revision) (flutter/flutter#166509) 2025-04-03 [email protected] Roll Fuchsia Linux SDK from v7PGvypiiWLO8PbsZ... to vYisSsIgqw0mqFRVJ... (flutter/flutter#166508) 2025-04-03 [email protected] Roll Dart SDK from b8b4076b1237 to 2a1a13cc3a91 (1 revision) (flutter/flutter#166504) 2025-04-03 [email protected] Roll Skia from 75a0ec473181 to c106d7831592 (1 revision) (flutter/flutter#166499) 2025-04-03 [email protected] Migrate to Theme.brightnessOf method (flutter/flutter#163950) 2025-04-03 [email protected] Fix: Range slider show overlay for both thumbs on hovering one (flutter/flutter#165393) 2025-04-03 [email protected] Deprecate ExpansionTileController (flutter/flutter#166368) 2025-04-03 [email protected] Add styling parameters in `PopupMenuDivider` (flutter/flutter#164790) 2025-04-03 [email protected] Fix ISSUE_TEMPLATE Ordering: `10 < 9`, but `10 > 09` (flutter/flutter#166455) 2025-04-03 [email protected] Skip flaking scheduler test (flutter/flutter#166471) 2025-04-02 [email protected] Roll pub packages (flutter/flutter#166043) 2025-04-02 [email protected] [a11y] add SemanticsValidationResult (flutter/flutter#165935) 2025-04-02 [email protected] Remove unnecessary cache busting mechanism in hot restart (flutter/flutter#166295) 2025-04-02 [email protected] Roll Skia from 52cbb917fffd to 75a0ec473181 (21 revisions) (flutter/flutter#166484) 2025-04-02 [email protected] Started pixel aligning hairlines (flutter/flutter#166351) 2025-04-02 [email protected] Adds semantics role and adjust semantics for navigation bar (flutter/flutter#162467) 2025-04-02 [email protected] Reland "[skwasm] Dynamic Threading" (flutter/flutter#166454) 2025-04-02 [email protected] [dart:ui] Add `Path.addRSuperellipse` (flutter/flutter#166045) 2025-04-02 [email protected] Fix: Hero animation for page transition (flutter/flutter#164469) 2025-04-02 [email protected] Fix: DelegateTransition for cupertino sheet route (flutter/flutter#164675) 2025-04-02 [email protected] Roll Fuchsia Test Scripts from AEdsljKmUiPk92Wvv... to FZdRtNwH7jmADecj6... (flutter/flutter#166383) 2025-04-02 [email protected] [Impeller] cache for text shadows. (flutter/flutter#166228) 2025-04-02 [email protected] Convert `AppPluginLoaderPlugin` to Kotlin, and add `NativePluginLoaderReflectionBridge` to expose it in Kotlin (flutter/flutter#166027) 2025-04-02 [email protected] Roll Dart SDK from 4e1f02bc704f to b8b4076b1237 (7 revisions) (flutter/flutter#166474) 2025-04-02 [email protected] Update Roadmap (flutter/flutter#166332) 2025-04-02 [email protected] Update `CODEOWNERS` (flutter/flutter#166444) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/flutter-packages Please CC [email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Packages: https://github.com/flutter/flutter/issues/new/choose ...
Roll Flutter from a0b1b3253416 to 02f13c37841f (37 revisions) flutter/flutter@a0b1b32...02f13c3 2025-04-03 [email protected] Roll Packages from d10d5af to 95f8e65 (3 revisions) (flutter/flutter#166542) 2025-04-03 [email protected] Roll Skia from b67e53719e78 to 5f65df75febd (2 revisions) (flutter/flutter#166538) 2025-04-03 [email protected] Update docs to debug the Android embedder (flutter/flutter#166170) 2025-04-03 [email protected] Roll Dart SDK from 72562ca93bb5 to d174ec16c3ea (1 revision) (flutter/flutter#166525) 2025-04-03 [email protected] [macOS] Implement merged UI and platform thread (flutter/flutter#162883) 2025-04-03 [email protected] Roll Skia from f91412f5d89d to b67e53719e78 (1 revision) (flutter/flutter#166527) 2025-04-03 [email protected] Roll Packages from 0d5d57b to d10d5af (31 revisions) (flutter/flutter#166457) 2025-04-03 [email protected] Roll Skia from 2be12bc2668b to f91412f5d89d (2 revisions) (flutter/flutter#166517) 2025-04-03 [email protected] Roll Dart SDK from 2a1a13cc3a91 to 72562ca93bb5 (2 revisions) (flutter/flutter#166514) 2025-04-03 [email protected] [native_assets] Roll dependencies (flutter/flutter#166282) 2025-04-03 [email protected] Fix read only TextField focus traversal on macOS (flutter/flutter#166056) 2025-04-03 [email protected] Roll Skia from c106d7831592 to 2be12bc2668b (1 revision) (flutter/flutter#166509) 2025-04-03 [email protected] Roll Fuchsia Linux SDK from v7PGvypiiWLO8PbsZ... to vYisSsIgqw0mqFRVJ... (flutter/flutter#166508) 2025-04-03 [email protected] Roll Dart SDK from b8b4076b1237 to 2a1a13cc3a91 (1 revision) (flutter/flutter#166504) 2025-04-03 [email protected] Roll Skia from 75a0ec473181 to c106d7831592 (1 revision) (flutter/flutter#166499) 2025-04-03 [email protected] Migrate to Theme.brightnessOf method (flutter/flutter#163950) 2025-04-03 [email protected] Fix: Range slider show overlay for both thumbs on hovering one (flutter/flutter#165393) 2025-04-03 [email protected] Deprecate ExpansionTileController (flutter/flutter#166368) 2025-04-03 [email protected] Add styling parameters in `PopupMenuDivider` (flutter/flutter#164790) 2025-04-03 [email protected] Fix ISSUE_TEMPLATE Ordering: `10 < 9`, but `10 > 09` (flutter/flutter#166455) 2025-04-03 [email protected] Skip flaking scheduler test (flutter/flutter#166471) 2025-04-02 [email protected] Roll pub packages (flutter/flutter#166043) 2025-04-02 [email protected] [a11y] add SemanticsValidationResult (flutter/flutter#165935) 2025-04-02 [email protected] Remove unnecessary cache busting mechanism in hot restart (flutter/flutter#166295) 2025-04-02 [email protected] Roll Skia from 52cbb917fffd to 75a0ec473181 (21 revisions) (flutter/flutter#166484) 2025-04-02 [email protected] Started pixel aligning hairlines (flutter/flutter#166351) 2025-04-02 [email protected] Adds semantics role and adjust semantics for navigation bar (flutter/flutter#162467) 2025-04-02 [email protected] Reland "[skwasm] Dynamic Threading" (flutter/flutter#166454) 2025-04-02 [email protected] [dart:ui] Add `Path.addRSuperellipse` (flutter/flutter#166045) 2025-04-02 [email protected] Fix: Hero animation for page transition (flutter/flutter#164469) 2025-04-02 [email protected] Fix: DelegateTransition for cupertino sheet route (flutter/flutter#164675) 2025-04-02 [email protected] Roll Fuchsia Test Scripts from AEdsljKmUiPk92Wvv... to FZdRtNwH7jmADecj6... (flutter/flutter#166383) 2025-04-02 [email protected] [Impeller] cache for text shadows. (flutter/flutter#166228) 2025-04-02 [email protected] Convert `AppPluginLoaderPlugin` to Kotlin, and add `NativePluginLoaderReflectionBridge` to expose it in Kotlin (flutter/flutter#166027) 2025-04-02 [email protected] Roll Dart SDK from 4e1f02bc704f to b8b4076b1237 (7 revisions) (flutter/flutter#166474) 2025-04-02 [email protected] Update Roadmap (flutter/flutter#166332) 2025-04-02 [email protected] Update `CODEOWNERS` (flutter/flutter#166444) If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/flutter-packages Please CC [email protected],[email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Packages: https://github.com/flutter/flutter/issues/new/choose ...
Fixes #164303
Fixes #165116
When rendering a text shadow, cache the resulting snapshot for at least one frame. Only attempts to content-aware hash for single glyphs (Icons). in other cases the exact layout may be different enough that its not worth trying to cache.