-
Notifications
You must be signed in to change notification settings - Fork 6k
[Impeller] cache even more text frame data to skip lookups. #56798
[Impeller] cache even more text frame data to skip lookups. #56798
Conversation
| private: | ||
| const Type type_; | ||
| std::shared_ptr<Texture> texture_; | ||
| size_t generation_ = 0; |
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.
Do you think we should use std::optional here to signify atlases that have not had their generations set? Or maybe put the generation in the constructor?
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.
an atlas always have a generation though.
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.
an atlas always have a generation though.
It does, but an atlas that has been created but hasn't had SetAtlasGeneration called has an incorrect, but valid, generation. I'm suggesting that we make having an invalid generation explicit, or removing the possibility of having an invalid generation by lifting it to the constructor.
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
| // The second time the glyph is rendered, the bounds are correcly known. | ||
| EXPECT_TRUE(frame->IsFrameComplete()); | ||
| EXPECT_FALSE(frame->GetFrameBounds(0).is_placeholder); | ||
| if (GetBackend() == PlaygroundBackend::kOpenGLES) { |
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.
How is this an opengles only thing?
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.
requires blitframebuffer - and not just an emulated blit framebuffer, because R8 isn't color renderable
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 guess since you've fixed blit framebuffer for certain gles versions I can add a check here based on capabilities. Will do that in a follow up.
gaaclarke
left a comment
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!
…159523) flutter/engine@bd165dc...da71729 2024-11-27 [email protected] Roll Dart SDK from 72b594775c83 to 0740ded7b9bf (1 revision) (flutter/engine#56826) 2024-11-27 [email protected] Roll Fuchsia Linux SDK from 50xtjbMWWrqay_7m_... to u0agumUB4Ag6cTiKk... (flutter/engine#56823) 2024-11-27 [email protected] [DisplayList] Delete (publicly) unused DlColorColorSource (flutter/engine#56825) 2024-11-26 [email protected] [engine] reland: more consistently flush message loops tasks (flutter/engine#56815) 2024-11-26 [email protected] [Impeller] cache even more text frame data to skip lookups. (flutter/engine#56798) 2024-11-26 [email protected] [DisplayList] migrate DlColorFilter objects to new source layout (flutter/engine#56785) 2024-11-26 [email protected] Roll Dart SDK from ca02d403f1a8 to 72b594775c83 (1 revision) (flutter/engine#56819) Also rolling transitive DEPS: fuchsia/sdk/core/linux-amd64 from 50xtjbMWWrqa to u0agumUB4Ag6 If this roll has caused a breakage, revert this CL and stop the roller using the controls here: https://autoroll.skia.org/r/flutter-engine-flutter-autoroll Please CC [email protected] on the revert to ensure that a human is aware of the problem. To file a bug in Flutter: https://github.com/flutter/flutter/issues/new/choose To report a problem with the AutoRoller itself, please file a bug: https://issues.skia.org/issues/new?component=1389291&template=1850622 Documentation for the AutoRoller is here: https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
|
reason for revert: user reported error |
|
Time to revert pull request flutter/engine/56798 has elapsed. |
…engine#56798) Every text frame must inform the glyph atlas about the glyphs + scale it contains. When this happens, the glyph atlas will populate the glyph and then tell teh text frame about the location in the atlas, so that the text contents shader can sample it correctly. Once this has been done once for a given text frame + scale + offset, we can actually just keep reusing the same data provided 1) the atlas itself hasn't changed and 2) the scale/offset/properties are the same. This constitutes a nice CPU usage reduction in places where there is a lot of text that isn't being invalidated, like scrolling on the flutter gallery.
Every text frame must inform the glyph atlas about the glyphs + scale it contains. When this happens, the glyph atlas will populate the glyph and then tell teh text frame about the location in the atlas, so that the text contents shader can sample it correctly.
Once this has been done once for a given text frame + scale + offset, we can actually just keep reusing the same data provided 1) the atlas itself hasn't changed and 2) the scale/offset/properties are the same.
This constitutes a nice CPU usage reduction in places where there is a lot of text that isn't being invalidated, like scrolling on the flutter gallery.