Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(588)

Unified Diff: third_party/WebKit/Source/platform/fonts/FontFallbackIterator.cpp

Issue 2066253002: Fix Refcount in FontDataCache for objects from FontFallbackIterator (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/platform/fonts/FontFallbackIterator.cpp
diff --git a/third_party/WebKit/Source/platform/fonts/FontFallbackIterator.cpp b/third_party/WebKit/Source/platform/fonts/FontFallbackIterator.cpp
index c1c0ca97bf8743bf76e5d49cd9e2574837829d86..35b1b099cdc99624dae1b5e11110189b12da7115 100644
--- a/third_party/WebKit/Source/platform/fonts/FontFallbackIterator.cpp
+++ b/third_party/WebKit/Source/platform/fonts/FontFallbackIterator.cpp
@@ -47,16 +47,16 @@ bool FontFallbackIterator::needsHintList() const
bool FontFallbackIterator::alreadyLoadingRangeForHintChar(UChar32 hintChar)
{
for (auto it = m_trackedLoadingRangeSets.begin(); it != m_trackedLoadingRangeSets.end(); ++it) {
- if (it->contains(hintChar))
+ if ((*it)->contains(hintChar))
return true;
}
return false;
}
-bool FontFallbackIterator::rangeSetContributesForHint(const Vector<UChar32> hintList, const FontDataForRangeSet& segmentedFace)
+bool FontFallbackIterator::rangeSetContributesForHint(const Vector<UChar32> hintList, const FontDataForRangeSet* segmentedFace)
{
for (auto it = hintList.begin(); it != hintList.end(); ++it) {
- if (segmentedFace.contains(*it)) {
+ if (segmentedFace->contains(*it)) {
if (!alreadyLoadingRangeForHintChar(*it))
return true;
}
@@ -73,18 +73,18 @@ void FontFallbackIterator::willUseRange(const AtomicString& family, const FontDa
selector->willUseRange(m_fontDescription, family, rangeSet);
}
-const FontDataForRangeSet FontFallbackIterator::next(const Vector<UChar32>& hintList)
+const PassRefPtr<FontDataForRangeSet> FontFallbackIterator::next(const Vector<UChar32>& hintList)
{
if (m_fallbackStage == OutOfLuck)
- return FontDataForRangeSet();
+ return adoptRef(new FontDataForRangeSet());
if (m_fallbackStage == FallbackPriorityFonts) {
// Only try one fallback priority font,
// then proceed to regular system fallback.
m_fallbackStage = SystemFonts;
- FontDataForRangeSet fallbackPriorityFontRange(fallbackPriorityFont(hintList[0]));
- if (fallbackPriorityFontRange.hasFontData())
- return fallbackPriorityFontRange;
+ RefPtr<FontDataForRangeSet> fallbackPriorityFontRange = adoptRef(new FontDataForRangeSet(fallbackPriorityFont(hintList[0])));
+ if (fallbackPriorityFontRange->hasFontData())
+ return fallbackPriorityFontRange.release();
return next(hintList);
}
@@ -93,7 +93,7 @@ const FontDataForRangeSet FontFallbackIterator::next(const Vector<UChar32>& hint
ASSERT(hintList.size());
RefPtr<SimpleFontData> systemFont = uniqueSystemFontForHint(hintList[0]);
if (systemFont)
- return FontDataForRangeSet(systemFont);
+ return adoptRef(new FontDataForRangeSetFromCache(systemFont));
// If we don't have options from the system fallback anymore or had
// previously returned them, we only have the last resort font left.
@@ -104,7 +104,7 @@ const FontDataForRangeSet FontFallbackIterator::next(const Vector<UChar32>& hint
m_fallbackStage = OutOfLuck;
RefPtr<SimpleFontData> lastResort = fontCache->getLastResortFallbackFont(m_fontDescription).get();
RELEASE_ASSERT(lastResort);
- return FontDataForRangeSet(lastResort);
+ return adoptRef(new FontDataForRangeSetFromCache(lastResort));
}
ASSERT(m_fallbackStage == FontGroupFonts
@@ -129,7 +129,7 @@ const FontDataForRangeSet FontFallbackIterator::next(const Vector<UChar32>& hint
m_currentFontDataIndex++;
if (!fontData->isLoading()) {
RefPtr<SimpleFontData> nonSegmented = const_cast<SimpleFontData*>(toSimpleFontData(fontData));
- return FontDataForRangeSet(nonSegmented);
+ return adoptRef(new FontDataForRangeSetFromCache(nonSegmented));
}
return next(hintList);
}
@@ -143,7 +143,7 @@ const FontDataForRangeSet FontFallbackIterator::next(const Vector<UChar32>& hint
}
ASSERT(m_segmentedFaceIndex < segmented->numFaces());
- FontDataForRangeSet currentSegmentedFace = segmented->faceAt(m_segmentedFaceIndex);
+ RefPtr<FontDataForRangeSet> currentSegmentedFace = segmented->faceAt(m_segmentedFaceIndex);
m_segmentedFaceIndex++;
if (m_segmentedFaceIndex == segmented->numFaces()) {
@@ -153,8 +153,8 @@ const FontDataForRangeSet FontFallbackIterator::next(const Vector<UChar32>& hint
m_currentFontDataIndex++;
}
- if (rangeSetContributesForHint(hintList, currentSegmentedFace)) {
- const SimpleFontData* fontData = currentSegmentedFace.fontData();
+ if (rangeSetContributesForHint(hintList, currentSegmentedFace.get())) {
+ const SimpleFontData* fontData = currentSegmentedFace->fontData();
if (const CustomFontData* customFontData = fontData->customFontData())
customFontData->beginLoadIfNeeded();
if (!fontData->isLoading())

Powered by Google App Engine
This is Rietveld 408576698