From 8094fa17207729c119f7a1fa399286919dd1a8a3 Mon Sep 17 00:00:00 2001 From: Noel Grandin Date: Wed, 11 Apr 2018 15:53:35 +0200 Subject: improve commit 95eb921ec06ee7 "tdf#108608 more Draw text editing responsiveness fixes" lru_map is fine on Windows, was a bug in the new clear method I added. Change-Id: I27565675dfe0f57e2ba3c3e0c50297770761dc6a Reviewed-on: https://gerrit.libreoffice.org/52728 Tested-by: Jenkins Reviewed-by: Noel Grandin --- include/o3tl/lru_map.hxx | 3 ++- vcl/win/gdi/salfont.cxx | 8 +++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/include/o3tl/lru_map.hxx b/include/o3tl/lru_map.hxx index 4eb05bd97a43..f2369e45030a 100644 --- a/include/o3tl/lru_map.hxx +++ b/include/o3tl/lru_map.hxx @@ -125,7 +125,7 @@ public: const list_const_iterator_t end() const { - return mLruList.end(); + return mLruList.cend(); } size_t size() const @@ -135,6 +135,7 @@ public: void clear() { + mLruMap.clear(); mLruList.clear(); } }; diff --git a/vcl/win/gdi/salfont.cxx b/vcl/win/gdi/salfont.cxx index e415ec8fa1b3..7c6bb027f245 100644 --- a/vcl/win/gdi/salfont.cxx +++ b/vcl/win/gdi/salfont.cxx @@ -28,6 +28,7 @@ #include #include +#include #include #include #include @@ -57,10 +58,9 @@ using namespace vcl; // GetGlyphOutlineW() seems to be a little slow, and doesn't seem to do it's own caching (tested on Windows10). -// TODO use something a little smarter here like an LRU cache, and include the font as part of the cache key +// TODO include the font as part of the cache key, then we won't need to clear it on font change // The cache limit is set by the rough number of characters needed to read your average Asian newspaper. -constexpr size_t BOUND_RECT_CACHE_SIZE = 3000; -static std::unordered_map g_BoundRectCache; +static o3tl::lru_map g_BoundRectCache(3000); inline FIXED FixedFromDouble( double d ) { @@ -1340,8 +1340,6 @@ bool WinSalGraphics::GetGlyphBoundRect(const GlyphItem& rGlyph, tools::Rectangle rRect = it->second; return true; } - if (g_BoundRectCache.size() > BOUND_RECT_CACHE_SIZE) - g_BoundRectCache.clear(); HDC hDC = getHDC(); -- cgit v1.2.3