Mercurial > public > mercurial-scm > hg
comparison mercurial/revlogutils/deltas.py @ 42464:66c27df1be84
deltas: skip if projected delta size is bigger than previous snapshot
Before computing any delta, we get a basic estimation of the delta size we can
expect and the resulted compressed value. 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
significant performance boost (timing from `hg perfrevlogwrite`):
before: 14.115908 seconds
after: 3.145906 seconds
author | Valentin Gatien-Baron <vgatien-baron@janestreet.com> |
---|---|
date | Thu, 25 Apr 2019 22:50:33 +0200 |
parents | a0b26fc8fbba |
children | 6e9ba867a946 |
comparison
equal
deleted
inserted
replaced
42463:a0b26fc8fbba | 42464:66c27df1be84 |
---|---|
694 | 694 |
695 # check the absolute constraint on the delta size | 695 # check the absolute constraint on the delta size |
696 snapshotlimit = textlen >> snapshotdepth | 696 snapshotlimit = textlen >> snapshotdepth |
697 if snapshotlimit < lowestrealisticdeltalen: | 697 if snapshotlimit < lowestrealisticdeltalen: |
698 # delta lower bound is larger than accepted upper bound | 698 # delta lower bound is larger than accepted upper bound |
699 continue | |
700 | |
701 # check the relative constraint on the delta size | |
702 revlength = revlog.length(rev) | |
703 if revlength < lowestrealisticdeltalen: | |
704 # delta probable lower bound is larger than target base | |
699 continue | 705 continue |
700 | 706 |
701 group.append(rev) | 707 group.append(rev) |
702 if group: | 708 if group: |
703 # XXX: in the sparse revlog case, group can become large, | 709 # XXX: in the sparse revlog case, group can become large, |