revlog: increase I/O bound to 4x the amount of data consumed

This doesn't affect normal clones since they'd be bound by the CPU bound below
anyway -- it does, however, improve generaldelta clones significantly.

This also results in better deltaing for generaldelta clones -- in generaldelta
clones, we calculate deltas with respect to the closest base if it has a higher
revision number than either parent. If the base is on a significantly different
branch, this can result in pointlessly massive deltas. This reduces the number
of bases and hence the number of bad deltas.

Empirically, for a highly branchy repository, this resulted in an improvement
of around 15% to manifest size.
This commit is contained in:
Siddharth Agarwal 2014-11-11 20:08:19 -08:00
parent fe51051ee5
commit 1acd4cfca4

View File

@ -1267,7 +1267,7 @@ class revlog(object):
# the amount of I/O we need to do.
# - 'compresseddeltalen' is the sum of the total size of deltas we need
# to apply -- bounding it limits the amount of CPU we consume.
if (d is None or dist > textlen * 2 or l > textlen or
if (d is None or dist > textlen * 4 or l > textlen or
compresseddeltalen > textlen * 2 or
(self._maxchainlen and chainlen > self._maxchainlen)):
text = buildtext()