Mercurial > evolve
changeset 2570:86959f2c625d
obscache: directly allocate zeroed bytearray
This is much faster that incrementally appending to it. On mozilla central
without obsolescence markers this move full cache building from 0.3s to nothing
visible.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Fri, 09 Jun 2017 01:39:42 +0100 |
parents | 427f6091250e |
children | 3f469be5f3a7 |
files | hgext3rd/evolve/obscache.py |
diffstat | 1 files changed, 12 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext3rd/evolve/obscache.py Fri Jun 09 01:26:29 2017 +0100 +++ b/hgext3rd/evolve/obscache.py Fri Jun 09 01:39:42 2017 +0100 @@ -417,16 +417,18 @@ For now we stick to the simpler approach of paying the performance cost on new changesets. """ - node = repo.changelog.node - succs = repo.obsstore.successors - for r in revs: - if node(r) in succs: - val = 1 - else: - val = 0 - self._data.append(val) - cl = repo.changelog - assert len(self._data) == len(cl), (len(self._data), len(cl)) + new_entries = bytearray(len(revs)) + if not self._data: + self._setdata(new_entries) + else: + self._data.extend(new_entries) + data = self._data + if repo.obsstore: + node = repo.changelog.node + succs = repo.obsstore.successors + for r in revs: + if node(r) in succs: + data[r] = 1 def _updatemarkers(self, repo, obsmarkers): """update the cache with new markers"""