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,