1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
|
Revert the following commit:
commit 886c849ee96e3026d28d7615cdd5af9628a2e5c8
Author: Ian Kilpatrick <ikilpatrick@chromium.org>
Date: Tue Feb 20 18:18:04 2024 +0000
[gc] Make UnicodeRangeSet gc'd.
There should be no user-visible behaviour change.
Bug: 41490008
Change-Id: I7f0003b7ff7c464d4ee36442bcff8c63da79b20c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5302778
Reviewed-by: Dominik Röttsches <drott@chromium.org>
Commit-Queue: Ian Kilpatrick <ikilpatrick@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1262789}
--- a/third_party/blink/renderer/core/css/css_font_face.cc
+++ b/third_party/blink/renderer/core/css/css_font_face.cc
@@ -291,7 +291,6 @@ bool CSSFontFace::UpdatePeriod() {
void CSSFontFace::Trace(Visitor* visitor) const {
visitor->Trace(segmented_font_faces_);
visitor->Trace(sources_);
- visitor->Trace(ranges_);
visitor->Trace(font_face_);
}
--- a/third_party/blink/renderer/core/css/css_font_face.h
+++ b/third_party/blink/renderer/core/css/css_font_face.h
@@ -47,8 +47,8 @@ class SimpleFontData;
class CORE_EXPORT CSSFontFace final : public GarbageCollected<CSSFontFace> {
public:
- CSSFontFace(FontFace* font_face, HeapVector<UnicodeRange>&& ranges)
- : ranges_(MakeGarbageCollected<UnicodeRangeSet>(std::move(ranges))),
+ CSSFontFace(FontFace* font_face, Vector<UnicodeRange>& ranges)
+ : ranges_(base::AdoptRef(new UnicodeRangeSet(ranges))),
font_face_(font_face) {
DCHECK(font_face_);
}
@@ -61,7 +61,7 @@ class CORE_EXPORT CSSFontFace final : pu
}
FontFace* GetFontFace() const { return font_face_.Get(); }
- const UnicodeRangeSet* Ranges() { return ranges_.Get(); }
+ scoped_refptr<UnicodeRangeSet> Ranges() { return ranges_; }
void AddSegmentedFontFace(CSSSegmentedFontFace*);
void RemoveSegmentedFontFace(CSSSegmentedFontFace*);
@@ -98,9 +98,9 @@ class CORE_EXPORT CSSFontFace final : pu
private:
void SetLoadStatus(FontFace::LoadStatusType);
+ scoped_refptr<UnicodeRangeSet> ranges_;
HeapHashSet<Member<CSSSegmentedFontFace>> segmented_font_faces_;
HeapDeque<Member<CSSFontFaceSource>> sources_;
- Member<const UnicodeRangeSet> ranges_;
Member<FontFace> font_face_;
};
--- a/third_party/blink/renderer/core/css/font_face.cc
+++ b/third_party/blink/renderer/core/css/font_face.cc
@@ -90,7 +90,7 @@ const CSSValue* ParseCSSValue(const Exec
CSSFontFace* CreateCSSFontFace(FontFace* font_face,
const CSSValue* unicode_range) {
- HeapVector<UnicodeRange> ranges;
+ Vector<UnicodeRange> ranges;
if (const auto* range_list = To<CSSValueList>(unicode_range)) {
unsigned num_ranges = range_list->length();
for (unsigned i = 0; i < num_ranges; i++) {
@@ -100,7 +100,7 @@ CSSFontFace* CreateCSSFontFace(FontFace*
}
}
- return MakeGarbageCollected<CSSFontFace>(font_face, std::move(ranges));
+ return MakeGarbageCollected<CSSFontFace>(font_face, ranges);
}
const CSSValue* ConvertFontMetricOverrideValue(const CSSValue* parsed_value) {
--- a/third_party/blink/renderer/platform/fonts/font_data_for_range_set.h
+++ b/third_party/blink/renderer/platform/fonts/font_data_for_range_set.h
@@ -39,18 +39,16 @@ class SimpleFontData;
class PLATFORM_EXPORT FontDataForRangeSet
: public GarbageCollected<FontDataForRangeSet> {
public:
- explicit FontDataForRangeSet(const SimpleFontData* font_data = nullptr,
- const UnicodeRangeSet* range_set = nullptr)
- : font_data_(font_data), range_set_(range_set) {}
+ explicit FontDataForRangeSet(
+ const SimpleFontData* font_data = nullptr,
+ scoped_refptr<UnicodeRangeSet> range_set = nullptr)
+ : font_data_(font_data), range_set_(std::move(range_set)) {}
FontDataForRangeSet(const FontDataForRangeSet& other);
virtual ~FontDataForRangeSet() = default;
- void Trace(Visitor* visitor) const {
- visitor->Trace(font_data_);
- visitor->Trace(range_set_);
- }
+ void Trace(Visitor* visitor) const { visitor->Trace(font_data_); }
bool Contains(UChar32 test_char) const {
return !range_set_ || range_set_->Contains(test_char);
@@ -58,7 +56,7 @@ class PLATFORM_EXPORT FontDataForRangeSe
bool IsEntireRange() const {
return !range_set_ || range_set_->IsEntireRange();
}
- const UnicodeRangeSet* Ranges() const { return range_set_.Get(); }
+ UnicodeRangeSet* Ranges() const { return range_set_.get(); }
bool HasFontData() const { return font_data_; }
const SimpleFontData* FontData() const { return font_data_.Get(); }
@@ -74,7 +72,7 @@ class PLATFORM_EXPORT FontDataForRangeSe
protected:
Member<const SimpleFontData> font_data_;
- Member<const UnicodeRangeSet> range_set_;
+ scoped_refptr<UnicodeRangeSet> range_set_;
};
} // namespace blink
--- a/third_party/blink/renderer/platform/fonts/shaping/harfbuzz_face.cc
+++ b/third_party/blink/renderer/platform/fonts/shaping/harfbuzz_face.cc
@@ -508,10 +508,10 @@ const OpenTypeVerticalData& HarfBuzzFace
return *harfbuzz_font_data_->VerticalData();
}
-hb_font_t* HarfBuzzFace::GetScaledFont(const UnicodeRangeSet* range_set,
+hb_font_t* HarfBuzzFace::GetScaledFont(scoped_refptr<UnicodeRangeSet> range_set,
VerticalLayoutCallbacks vertical_layout,
float specified_size) const {
- harfbuzz_font_data_->range_set_ = range_set;
+ harfbuzz_font_data_->range_set_ = std::move(range_set);
harfbuzz_font_data_->UpdateFallbackMetricsAndScale(*platform_data_,
vertical_layout);
--- a/third_party/blink/renderer/platform/fonts/shaping/harfbuzz_face.h
+++ b/third_party/blink/renderer/platform/fonts/shaping/harfbuzz_face.h
@@ -66,7 +66,7 @@ class HarfBuzzFace final : public Garbag
// Passing in specified_size in order to control selecting the right value
// from the trak table. If not set, the size of the internal FontPlatformData
// object will be used.
- hb_font_t* GetScaledFont(const UnicodeRangeSet*,
+ hb_font_t* GetScaledFont(scoped_refptr<UnicodeRangeSet>,
VerticalLayoutCallbacks,
float specified_size) const;
--- a/third_party/blink/renderer/platform/fonts/shaping/harfbuzz_font_data.h
+++ b/third_party/blink/renderer/platform/fonts/shaping/harfbuzz_font_data.h
@@ -32,7 +32,7 @@ struct HarfBuzzFontData final : public G
HarfBuzzFontData(const HarfBuzzFontData&) = delete;
HarfBuzzFontData& operator=(const HarfBuzzFontData&) = delete;
- void Trace(Visitor* visitor) const { visitor->Trace(range_set_); }
+ void Trace(Visitor*) const {}
// The vertical origin and vertical advance functions in HarfBuzzFace require
// the ascent and height metrics as fallback in case no specific vertical
@@ -98,7 +98,7 @@ struct HarfBuzzFontData final : public G
SpaceGlyphInOpenTypeTables::kUnknown;
scoped_refptr<OpenTypeVerticalData> vertical_data_;
- Member<const UnicodeRangeSet> range_set_;
+ scoped_refptr<UnicodeRangeSet> range_set_;
};
} // namespace blink
--- a/third_party/blink/renderer/platform/fonts/shaping/harfbuzz_shaper.cc
+++ b/third_party/blink/renderer/platform/fonts/shaping/harfbuzz_shaper.cc
@@ -289,7 +289,7 @@ void RoundHarfBuzzBufferPositions(hb_buf
inline bool ShapeRange(hb_buffer_t* buffer,
const FontFeatures& font_features,
const SimpleFontData* current_font,
- const UnicodeRangeSet* current_font_range_set,
+ scoped_refptr<UnicodeRangeSet> current_font_range_set,
UScriptCode current_run_script,
hb_direction_t direction,
hb_language_t language,
@@ -325,7 +325,7 @@ inline bool ShapeRange(hb_buffer_t* buff
hb_buffer_set_direction(buffer, direction);
hb_font_t* hb_font =
- face->GetScaledFont(current_font_range_set,
+ face->GetScaledFont(std::move(current_font_range_set),
HB_DIRECTION_IS_VERTICAL(direction)
? HarfBuzzFace::kPrepareForVerticalLayout
: HarfBuzzFace::kNoVerticalLayout,
--- a/third_party/blink/renderer/platform/fonts/unicode_range_set.cc
+++ b/third_party/blink/renderer/platform/fonts/unicode_range_set.cc
@@ -31,8 +31,8 @@
namespace blink {
-UnicodeRangeSet::UnicodeRangeSet(HeapVector<UnicodeRange>&& ranges)
- : ranges_(std::move(ranges)) {
+UnicodeRangeSet::UnicodeRangeSet(const Vector<UnicodeRange>& ranges)
+ : ranges_(ranges) {
if (ranges_.empty())
return;
--- a/third_party/blink/renderer/platform/fonts/unicode_range_set.h
+++ b/third_party/blink/renderer/platform/fonts/unicode_range_set.h
@@ -26,12 +26,13 @@
#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_FONTS_UNICODE_RANGE_SET_H_
#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_FONTS_UNICODE_RANGE_SET_H_
-#include "third_party/blink/renderer/platform/heap/collection_support/heap_vector.h"
-#include "third_party/blink/renderer/platform/heap/garbage_collected.h"
#include "third_party/blink/renderer/platform/platform_export.h"
+#include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
#include "third_party/blink/renderer/platform/wtf/text/character_names.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_uchar.h"
+#include "third_party/blink/renderer/platform/wtf/thread_safe_ref_counted.h"
+#include "third_party/blink/renderer/platform/wtf/vector.h"
namespace blink {
@@ -55,14 +56,13 @@ struct PLATFORM_EXPORT UnicodeRange fina
UChar32 to_;
};
-class PLATFORM_EXPORT UnicodeRangeSet
- : public GarbageCollected<UnicodeRangeSet> {
+class PLATFORM_EXPORT UnicodeRangeSet : public RefCounted<UnicodeRangeSet> {
+ USING_FAST_MALLOC(UnicodeRangeSet);
+
public:
- explicit UnicodeRangeSet(HeapVector<UnicodeRange>&&);
+ explicit UnicodeRangeSet(const Vector<UnicodeRange>&);
UnicodeRangeSet() = default;
- void Trace(Visitor* visitor) const { visitor->Trace(ranges_); }
-
bool Contains(UChar32) const;
bool IntersectsWith(const String&) const;
bool IsEntireRange() const { return ranges_.empty(); }
@@ -71,8 +71,7 @@ class PLATFORM_EXPORT UnicodeRangeSet
bool operator==(const UnicodeRangeSet& other) const;
private:
- HeapVector<UnicodeRange>
- ranges_; // If empty, represents the whole code space.
+ Vector<UnicodeRange> ranges_; // If empty, represents the whole code space.
};
} // namespace blink
|