のねのBlog

パソコンの問題や、ソフトウェアの開発で起きた問題など書いていきます。よろしくお願いします^^。

FontCachePurgePreventer=>purgeInactiveFontDataIfNeeded

    347 int Font::emphasisMarkAscent(const AtomicString& mark) const
    348 {
    349     FontCachePurgePreventer purgePreventer; <======= こんな感じで使われてる。
                                                             このオブジェクトが消えるとき、パージが動く。
    350 
    351     GlyphData markGlyphData;
    352     if (!getEmphasisMarkGlyphData(mark, markGlyphData))
    353         return 0;
    354 
    355     const SimpleFontData* markFontData = markGlyphData.fontData;
    356     ASSERT(markFontData);
    357     if (!markFontData)
    358         return 0;
    359 
    360     return markFontData->fontMetrics().ascent();
    361 }
    149 class FontCachePurgePreventer {
    150 public:
    151     FontCachePurgePreventer() {
               fontCache()->disablePurging(); 
            }
    152     ~FontCachePurgePreventer() {
               fontCache()->enablePurging();  <===== purge
            }
    153 };
    154 
    155 }
    113     FontCache();
    114     ~FontCache();
    115 
    116     void disablePurging() { m_purgePreventCount++; }
    117     void enablePurging()
    118     {
    119         ASSERT(m_purgePreventCount);
    120         if (!--m_purgePreventCount)
    121             purgeInactiveFontDataIfNeeded(); <=====
    122     }
    363 void FontCache::purgeInactiveFontDataIfNeeded()
    364 {
    365     if (gInactiveFontData && !m_purgePreventCount && gInactiveFontData->size() > cMaxInactiveFontData)
    366         purgeInactiveFontData(gInactiveFontData->size() - cTargetInactiveFontData); <==============
    367 }