Mercurial > hg
changeset 42468:9b5fbe5ead89
deltas: skip if projected compressed size is bigger than previous snapshot
If we have a delta, we check constraints against a lower bound estimate of the
resulting compressed delta. We then checks this projected size against the
`size(snapshotⁿ) > size(snapshotⁿ⁺¹)` constraint. This allows to exclude
potential base candidates before doing any expensive computation.
This only apply to the intermediate-snapshot case since this constraint only
apply to them.
For some pathological cases of a private repository this step provide a
further performance boost (timing from `hg perfrevlogwrite`):
before: 3.010646 seconds
after: 2.609307 seconds
author | Valentin Gatien-Baron <vgatien-baron@janestreet.com> |
---|---|
date | Mon, 21 Jan 2019 22:46:31 +0100 |
parents | c1c1872d25d1 |
children | 4a3abb33380a |
files | mercurial/revlogutils/deltas.py |
diffstat | 1 files changed, 2 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/revlogutils/deltas.py Mon Jan 21 22:46:18 2019 +0100 +++ b/mercurial/revlogutils/deltas.py Mon Jan 21 22:46:31 2019 +0100 @@ -966,6 +966,8 @@ snapshotlimit = revinfo.textlen >> snapshotdepth if snapshotlimit < lowestrealisticdeltalen: return None + if revlog.length(base) < lowestrealisticdeltalen: + return None header, data = revlog.compress(delta) deltalen = len(header) + len(data) offset = revlog.end(len(revlog) - 1)