diff options
author | Noel Grandin <noel@peralex.com> | 2018-04-11 15:53:35 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2018-04-11 19:01:21 +0200 |
commit | 8094fa17207729c119f7a1fa399286919dd1a8a3 (patch) | |
tree | 4e01317403d628dd50043917c98d3acd6650409c | |
parent | 9c0684c9efca25ab9a39002b34328fafc30cc8bd (diff) |
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 <ci@libreoffice.org>
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
-rw-r--r-- | include/o3tl/lru_map.hxx | 3 | ||||
-rw-r--r-- | 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 <svsys.h> #include <vector> +#include <o3tl/lru_map.hxx> #include <basegfx/matrix/b2dhommatrixtools.hxx> #include <basegfx/polygon/b2dpolygon.hxx> #include <i18nlangtag/mslangid.hxx> @@ -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<sal_GlyphId, tools::Rectangle> g_BoundRectCache; +static o3tl::lru_map<sal_GlyphId, tools::Rectangle> 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(); |