Changeset 229164 in webkit


Ignore:
Timestamp:
Mar 1, 2018 10:40:56 PM (6 years ago)
Author:
Carlos Garcia Campos
Message:

[FreeType] Remove FontPlatformData fallbacks
https://bugs.webkit.org/show_bug.cgi?id=183210

Reviewed by Michael Catanzaro.

Source/WebCore:

They are only used by FontCache::systemFallbackForCharacters() where a direct FcFontMatch provides the same
or better results.

  • platform/graphics/FontPlatformData.h: Remove fallbacks.
  • platform/graphics/freetype/FontCacheFreeType.cpp:

(WebCore::FontCache::systemFallbackForCharacters): Use FcFontMatch() only.

  • platform/graphics/freetype/FontPlatformDataFreeType.cpp:

(WebCore::FontPlatformData::fallbacks): Removed.

LayoutTests:

Rebaseline 3 tests that progressed.

  • platform/gtk/fast/text/international/bidi-LDB-2-CSS-expected.png:
  • platform/gtk/fast/text/international/bidi-LDB-2-CSS-expected.txt:
  • platform/gtk/fast/text/international/bidi-LDB-2-HTML-expected.png:
  • platform/gtk/fast/text/international/bidi-LDB-2-HTML-expected.txt:
  • platform/gtk/fast/text/international/bidi-LDB-2-formatting-characters-expected.png:
  • platform/gtk/fast/text/international/bidi-LDB-2-formatting-characters-expected.txt:
Location:
trunk
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r229160 r229164  
     12018-03-01  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [FreeType] Remove FontPlatformData fallbacks
     4        https://bugs.webkit.org/show_bug.cgi?id=183210
     5
     6        Reviewed by Michael Catanzaro.
     7
     8        Rebaseline 3 tests that progressed.
     9
     10        * platform/gtk/fast/text/international/bidi-LDB-2-CSS-expected.png:
     11        * platform/gtk/fast/text/international/bidi-LDB-2-CSS-expected.txt:
     12        * platform/gtk/fast/text/international/bidi-LDB-2-HTML-expected.png:
     13        * platform/gtk/fast/text/international/bidi-LDB-2-HTML-expected.txt:
     14        * platform/gtk/fast/text/international/bidi-LDB-2-formatting-characters-expected.png:
     15        * platform/gtk/fast/text/international/bidi-LDB-2-formatting-characters-expected.txt:
     16
    1172018-03-01  Youenn Fablet  <youenn@apple.com>
    218
  • trunk/LayoutTests/platform/gtk/fast/text/international/bidi-LDB-2-CSS-expected.txt

    r222681 r229164  
    55    RenderBody {BODY} at (8,21) size 784x517
    66      RenderBlock {H1} at (0,0) size 784x37
    7         RenderText {#text} at (0,0) size 488x36
    8           text run at (0,0) width 488: "Bidirectional Text Test 2 - CSS"
     7        RenderText {#text} at (0,0) size 547x36
     8          text run at (0,0) width 547: "Bidirectional Text Test 2 - CSS"
    99      RenderBlock {P} at (0,58) size 784x19
    1010        RenderText {#text} at (0,0) size 167x17
  • trunk/LayoutTests/platform/gtk/fast/text/international/bidi-LDB-2-HTML-expected.txt

    r222681 r229164  
    55    RenderBody {BODY} at (8,21) size 784x465
    66      RenderBlock {H1} at (0,0) size 784x37
    7         RenderText {#text} at (0,0) size 516x36
    8           text run at (0,0) width 516: "Bidirectional Text Test 2 - HTML"
     7        RenderText {#text} at (0,0) size 579x36
     8          text run at (0,0) width 579: "Bidirectional Text Test 2 - HTML"
    99      RenderBlock {P} at (0,58) size 784x19
    1010        RenderText {#text} at (0,0) size 167x17
  • trunk/LayoutTests/platform/gtk/fast/text/international/bidi-LDB-2-formatting-characters-expected.txt

    r222681 r229164  
    55    RenderBody {BODY} at (8,21) size 769x596
    66      RenderBlock {H1} at (0,0) size 769x74
    7         RenderText {#text} at (0,0) size 603x73
    8           text run at (0,0) width 603: "Bidirectional Text Test 2 - Formatting"
    9           text run at (0,37) width 176: "Characters"
     7        RenderText {#text} at (0,0) size 680x73
     8          text run at (0,0) width 680: "Bidirectional Text Test 2 - Formatting"
     9          text run at (0,37) width 197: "Characters"
    1010      RenderBlock {P} at (0,95) size 769x19
    1111        RenderText {#text} at (0,0) size 167x17
  • trunk/Source/WebCore/ChangeLog

    r229163 r229164  
     12018-03-01  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [FreeType] Remove FontPlatformData fallbacks
     4        https://bugs.webkit.org/show_bug.cgi?id=183210
     5
     6        Reviewed by Michael Catanzaro.
     7
     8        They are only used by FontCache::systemFallbackForCharacters() where a direct FcFontMatch provides the same
     9        or better results.
     10
     11        * platform/graphics/FontPlatformData.h: Remove fallbacks.
     12        * platform/graphics/freetype/FontCacheFreeType.cpp:
     13        (WebCore::FontCache::systemFallbackForCharacters): Use FcFontMatch() only.
     14        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
     15        (WebCore::FontPlatformData::fallbacks): Removed.
     16
    1172018-03-01  Commit Queue  <commit-queue@webkit.org>
    218
  • trunk/Source/WebCore/platform/graphics/FontPlatformData.h

    r228524 r229164  
    165165    HarfBuzzFace& harfBuzzFace() const;
    166166    bool hasCompatibleCharmap() const;
    167     FcFontSet* fallbacks() const;
    168167#endif
    169168
     
    243242#if USE(FREETYPE)
    244243    RefPtr<FcPattern> m_pattern;
    245     mutable FcUniquePtr<FcFontSet> m_fallbacks;
    246244    mutable std::unique_ptr<HarfBuzzFace> m_harfBuzzFace;
    247245#endif
  • trunk/Source/WebCore/platform/graphics/freetype/FontCacheFreeType.cpp

    r229128 r229164  
    7979}
    8080
    81 static RefPtr<FcPattern> createFontConfigPatternForCharacters(const FontDescription& fontDescription, const UChar* characters, int bufferLength)
    82 {
    83     RefPtr<FcPattern> pattern = adoptRef(FcPatternCreate());
     81RefPtr<Font> FontCache::systemFallbackForCharacters(const FontDescription& description, const Font*, bool, const UChar* characters, unsigned length)
     82{
    8483    FcUniquePtr<FcCharSet> fontConfigCharSet(FcCharSetCreate());
    85 
    86     UTF16UChar32Iterator iterator(characters, bufferLength);
     84    UTF16UChar32Iterator iterator(characters, length);
    8785    UChar32 character = iterator.next();
    8886    while (character != iterator.end()) {
     
    9189    }
    9290
     91    RefPtr<FcPattern> pattern = adoptRef(FcPatternCreate());
    9392    FcPatternAddCharSet(pattern.get(), FC_CHARSET, fontConfigCharSet.get());
    9493
    9594    FcPatternAddBool(pattern.get(), FC_SCALABLE, FcTrue);
    9695
    97     if (!configurePatternForFontDescription(pattern.get(), fontDescription))
     96    if (!configurePatternForFontDescription(pattern.get(), description))
    9897        return nullptr;
    9998
     
    101100    cairo_ft_font_options_substitute(getDefaultCairoFontOptions(), pattern.get());
    102101    FcDefaultSubstitute(pattern.get());
    103     return pattern;
    104 }
    105 
    106 static RefPtr<FcPattern> findBestFontGivenFallbacks(const FontPlatformData& fontData, FcPattern* pattern)
    107 {
    108     FcFontSet* fallbacks = fontData.fallbacks();
    109     if (!fallbacks)
    110         return nullptr;
    111102
    112103    FcResult fontConfigResult;
    113     return adoptRef(FcFontSetMatch(nullptr, &fallbacks, 1, pattern, &fontConfigResult));
    114 }
    115 
    116 RefPtr<Font> FontCache::systemFallbackForCharacters(const FontDescription& description, const Font* originalFontData, bool, const UChar* characters, unsigned length)
    117 {
    118     RefPtr<FcPattern> pattern = createFontConfigPatternForCharacters(description, characters, length);
    119     if (!pattern)
    120         return nullptr;
    121 
    122 
    123     if (RefPtr<FcPattern> fallbackPattern = findBestFontGivenFallbacks(originalFontData->platformData(), pattern.get())) {
    124         FontPlatformData alternateFontData(fallbackPattern.get(), description);
    125         return fontForPlatformData(alternateFontData);
    126     }
    127 
    128     FcResult fontConfigResult;
    129     if (RefPtr<FcPattern> resultPattern = adoptRef(FcFontMatch(nullptr, pattern.get(), &fontConfigResult))) {
    130         FontPlatformData alternateFontData(resultPattern.get(), description);
    131         return fontForPlatformData(alternateFontData);
    132     }
    133 
    134     return nullptr;
     104    RefPtr<FcPattern> resultPattern = adoptRef(FcFontMatch(nullptr, pattern.get(), &fontConfigResult));
     105    if (!resultPattern)
     106        return nullptr;
     107
     108    FontPlatformData alternateFontData(resultPattern.get(), description);
     109    return fontForPlatformData(alternateFontData);
    135110}
    136111
  • trunk/Source/WebCore/platform/graphics/freetype/FontPlatformDataFreeType.cpp

    r229128 r229164  
    199199
    200200    // This will be re-created on demand.
    201     m_fallbacks = nullptr;
    202201    m_harfBuzzFace = nullptr;
    203202
     
    244243        m_harfBuzzFace = std::make_unique<HarfBuzzFace>(const_cast<FontPlatformData&>(*this), hash());
    245244    return *m_harfBuzzFace;
    246 }
    247 
    248 FcFontSet* FontPlatformData::fallbacks() const
    249 {
    250     if (m_fallbacks)
    251         return m_fallbacks.get();
    252 
    253     if (m_pattern) {
    254         FcResult fontConfigResult;
    255         FcUniquePtr<FcFontSet> unpreparedFallbacks(FcFontSort(nullptr, m_pattern.get(), FcTrue, nullptr, &fontConfigResult));
    256         m_fallbacks.reset(FcFontSetCreate());
    257         for (int i = 0; i < unpreparedFallbacks.get()->nfont; i++)
    258             FcFontSetAdd(m_fallbacks.get(), FcFontRenderPrepare(nullptr, m_pattern.get(), unpreparedFallbacks.get()->fonts[i]));
    259     }
    260     return m_fallbacks.get();
    261245}
    262246
Note: See TracChangeset for help on using the changeset viewer.