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

Make SkFontMgr subclasses flexible for sk_sp #40556

Merged
merged 1 commit into from Mar 23, 2023

Conversation

bungeman
Copy link
Contributor

@bungeman bungeman commented Mar 23, 2023

Skia is changing SkFontMgr and SkFontStyleSet methods to consistently return sk_sp<SkTypeface> and sk_sp<SkFontStyleSet> instead of SkTypeface* and SkFontStyleSet*. The pointers returned always needed to be SkSafeUnrefed but with sk_sp this ownership is now explicit.

Flutter subclasses both SkFontMgr and SkFontStyleSet and overrides affected methods. Normally Skia would roll out this change behind a build flag which would first be set in Flutter (to hold out the change), Skia then rolled into Flutter, then the build flag removed from Flutter (along with updating the subclasses). However, this is made quite difficult and slow because of the need to also be compatible with Flutter in other repositories at the same time. Instead, this change updates the subclasses to infer the correct return types in a way that will work both with and without the Skia change. After the Skia change is landed and rolled into Flutter the subclasses will be re-simplified to match the new method signatures.

[0] https://skia-review.googlesource.com/c/skia/+/659856

Skia is changing SkFontMgr and SkFontStyleSet methods to consistently
return sk_sp<SkTypeface> and sk_sp<SkFontStyleSet> instead of
SkTypeface* and SkFontStyleSet*. The pointers returned always needed to
be SkSafeUnref'ed but with sk_sp this ownership is now explicit.

Flutter subclasses both SkFontMgr and SkFontStyleSet and overrides
affected methods. Normally Skia would roll out this change behind a
build flag which would first be set in Flutter (to hold out the change),
Skia then rolled into Flutter, then the build flag removed from Flutter
(along with updating the subclasses). However, this is made quite
difficult and slow because of the need to also be compatible with
Flutter in other repositories at the same time. Instead, this change
updates the subclasses to infer the correct return types in a way that
will work both with and without the Skia change. After the Skia change
is landed and rolled into Flutter the subclasses will be re-simplified
to match the new method signatures.

[0] https://skia-review.googlesource.com/c/skia/+/659856
@flutter-dashboard
Copy link

It looks like this pull request may not have tests. Please make sure to add tests before merging. If you need an exemption to this rule, contact Hixie on the #hackers channel in Chat (don't just cc him here, he won't see it! He's on Discord!).

If you are not sure if you need tests, consider this rule of thumb: the purpose of a test is to make sure someone doesn't accidentally revert the fix. Ask yourself, is there anything in your PR that you feel it is important we not accidentally revert back to how it was before your fix?

Reviewers: Read the Tree Hygiene page and make sure this patch meets those guidelines before LGTMing.

@brianosman brianosman merged commit 334fbe7 into flutter:main Mar 23, 2023
36 checks passed
engine-flutter-autoroll added a commit to engine-flutter-autoroll/flutter that referenced this pull request Mar 23, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
2 participants