##// END OF EJS Templates
perf: teach perfrevlogrevision about sparse reading...
Boris Feld -
r40566:914079ee default
parent child Browse files
Show More
@@ -1723,17 +1723,18 b' def perfrevlogrevision(ui, repo, file_, '
1723 inline = r._inline
1723 inline = r._inline
1724 iosize = r._io.size
1724 iosize = r._io.size
1725 buffer = util.buffer
1725 buffer = util.buffer
1726 offset = start(chain[0])
1727
1726
1728 chunks = []
1727 chunks = []
1729 ladd = chunks.append
1728 ladd = chunks.append
1730
1729 for idx, item in enumerate(chain):
1731 for rev in chain:
1730 offset = start(item[0])
1732 chunkstart = start(rev)
1731 bits = data[idx]
1733 if inline:
1732 for rev in item:
1734 chunkstart += (rev + 1) * iosize
1733 chunkstart = start(rev)
1735 chunklength = length(rev)
1734 if inline:
1736 ladd(buffer(data, chunkstart - offset, chunklength))
1735 chunkstart += (rev + 1) * iosize
1736 chunklength = length(rev)
1737 ladd(buffer(bits, chunkstart - offset, chunklength))
1737
1738
1738 return chunks
1739 return chunks
1739
1740
@@ -1745,7 +1746,8 b' def perfrevlogrevision(ui, repo, file_, '
1745 def doread(chain):
1746 def doread(chain):
1746 if not cache:
1747 if not cache:
1747 r.clearcaches()
1748 r.clearcaches()
1748 segmentforrevs(chain[0], chain[-1])
1749 for item in slicedchain:
1750 segmentforrevs(item[0], item[-1])
1749
1751
1750 def dorawchunks(data, chain):
1752 def dorawchunks(data, chain):
1751 if not cache:
1753 if not cache:
@@ -1772,9 +1774,19 b' def perfrevlogrevision(ui, repo, file_, '
1772 r.clearcaches()
1774 r.clearcaches()
1773 r.revision(node)
1775 r.revision(node)
1774
1776
1777 try:
1778 from mercurial.revlogutils.deltas import slicechunk
1779 except ImportError:
1780 slicechunk = getattr(revlog, '_slicechunk', None)
1781
1782 size = r.length(rev)
1775 chain = r._deltachain(rev)[0]
1783 chain = r._deltachain(rev)[0]
1776 data = segmentforrevs(chain[0], chain[-1])[1]
1784 if not getattr(r, '_withsparseread', False):
1777 rawchunks = getrawchunks(data, chain)
1785 slicedchain = (chain,)
1786 else:
1787 slicedchain = tuple(slicechunk(r, chain, targetsize=size))
1788 data = [segmentforrevs(seg[0], seg[-1])[1] for seg in slicedchain]
1789 rawchunks = getrawchunks(data, slicedchain)
1778 bins = r._chunks(chain)
1790 bins = r._chunks(chain)
1779 text = bytes(bins[0])
1791 text = bytes(bins[0])
1780 bins = bins[1:]
1792 bins = bins[1:]
@@ -1784,7 +1796,7 b' def perfrevlogrevision(ui, repo, file_, '
1784 (lambda: dorevision(), b'full'),
1796 (lambda: dorevision(), b'full'),
1785 (lambda: dodeltachain(rev), b'deltachain'),
1797 (lambda: dodeltachain(rev), b'deltachain'),
1786 (lambda: doread(chain), b'read'),
1798 (lambda: doread(chain), b'read'),
1787 (lambda: dorawchunks(data, chain), b'rawchunks'),
1799 (lambda: dorawchunks(data, slicedchain), b'rawchunks'),
1788 (lambda: dodecompress(rawchunks), b'decompress'),
1800 (lambda: dodecompress(rawchunks), b'decompress'),
1789 (lambda: dopatch(text, bins), b'patch'),
1801 (lambda: dopatch(text, bins), b'patch'),
1790 (lambda: dohash(text), b'hash'),
1802 (lambda: dohash(text), b'hash'),
General Comments 0
You need to be logged in to leave comments. Login now