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

Unified Diff: Source/platform/fonts/harfbuzz/HarfBuzzShaper.cpp

Issue 167703008: Remove HarfBuzzRun cache (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: rebase w/HEAD Created 6 years, 4 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/platform/fonts/harfbuzz/HarfBuzzShaper.cpp
diff --git a/Source/platform/fonts/harfbuzz/HarfBuzzShaper.cpp b/Source/platform/fonts/harfbuzz/HarfBuzzShaper.cpp
index 10abf5082fc7759397880cb6558c57d7499d309f..02cebb26dec6bb583eb6e8656594284d01964234 100644
--- a/Source/platform/fonts/harfbuzz/HarfBuzzShaper.cpp
+++ b/Source/platform/fonts/harfbuzz/HarfBuzzShaper.cpp
@@ -78,138 +78,6 @@ private:
DestroyFunction m_destroy;
};
-
-static const unsigned cHarfBuzzCacheMaxSize = 256;
-
-struct CachedShapingResultsLRUNode;
-struct CachedShapingResults;
-typedef std::map<std::wstring, CachedShapingResults*> CachedShapingResultsMap;
-typedef std::list<CachedShapingResultsLRUNode*> CachedShapingResultsLRU;
-
-struct CachedShapingResults {
- CachedShapingResults(hb_buffer_t* harfBuzzBuffer, const Font* runFont, hb_direction_t runDir, const String& newLocale);
- ~CachedShapingResults();
-
- hb_buffer_t* buffer;
- Font font;
- hb_direction_t dir;
- String locale;
- CachedShapingResultsLRU::iterator lru;
-};
-
-struct CachedShapingResultsLRUNode {
- CachedShapingResultsLRUNode(const CachedShapingResultsMap::iterator& cacheEntry);
- ~CachedShapingResultsLRUNode();
-
- CachedShapingResultsMap::iterator entry;
-};
-
-CachedShapingResults::CachedShapingResults(hb_buffer_t* harfBuzzBuffer, const Font* fontData, hb_direction_t dirData, const String& newLocale)
- : buffer(harfBuzzBuffer)
- , font(*fontData)
- , dir(dirData)
- , locale(newLocale)
-{
-}
-
-CachedShapingResults::~CachedShapingResults()
-{
- hb_buffer_destroy(buffer);
-}
-
-CachedShapingResultsLRUNode::CachedShapingResultsLRUNode(const CachedShapingResultsMap::iterator& cacheEntry)
- : entry(cacheEntry)
-{
-}
-
-CachedShapingResultsLRUNode::~CachedShapingResultsLRUNode()
-{
-}
-
-class HarfBuzzRunCache {
-public:
- HarfBuzzRunCache();
- ~HarfBuzzRunCache();
-
- CachedShapingResults* find(const std::wstring& key) const;
- void remove(CachedShapingResults* node);
- void moveToBack(CachedShapingResults* node);
- bool insert(const std::wstring& key, CachedShapingResults* run);
-
-private:
- CachedShapingResultsMap m_harfBuzzRunMap;
- CachedShapingResultsLRU m_harfBuzzRunLRU;
-};
-
-
-HarfBuzzRunCache::HarfBuzzRunCache()
-{
-}
-
-HarfBuzzRunCache::~HarfBuzzRunCache()
-{
- for (CachedShapingResultsMap::iterator it = m_harfBuzzRunMap.begin(); it != m_harfBuzzRunMap.end(); ++it)
- delete it->second;
- for (CachedShapingResultsLRU::iterator it = m_harfBuzzRunLRU.begin(); it != m_harfBuzzRunLRU.end(); ++it)
- delete *it;
-}
-
-bool HarfBuzzRunCache::insert(const std::wstring& key, CachedShapingResults* data)
-{
- std::pair<CachedShapingResultsMap::iterator, bool> results =
- m_harfBuzzRunMap.insert(CachedShapingResultsMap::value_type(key, data));
-
- if (!results.second)
- return false;
-
- CachedShapingResultsLRUNode* node = new CachedShapingResultsLRUNode(results.first);
-
- m_harfBuzzRunLRU.push_back(node);
- data->lru = --m_harfBuzzRunLRU.end();
-
- if (m_harfBuzzRunMap.size() > cHarfBuzzCacheMaxSize) {
- CachedShapingResultsLRUNode* lru = m_harfBuzzRunLRU.front();
- CachedShapingResults* foo = lru->entry->second;
- m_harfBuzzRunMap.erase(lru->entry);
- m_harfBuzzRunLRU.pop_front();
- delete foo;
- delete lru;
- }
-
- return true;
-}
-
-inline CachedShapingResults* HarfBuzzRunCache::find(const std::wstring& key) const
-{
- CachedShapingResultsMap::const_iterator it = m_harfBuzzRunMap.find(key);
-
- return it != m_harfBuzzRunMap.end() ? it->second : 0;
-}
-
-inline void HarfBuzzRunCache::remove(CachedShapingResults* node)
-{
- CachedShapingResultsLRUNode* lruNode = *node->lru;
-
- m_harfBuzzRunLRU.erase(node->lru);
- m_harfBuzzRunMap.erase(lruNode->entry);
- delete lruNode;
- delete node;
-}
-
-inline void HarfBuzzRunCache::moveToBack(CachedShapingResults* node)
-{
- CachedShapingResultsLRUNode* lruNode = *node->lru;
- m_harfBuzzRunLRU.erase(node->lru);
- m_harfBuzzRunLRU.push_back(lruNode);
- node->lru = --m_harfBuzzRunLRU.end();
-}
-
-HarfBuzzRunCache& harfBuzzRunCache()
-{
- DEFINE_STATIC_LOCAL(HarfBuzzRunCache, globalHarfBuzzRunCache, ());
- return globalHarfBuzzRunCache;
-}
-
static inline float harfBuzzPositionToFloat(hb_position_t value)
{
return static_cast<float>(value) / (1 << 16);
@@ -812,7 +680,6 @@ bool HarfBuzzShaper::shapeHarfBuzzRuns()
{
HarfBuzzScopedPtr<hb_buffer_t> harfBuzzBuffer(hb_buffer_create(), hb_buffer_destroy);
- HarfBuzzRunCache& runCache = harfBuzzRunCache();
const FontDescription& fontDescription = m_font->fontDescription();
const String& localeString = fontDescription.locale();
CString locale = localeString.latin1();
@@ -839,22 +706,6 @@ bool HarfBuzzShaper::shapeHarfBuzzRuns()
const UChar* src = m_normalizedBuffer.get() + currentRun->startIndex();
std::wstring key(src, src + currentRun->numCharacters());
- CachedShapingResults* cachedResults = runCache.find(key);
- if (cachedResults) {
- if (cachedResults->dir == props.direction && cachedResults->font == *m_font && cachedResults->locale == localeString) {
- currentRun->applyShapeResult(cachedResults->buffer);
- setGlyphPositionsForHarfBuzzRun(currentRun, cachedResults->buffer);
-
- hb_buffer_clear_contents(harfBuzzBuffer.get());
-
- runCache.moveToBack(cachedResults);
-
- continue;
- }
-
- runCache.remove(cachedResults);
- }
-
// Add a space as pre-context to the buffer. This prevents showing dotted-circle
// for combining marks at the beginning of runs.
static const uint16_t preContext = ' ';
@@ -877,8 +728,6 @@ bool HarfBuzzShaper::shapeHarfBuzzRuns()
currentRun->applyShapeResult(harfBuzzBuffer.get());
setGlyphPositionsForHarfBuzzRun(currentRun, harfBuzzBuffer.get());
- runCache.insert(key, new CachedShapingResults(harfBuzzBuffer.get(), m_font, props.direction, localeString));
-
harfBuzzBuffer.set(hb_buffer_create());
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698