Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Conversation

@jonahwilliams
Copy link
Contributor

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.

private:
const Type type_;
std::shared_ptr<Texture> texture_;
size_t generation_ = 0;
Copy link
Member

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?

Copy link
Contributor Author

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.

Copy link
Member

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.

Copy link
Contributor Author

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) {
Copy link
Member

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?

Copy link
Contributor Author

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

Copy link
Contributor Author

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.

Copy link
Member

@gaaclarke gaaclarke left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm!

@jonahwilliams jonahwilliams added the autosubmit Merge PR when tree becomes green via auto submit App label Nov 26, 2024
@auto-submit auto-submit bot merged commit 65c8c6e into flutter:main Nov 26, 2024
31 checks passed
github-merge-queue bot pushed a commit to flutter/flutter that referenced this pull request Nov 27, 2024
…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
@jonahwilliams
Copy link
Contributor Author

reason for revert: user reported error

@jonahwilliams jonahwilliams added the revert Label used to revert changes in a closed and merged pull request. label Nov 29, 2024
@auto-submit
Copy link
Contributor

auto-submit bot commented Nov 29, 2024

Time to revert pull request flutter/engine/56798 has elapsed.
You need to open the revert manually and process as a regular pull request.

@auto-submit auto-submit bot removed the revert Label used to revert changes in a closed and merged pull request. label Nov 29, 2024
jonahwilliams pushed a commit that referenced this pull request Nov 29, 2024
nick9822 pushed a commit to nick9822/flutter that referenced this pull request Dec 18, 2024
…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.
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

autosubmit Merge PR when tree becomes green via auto submit App e: impeller

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants