[varLib.varStore] Cache scalars in VarStoreInstancer

This commit is contained in:
Behdad Esfahbod 2017-10-20 13:55:09 -04:00
parent 5fabd3eb32
commit e05ece2715

View File

@ -76,22 +76,26 @@ class VarStoreInstancer(object):
self._clearCaches() self._clearCaches()
def _clearCaches(self): def _clearCaches(self):
pass self._scalars = {}
#self._scalars = {}
def _getScalar(self, regionIdx):
scalar = self._scalars.get(regionIdx)
if scalar is None:
support = VarRegion_get_support(self._regions[regionIdx], self.fvar_axes)
scalar = supportScalar(self.location, support)
self._scalars[regionIdx] = scalar
return scalar
def __getitem__(self, varidx): def __getitem__(self, varidx):
major, minor = varidx >> 16, varidx & 0xFFFF major, minor = varidx >> 16, varidx & 0xFFFF
varData = self._varData varData = self._varData
supports = [VarRegion_get_support(self._regions[ri], self.fvar_axes) scalars = [self._getScalar(ri) for ri in varData[major].VarRegionIndex]
for ri in varData[major].VarRegionIndex]
deltas = varData[major].Item[minor] deltas = varData[major].Item[minor]
delta = 0. delta = 0.
for d,s in zip(deltas, supports): for d,s in zip(deltas, scalars):
if not d: continue delta += d * s
scalar = supportScalar(self.location, s)
delta += d * scalar
return delta return delta