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

Commit b453d3c

Browse files
libtxt: fix reference counting of SkFontStyleSets held by font asset providers (#9561)
1 parent fa7627d commit b453d3c

File tree

4 files changed

+15
-16
lines changed

4 files changed

+15
-16
lines changed

lib/ui/text/asset_manager_font_provider.cc

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ SkFontStyleSet* AssetManagerFontProvider::MatchFamily(
4444
if (found == registered_families_.end()) {
4545
return nullptr;
4646
}
47-
return SkRef(&found->second);
47+
sk_sp<SkFontStyleSet> font_style_set = found->second;
48+
return font_style_set.release();
4849
}
4950

5051
void AssetManagerFontProvider::RegisterAsset(std::string family_name,
@@ -54,14 +55,12 @@ void AssetManagerFontProvider::RegisterAsset(std::string family_name,
5455

5556
if (family_it == registered_families_.end()) {
5657
family_names_.push_back(family_name);
57-
family_it = registered_families_
58-
.emplace(std::piecewise_construct,
59-
std::forward_as_tuple(canonical_name),
60-
std::forward_as_tuple(asset_manager_))
61-
.first;
58+
auto value = std::make_pair(
59+
canonical_name, sk_make_sp<AssetManagerFontStyleSet>(asset_manager_));
60+
family_it = registered_families_.emplace(value).first;
6261
}
6362

64-
family_it->second.registerAsset(asset);
63+
family_it->second->registerAsset(asset);
6564
}
6665

6766
AssetManagerFontStyleSet::AssetManagerFontStyleSet(

lib/ui/text/asset_manager_font_provider.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ class AssetManagerFontProvider : public txt::FontAssetProvider {
7575

7676
private:
7777
std::shared_ptr<AssetManager> asset_manager_;
78-
std::unordered_map<std::string, AssetManagerFontStyleSet>
78+
std::unordered_map<std::string, sk_sp<AssetManagerFontStyleSet>>
7979
registered_families_;
8080
std::vector<std::string> family_names_;
8181

third_party/txt/src/txt/typeface_font_asset_provider.cc

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@ SkFontStyleSet* TypefaceFontAssetProvider::MatchFamily(
4343
if (found == registered_families_.end()) {
4444
return nullptr;
4545
}
46-
return SkRef(&found->second);
46+
sk_sp<TypefaceFontStyleSet> font_style_set = found->second;
47+
return font_style_set.release();
4748
}
4849

4950
void TypefaceFontAssetProvider::RegisterTypeface(sk_sp<SkTypeface> typeface) {
@@ -69,13 +70,11 @@ void TypefaceFontAssetProvider::RegisterTypeface(
6970
auto family_it = registered_families_.find(canonical_name);
7071
if (family_it == registered_families_.end()) {
7172
family_names_.push_back(family_name_alias);
72-
family_it = registered_families_
73-
.emplace(std::piecewise_construct,
74-
std::forward_as_tuple(canonical_name),
75-
std::forward_as_tuple())
76-
.first;
73+
auto value =
74+
std::make_pair(canonical_name, sk_make_sp<TypefaceFontStyleSet>());
75+
family_it = registered_families_.emplace(value).first;
7776
}
78-
family_it->second.registerTypeface(std::move(typeface));
77+
family_it->second->registerTypeface(std::move(typeface));
7978
}
8079

8180
TypefaceFontStyleSet::TypefaceFontStyleSet() = default;

third_party/txt/src/txt/typeface_font_asset_provider.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,8 @@ class TypefaceFontAssetProvider : public FontAssetProvider {
7373
SkFontStyleSet* MatchFamily(const std::string& family_name) override;
7474

7575
private:
76-
std::unordered_map<std::string, TypefaceFontStyleSet> registered_families_;
76+
std::unordered_map<std::string, sk_sp<TypefaceFontStyleSet>>
77+
registered_families_;
7778
std::vector<std::string> family_names_;
7879

7980
FML_DISALLOW_COPY_AND_ASSIGN(TypefaceFontAssetProvider);

0 commit comments

Comments
 (0)