##// END OF EJS Templates
util: optimize cost auditing on insert...
Gregory Szorc -
r39605:cc23c09b default
parent child Browse files
Show More
@@ -1464,8 +1464,23 b' class lrucachedict(object):'
1464 # This should run after an insertion. It should only be called if total
1464 # This should run after an insertion. It should only be called if total
1465 # cost limits are being enforced.
1465 # cost limits are being enforced.
1466 # The most recently inserted node is never evicted.
1466 # The most recently inserted node is never evicted.
1467 if len(self) <= 1 or self.totalcost <= self.maxcost:
1468 return
1469
1470 # This is logically equivalent to calling popoldest() until we
1471 # free up enough cost. We don't do that since popoldest() needs
1472 # to walk the linked list and doing this in a loop would be
1473 # quadratic. So we find the first non-empty node and then
1474 # walk nodes until we free up enough capacity.
1475 n = self._head.prev
1476 while n.key is _notset:
1477 n = n.prev
1478
1467 while len(self) > 1 and self.totalcost > self.maxcost:
1479 while len(self) > 1 and self.totalcost > self.maxcost:
1468 self.popoldest()
1480 del self._cache[n.key]
1481 self.totalcost -= n.cost
1482 n.markempty()
1483 n = n.prev
1469
1484
1470 def lrucachefunc(func):
1485 def lrucachefunc(func):
1471 '''cache most recent results of function calls'''
1486 '''cache most recent results of function calls'''
General Comments 0
You need to be logged in to leave comments. Login now