From 6bcab786a1803aa67606245018eb1902d1a0b497 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Fri, 15 Dec 2023 15:45:05 -0700 Subject: [PATCH] [varStore] Fix caching when setModel() is called repeatedly --- Lib/fontTools/varLib/varStore.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/Lib/fontTools/varLib/varStore.py b/Lib/fontTools/varLib/varStore.py index e74bd5d52..d4e199a4d 100644 --- a/Lib/fontTools/varLib/varStore.py +++ b/Lib/fontTools/varLib/varStore.py @@ -32,7 +32,7 @@ class OnlineVarStoreBuilder(object): self._supports = None self._varDataIndices = {} self._varDataCaches = {} - self._cache = {} + self._cache = None def setModel(self, model): self.setSupports(model.supports) @@ -43,7 +43,7 @@ class OnlineVarStoreBuilder(object): self._supports = list(supports) if not self._supports[0]: del self._supports[0] # Drop base master support - self._cache = {} + self._cache = None self._data = None def finish(self, optimize=True): @@ -110,12 +110,13 @@ class OnlineVarStoreBuilder(object): assert len(deltas) == len(self._supports) deltas = tuple(deltas) + if not self._data: + self._add_VarData() + varIdx = self._cache.get(deltas) if varIdx is not None: return varIdx - if not self._data: - self._add_VarData() inner = len(self._data.Item) if inner == 0xFFFF: # Full array. Start new one. @@ -131,12 +132,13 @@ class OnlineVarStoreBuilder(object): deltas_list = [[round(d) for d in deltas] for deltas in deltas_list] deltas_list = tuple(tuple(deltas) for deltas in deltas_list) + if not self._data: + self._add_VarData(len(deltas_list)) + varIdx = self._cache.get(deltas_list) if varIdx is not None: return varIdx - if not self._data: - self._add_VarData(len(deltas_list)) inner = len(self._data.Item) if inner + len(deltas_list) > 0xFFFF: # Full array. Start new one.