File bad-font-gc0000.patch of Package nodejs-electron
Revert the following commit:
commit cc6c0b2a9e1dbc96f3ebed713dc71960a29dc4f1
Author: Ian Kilpatrick <ikilpatrick@chromium.org>
Date: Tue Mar 5 20:27:13 2024 +0000
Reland "[gc] Make FontFamily immutable."
This reverts commit 748ed11510ec5bb09cc8b92f67f1f62964f023fa.
Reason for revert: Previous patch which caused MSAN issue was reapplied.
Original change's description:
> Revert "[gc] Make FontFamily immutable."
>
> This reverts commit ca3d3085d8b01fc74623d639c615fc57842cd26d.
>
> Reason for revert: crrev.com/c/5328767 is the reason for failure on some tests on MSAN. Please see crbug.com/327969288 for more details.
>
> Original change's description:
> > [gc] Make FontFamily immutable.
> >
> > Previously we'd build up font-family lists front to back, but would
> > need to mutate them to do so. Instead just build them backwards.
> >
> > This removes a bunch of problematic APIs (like AppendFamily - which
> > doesn't append), and simplifies the code.
> >
> > This will help avoid atomic write barriers once converted to oilpan.
> >
> > Bug: 41490008
> > Change-Id: Icfcec2d0a1716585cf42985616c02b42b6647943
> > Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5322929
> > Commit-Queue: Ian Kilpatrick <ikilpatrick@chromium.org>
> > Reviewed-by: Dominik Röttsches <drott@chromium.org>
> > Cr-Commit-Position: refs/heads/main@{#1267168}
>
> Bug: 41490008, 327969288
> Change-Id: Ic69a5707d00cc98b97dcae3f4b8207b452ce5cbd
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5333950
> Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
> Commit-Queue: Taiyo Mizuhashi <taiyo@chromium.org>
> Owners-Override: Taiyo Mizuhashi <taiyo@chromium.org>
> Cr-Commit-Position: refs/heads/main@{#1267674}
Bug: 41490008, 327969288
Change-Id: If1d395e324b0be15488ef5410e9bcdb219bb19c6
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5344844
Commit-Queue: Ian Kilpatrick <ikilpatrick@chromium.org>
Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com>
Cr-Commit-Position: refs/heads/main@{#1268654}
--- a/third_party/blink/renderer/core/css/css_font_face.cc
+++ b/third_party/blink/renderer/core/css/css_font_face.cc
@@ -216,8 +216,9 @@ bool CSSFontFace::MaybeLoadFont(const Fo
void CSSFontFace::Load() {
FontDescription font_description;
- font_description.SetFamily(
- FontFamily(font_face_->family(), FontFamily::Type::kFamilyName));
+ FontFamily font_family;
+ font_family.SetFamily(font_face_->family(), FontFamily::Type::kFamilyName);
+ font_description.SetFamily(font_family);
Load(font_description);
}
--- a/third_party/blink/renderer/core/css/font_face_set_document.cc
+++ b/third_party/blink/renderer/core/css/font_face_set_document.cc
@@ -195,10 +195,13 @@ bool FontFaceSetDocument::ResolveFontSty
ComputedStyleBuilder builder =
GetDocument()->GetStyleResolver().CreateComputedStyleBuilder();
- FontDescription default_font_description;
- default_font_description.SetFamily(FontFamily(
+ FontFamily font_family;
+ font_family.SetFamily(
FontFaceSet::DefaultFontFamily(),
- FontFamily::InferredTypeFor(FontFaceSet::DefaultFontFamily())));
+ FontFamily::InferredTypeFor(FontFaceSet::DefaultFontFamily()));
+
+ FontDescription default_font_description;
+ default_font_description.SetFamily(font_family);
default_font_description.SetSpecifiedSize(FontFaceSet::kDefaultFontSize);
default_font_description.SetComputedSize(FontFaceSet::kDefaultFontSize);
--- a/third_party/blink/renderer/core/css/font_face_set_worker.cc
+++ b/third_party/blink/renderer/core/css/font_face_set_worker.cc
@@ -84,10 +84,13 @@ bool FontFaceSetWorker::ResolveFontStyle
return false;
}
- FontDescription default_font_description;
- default_font_description.SetFamily(FontFamily(
+ FontFamily font_family;
+ font_family.SetFamily(
FontFaceSet::DefaultFontFamily(),
- FontFamily::InferredTypeFor(FontFaceSet::DefaultFontFamily())));
+ FontFamily::InferredTypeFor(FontFaceSet::DefaultFontFamily()));
+
+ FontDescription default_font_description;
+ default_font_description.SetFamily(font_family);
default_font_description.SetSpecifiedSize(FontFaceSet::kDefaultFontSize);
default_font_description.SetComputedSize(FontFaceSet::kDefaultFontSize);
--- a/third_party/blink/renderer/core/css/resolver/font_builder.cc
+++ b/third_party/blink/renderer/core/css/resolver/font_builder.cc
@@ -54,9 +54,11 @@ void FontBuilder::DidChangeWritingMode()
}
FontFamily FontBuilder::StandardFontFamily() const {
+ FontFamily family;
const AtomicString& standard_font_family = StandardFontFamilyName();
- return FontFamily(standard_font_family,
- FontFamily::InferredTypeFor(standard_font_family));
+ family.SetFamily(standard_font_family,
+ FontFamily::InferredTypeFor(standard_font_family));
+ return family;
}
AtomicString FontBuilder::StandardFontFamilyName() const {
--- a/third_party/blink/renderer/core/css/resolver/style_builder_converter.cc
+++ b/third_party/blink/renderer/core/css/resolver/style_builder_converter.cc
@@ -379,8 +379,8 @@ FontDescription::FamilyDescription Style
if (const auto* system_font =
DynamicTo<cssvalue::CSSPendingSystemFontValue>(value)) {
- desc.family = FontFamily(system_font->ResolveFontFamily(),
- FontFamily::Type::kFamilyName);
+ desc.family.SetFamily(system_font->ResolveFontFamily(),
+ FontFamily::Type::kFamilyName);
return desc;
}
@@ -410,8 +410,10 @@ FontDescription::FamilyDescription Style
// Take the previous value and wrap it in a `SharedFontFamily` adding to
// the linked list.
if (has_value) {
- next =
- SharedFontFamily::Create(family_name, family_type, std::move(next));
+ scoped_refptr<SharedFontFamily> shared = SharedFontFamily::Create();
+ shared->SetFamily(family_name, family_type);
+ shared->AppendFamily(next);
+ next = shared;
}
family_name = next_family_name;
family_type = is_generic ? FontFamily::Type::kGenericFamily
@@ -442,7 +444,8 @@ FontDescription::FamilyDescription Style
}
#endif
- desc.family = FontFamily(family_name, family_type, std::move(next));
+ desc.family.SetFamily(family_name, family_type);
+ desc.family.AppendFamily(next);
return desc;
}
--- a/third_party/blink/renderer/core/html/canvas/canvas_font_cache.cc
+++ b/third_party/blink/renderer/core/html/canvas/canvas_font_cache.cc
@@ -29,9 +29,11 @@ const int defaultFontSize = 10;
const ComputedStyle* CreateDefaultFontStyle(const Document& document) {
const AtomicString& default_font_family = font_family_names::kSansSerif;
+ FontFamily font_family;
+ font_family.SetFamily(default_font_family,
+ FontFamily::InferredTypeFor(default_font_family));
FontDescription default_font_description;
- default_font_description.SetFamily(FontFamily(
- default_font_family, FontFamily::InferredTypeFor(default_font_family)));
+ default_font_description.SetFamily(font_family);
default_font_description.SetSpecifiedSize(defaultFontSize);
default_font_description.SetComputedSize(defaultFontSize);
ComputedStyleBuilder builder =
--- a/third_party/blink/renderer/core/page/drag_image.cc
+++ b/third_party/blink/renderer/core/page/drag_image.cc
@@ -127,9 +127,11 @@ static Font DeriveDragLabelFont(int size
const AtomicString& family =
LayoutThemeFontProvider::SystemFontFamily(CSSValueID::kNone);
+ FontFamily font_family;
+ font_family.SetFamily(family, FontFamily::InferredTypeFor(family));
+
FontDescription description;
- description.SetFamily(
- FontFamily(family, FontFamily::InferredTypeFor(family)));
+ description.SetFamily(font_family);
description.SetWeight(font_weight);
description.SetSpecifiedSize(size);
description.SetComputedSize(size);
--- a/third_party/blink/renderer/core/paint/embedded_object_painter.cc
+++ b/third_party/blink/renderer/core/paint/embedded_object_painter.cc
@@ -32,9 +32,11 @@ static Font ReplacementTextFont(const Do
const float size = LayoutThemeFontProvider::SystemFontSize(
CSSValueID::kWebkitSmallControl, document);
+ FontFamily font_family;
+ font_family.SetFamily(family, FontFamily::InferredTypeFor(family));
+
FontDescription font_description;
- font_description.SetFamily(
- FontFamily(family, FontFamily::InferredTypeFor(family)));
+ font_description.SetFamily(font_family);
font_description.SetWeight(kBoldWeightValue);
font_description.SetSpecifiedSize(size);
font_description.SetComputedSize(size);
--- a/third_party/blink/renderer/platform/exported/web_font_description.cc
+++ b/third_party/blink/renderer/platform/exported/web_font_description.cc
@@ -49,10 +49,13 @@ WebFontDescription::WebFontDescription(c
}
WebFontDescription::operator FontDescription() const {
+ FontFamily font_family;
+ font_family.SetFamily(family, family_is_generic
+ ? FontFamily::Type::kGenericFamily
+ : FontFamily::Type::kFamilyName);
+
FontDescription desc;
- desc.SetFamily(FontFamily(family, family_is_generic
- ? FontFamily::Type::kGenericFamily
- : FontFamily::Type::kFamilyName));
+ desc.SetFamily(font_family);
desc.SetGenericFamily(
static_cast<FontDescription::GenericFamilyType>(generic_family));
desc.SetSpecifiedSize(size);
--- a/third_party/blink/renderer/platform/fonts/font_description.h
+++ b/third_party/blink/renderer/platform/fonts/font_description.h
@@ -195,6 +195,7 @@ class PLATFORM_EXPORT FontDescription {
FamilyDescription GetFamilyDescription() const {
return FamilyDescription(GenericFamily(), Family());
}
+ FontFamily& FirstFamily() { return family_list_; }
const FontFamily& FirstFamily() const { return family_list_; }
Size GetSize() const {
return Size(KeywordSize(), SpecifiedSize(), IsAbsoluteSize());
@@ -450,6 +451,10 @@ class PLATFORM_EXPORT FontDescription {
return fields_.subpixel_ascent_descent_;
}
+ void SetHashCategory(HashCategory category) {
+ fields_.hash_category_ = category;
+ }
+
HashCategory GetHashCategory() const {
return static_cast<HashCategory>(fields_.hash_category_);
}
--- a/third_party/blink/renderer/platform/fonts/font_fallback_list.cc
+++ b/third_party/blink/renderer/platform/fonts/font_fallback_list.cc
@@ -178,8 +178,9 @@ const FontData* FontFallbackList::GetFon
if (font_selector_) {
// Try the user's preferred standard font.
- FontFamily font_family(font_family_names::kWebkitStandard,
- FontFamily::Type::kGenericFamily);
+ FontFamily font_family;
+ font_family.SetFamily(font_family_names::kWebkitStandard,
+ FontFamily::Type::kGenericFamily);
if (const FontData* data =
font_selector_->GetFontData(font_description, font_family)) {
return data;
--- a/third_party/blink/renderer/platform/fonts/font_family.cc
+++ b/third_party/blink/renderer/platform/fonts/font_family.cc
@@ -49,6 +49,20 @@ bool operator==(const FontFamily& a, con
return true;
}
+wtf_size_t FontFamily::CountNames() const {
+ wtf_size_t count = 0;
+ for (const FontFamily* font_family = this; font_family;
+ font_family = font_family->Next())
+ ++count;
+ return count;
+}
+
+void FontFamily::AppendFamily(AtomicString family_name, Type family_type) {
+ scoped_refptr<SharedFontFamily> appended_family = SharedFontFamily::Create();
+ appended_family->SetFamily(family_name, family_type);
+ AppendFamily(appended_family);
+}
+
String FontFamily::ToString() const {
StringBuilder builder;
builder.Append(family_name_);
--- a/third_party/blink/renderer/platform/fonts/font_family.h
+++ b/third_party/blink/renderer/platform/fonts/font_family.h
@@ -39,18 +39,16 @@ class PLATFORM_EXPORT FontFamily {
DISALLOW_NEW();
public:
- // https://drafts.csswg.org/css-fonts/#font-family-prop
- enum class Type : uint8_t { kFamilyName, kGenericFamily };
-
- FontFamily(const AtomicString& family_name,
- Type family_type,
- scoped_refptr<SharedFontFamily> next = nullptr)
- : family_name_(family_name),
- next_(std::move(next)),
- family_type_(family_type) {}
FontFamily() = default;
~FontFamily();
+ // https://drafts.csswg.org/css-fonts/#font-family-prop
+ enum class Type : uint8_t { kFamilyName, kGenericFamily };
+
+ void SetFamily(const AtomicString& family_name, Type family_type) {
+ family_name_ = family_name;
+ family_type_ = family_type;
+ }
// Return this font family's name. Note that it is never quoted nor escaped.
// For web-exposed serialization, please rely instead on the functions
// ComputedStyleUtils::ValueForFontFamily(const FontFamily&) and
@@ -59,8 +57,13 @@ class PLATFORM_EXPORT FontFamily {
const AtomicString& FamilyName() const { return family_name_; }
bool FamilyIsGeneric() const { return family_type_ == Type::kGenericFamily; }
+ // Returns number of linked `FontFamily` including `this`, so return value is
+ // greater than or equal to 1. When `Next()` is `nullptr`, return value is 1.
+ wtf_size_t CountNames() const;
const FontFamily* Next() const;
+ void AppendFamily(scoped_refptr<SharedFontFamily>);
+ void AppendFamily(AtomicString family_name, Type family_type);
scoped_refptr<SharedFontFamily> ReleaseNext();
bool IsPrewarmed() const { return is_prewarmed_; }
@@ -93,19 +96,12 @@ class PLATFORM_EXPORT SharedFontFamily :
SharedFontFamily(const SharedFontFamily&) = delete;
SharedFontFamily& operator=(const SharedFontFamily&) = delete;
- static scoped_refptr<SharedFontFamily> Create(
- const AtomicString& family_name,
- Type family_type,
- scoped_refptr<SharedFontFamily> next = nullptr) {
- return base::AdoptRef(
- new SharedFontFamily(family_name, family_type, std::move(next)));
+ static scoped_refptr<SharedFontFamily> Create() {
+ return base::AdoptRef(new SharedFontFamily);
}
private:
- SharedFontFamily(const AtomicString& family_name,
- Type family_type,
- scoped_refptr<SharedFontFamily> next)
- : FontFamily(family_name, family_type, std::move(next)) {}
+ SharedFontFamily() = default;
};
PLATFORM_EXPORT bool operator==(const FontFamily&, const FontFamily&);
@@ -125,6 +121,10 @@ inline const FontFamily* FontFamily::Nex
return next_.get();
}
+inline void FontFamily::AppendFamily(scoped_refptr<SharedFontFamily> family) {
+ next_ = std::move(family);
+}
+
inline scoped_refptr<SharedFontFamily> FontFamily::ReleaseNext() {
return std::move(next_);
}
--- a/third_party/blink/renderer/platform/graphics/placeholder_image.cc
+++ b/third_party/blink/renderer/platform/graphics/placeholder_image.cc
@@ -85,18 +85,23 @@ void DrawCenteredIcon(cc::PaintCanvas* c
}
FontDescription CreatePlaceholderFontDescription(float scale_factor) {
- scoped_refptr<SharedFontFamily> arial = SharedFontFamily::Create(
- font_family_names::kArial, FontFamily::Type::kFamilyName);
- scoped_refptr<SharedFontFamily> helvetica = SharedFontFamily::Create(
- font_family_names::kHelvetica, FontFamily::Type::kFamilyName, arial);
- scoped_refptr<SharedFontFamily> helvetica_neue =
- SharedFontFamily::Create(font_family_names::kHelveticaNeue,
- FontFamily::Type::kFamilyName, helvetica);
- FontFamily roboto(font_family_names::kRoboto, FontFamily::Type::kFamilyName,
- helvetica_neue);
-
FontDescription description;
- description.SetFamily(roboto);
+ description.FirstFamily().SetFamily(font_family_names::kRoboto,
+ FontFamily::Type::kFamilyName);
+
+ scoped_refptr<SharedFontFamily> helvetica_neue = SharedFontFamily::Create();
+ helvetica_neue->SetFamily(font_family_names::kHelveticaNeue,
+ FontFamily::Type::kFamilyName);
+ scoped_refptr<SharedFontFamily> helvetica = SharedFontFamily::Create();
+ helvetica->SetFamily(font_family_names::kHelvetica,
+ FontFamily::Type::kFamilyName);
+ scoped_refptr<SharedFontFamily> arial = SharedFontFamily::Create();
+ arial->SetFamily(font_family_names::kArial, FontFamily::Type::kFamilyName);
+
+ helvetica->AppendFamily(std::move(arial));
+ helvetica_neue->AppendFamily(std::move(helvetica));
+ description.FirstFamily().AppendFamily(std::move(helvetica_neue));
+
description.SetGenericFamily(FontDescription::kSansSerifFamily);
description.SetComputedSize(scale_factor * kFontSize);
description.SetWeight(FontSelectionValue(500));
--- a/third_party/blink/renderer/platform/testing/font_test_helpers.cc
+++ b/third_party/blink/renderer/platform/testing/font_test_helpers.cc
@@ -127,9 +127,11 @@ Font CreateTestFont(const AtomicString&
size_t data_size,
float size,
const FontDescription::VariantLigatures* ligatures) {
+ FontFamily family;
+ family.SetFamily(family_name, FontFamily::Type::kFamilyName);
+
FontDescription font_description;
- font_description.SetFamily(
- FontFamily(family_name, FontFamily::Type::kFamilyName));
+ font_description.SetFamily(family);
font_description.SetSpecifiedSize(size);
font_description.SetComputedSize(size);
if (ligatures)
@@ -143,9 +145,11 @@ Font CreateTestFont(const AtomicString&
float size,
const FontDescription::VariantLigatures* ligatures,
void (*init_font_description)(FontDescription*)) {
+ FontFamily family;
+ family.SetFamily(family_name, FontFamily::Type::kFamilyName);
+
FontDescription font_description;
- font_description.SetFamily(
- FontFamily(family_name, FontFamily::Type::kFamilyName));
+ font_description.SetFamily(family);
font_description.SetSpecifiedSize(size);
font_description.SetComputedSize(size);
if (ligatures)