Skip to content
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

Avoid reloading font collection for spawned engines with compatible asset managers #50897

Merged
merged 5 commits into from
Feb 24, 2024

Conversation

dnfield
Copy link
Contributor

@dnfield dnfield commented Feb 23, 2024

@jason-simmons @jiahaog fyi

I need to figure out a test for this still but it seems to work. Hot restart is kind of a mess though, because Engine::Restart nulls out the asset manager it ends up reloading the font collection for every engine after a restart. But we separately need to fix hot restart, it's not very usable on the example app

Fixes flutter/flutter#143701

@jiahaog
Copy link
Member

jiahaog commented Feb 23, 2024

Nice, just tested this (two engines) and it seems to solve the issue:

pprof -top  /tmp/heap_profile-latest/*.gz | grep createTypeface
# Before
0     0%   100%     3.15MB 11.29%  flutter::AssetManagerFontStyleSet::createTypeface(int)

# After
0     0%   100%     1.57MB  6.04%  flutter::AssetManagerFontStyleSet::createTypeface(int)

@dnfield dnfield marked this pull request as ready for review February 23, 2024 05:17
Copy link
Member

@jiahaog jiahaog left a comment

Choose a reason for hiding this comment

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

Looks great, but I'm not so familiar with the code and perhaps Jason should review this too.

@@ -81,6 +93,10 @@ class AssetResolver {
return {};
};

virtual bool operator==(const AssetResolver& other) const = 0;

bool operator!=(const AssetResolver& other) { return !operator==(other); }
Copy link
Member

Choose a reason for hiding this comment

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

nit: declare this method as const

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

@@ -174,7 +175,8 @@ fml::WeakPtr<ImageGeneratorRegistry> Engine::GetImageGeneratorRegistry() {

bool Engine::UpdateAssetManager(
const std::shared_ptr<AssetManager>& new_asset_manager) {
if (asset_manager_ == new_asset_manager) {
if ((asset_manager_ && new_asset_manager) &&
Copy link
Member

Choose a reason for hiding this comment

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

nit: the parentheses around (asset_manager_ && new_asset_manager) are not needed

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

@dnfield dnfield added the autosubmit Merge PR when tree becomes green via auto submit App label Feb 23, 2024
@auto-submit auto-submit bot removed the autosubmit Merge PR when tree becomes green via auto submit App label Feb 23, 2024
Copy link
Contributor

auto-submit bot commented Feb 23, 2024

auto label is removed for flutter/engine/50897, due to Pull request flutter/engine/50897 is not in a mergeable state.

@dnfield dnfield added the autosubmit Merge PR when tree becomes green via auto submit App label Feb 24, 2024
@auto-submit auto-submit bot merged commit 2d86d1b into flutter:main Feb 24, 2024
30 checks passed
@dnfield dnfield deleted the fonts branch February 24, 2024 14:59
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Feb 24, 2024
auto-submit bot pushed a commit to flutter/flutter that referenced this pull request Feb 24, 2024
…144090)

flutter/engine@247971f...b7f7a84

2024-02-24 skia-flutter-autoroll@skia.org Roll Fuchsia Linux SDK from sO-oG6KoeFlPK2WLR... to Oac3MZ5VgZ9g3Q3cL... (flutter/engine#50946)
2024-02-24 dnfield@google.com Avoid reloading font collection for spawned engines with compatible asset managers (flutter/engine#50897)

Also rolling transitive DEPS:
  fuchsia/sdk/core/linux-amd64 from sO-oG6KoeFlP to Oac3MZ5VgZ9g

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 jimgraham@google.com,rmistry@google.com,zra@google.com 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
autosubmit Merge PR when tree becomes green via auto submit App platform-android
Projects
None yet
3 participants