comparison mercurial/revlogutils/debug.py @ 51078:752e380c5702

debug-delta-chain: add options to control what we compute Currently this mostly controls what we display, but actual computation saving will come soon.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Tue, 19 Sep 2023 01:53:03 +0200
parents 810446d2d5ef
children 5b5cb6b833b0
comparison
equal deleted inserted replaced
51077:810446d2d5ef 51078:752e380c5702
796 break 796 break
797 e = self._index[iter_rev] 797 e = self._index[iter_rev]
798 chain_size += e[constants.ENTRY_DATA_COMPRESSED_LENGTH] 798 chain_size += e[constants.ENTRY_DATA_COMPRESSED_LENGTH]
799 self._chain_size_cache[rev] = chain_size 799 self._chain_size_cache[rev] = chain_size
800 800
801 return p1, p2, compsize, uncompsize, deltatype, chain, chain_size 801 return {
802 802 'p1': p1,
803 803 'p2': p2,
804 def debug_delta_chain(revlog, revs=None): 804 'compressed_size': compsize,
805 'uncompressed_size': uncompsize,
806 'deltatype': deltatype,
807 'chain': chain,
808 'chain_size': chain_size,
809 }
810
811
812 def debug_delta_chain(
813 revlog,
814 revs=None,
815 size_info=True,
816 dist_info=True,
817 sparse_info=True,
818 ):
805 auditor = DeltaChainAuditor(revlog) 819 auditor = DeltaChainAuditor(revlog)
806 r = revlog 820 r = revlog
807 start = r.start 821 start = r.start
808 length = r.length 822 length = r.length
809 withsparseread = revlog.data_config.with_sparse_read 823 withsparseread = revlog.data_config.with_sparse_read
810 824
811 header = ( 825 header = (
812 b' rev p1 p2 chain# chainlen prev delta ' 826 b' rev'
813 b'size rawsize chainsize ratio lindist extradist ' 827 b' p1'
814 b'extraratio' 828 b' p2'
815 ) 829 b' chain#'
816 if withsparseread: 830 b' chainlen'
817 header += b' readsize largestblk rddensity srchunks' 831 b' prev'
832 b' delta'
833 )
834 if size_info:
835 header += b' size' b' rawsize' b' chainsize' b' ratio'
836 if dist_info:
837 header += b' lindist' b' extradist' b' extraratio'
838 if withsparseread and sparse_info:
839 header += b' readsize' b' largestblk' b' rddensity' b' srchunks'
818 header += b'\n' 840 header += b'\n'
819 yield header 841 yield header
820 842
821 if revs is None: 843 if revs is None:
822 all_revs = iter(r) 844 all_revs = iter(r)
824 revlog_size = len(r) 846 revlog_size = len(r)
825 all_revs = sorted(rev for rev in revs if rev < revlog_size) 847 all_revs = sorted(rev for rev in revs if rev < revlog_size)
826 848
827 chainbases = {} 849 chainbases = {}
828 for rev in all_revs: 850 for rev in all_revs:
829 p1, p2, comp, uncomp, deltatype, chain, chainsize = auditor.revinfo(rev) 851 info = auditor.revinfo(rev)
852 comp = info['compressed_size']
853 uncomp = info['uncompressed_size']
854 chain = info['chain']
830 chainbase = chain[0] 855 chainbase = chain[0]
831 chainid = chainbases.setdefault(chainbase, len(chainbases) + 1) 856 chainid = chainbases.setdefault(chainbase, len(chainbases) + 1)
832 basestart = start(chainbase) 857 basestart = start(chainbase)
833 revstart = start(rev) 858 revstart = start(rev)
834 lineardist = revstart + comp - basestart 859 lineardist = revstart + comp - basestart
860 chainsize = info['chain_size']
835 extradist = lineardist - chainsize 861 extradist = lineardist - chainsize
836 try: 862 try:
837 prevrev = chain[-2] 863 prevrev = chain[-2]
838 except IndexError: 864 except IndexError:
839 prevrev = -1 865 prevrev = -1
849 extraratio = extradist 875 extraratio = extradist
850 876
851 # label, display-format, data-key, value 877 # label, display-format, data-key, value
852 entry = [ 878 entry = [
853 (b'rev', b'%7d', 'rev', rev), 879 (b'rev', b'%7d', 'rev', rev),
854 (b'p1', b'%7d', 'p1', p1), 880 (b'p1', b'%7d', 'p1', info['p1']),
855 (b'p2', b'%7d', 'p2', p2), 881 (b'p2', b'%7d', 'p2', info['p2']),
856 (b'chainid', b'%7d', 'chainid', chainid), 882 (b'chainid', b'%7d', 'chainid', chainid),
857 (b'chainlen', b'%8d', 'chainlen', len(chain)), 883 (b'chainlen', b'%8d', 'chainlen', len(chain)),
858 (b'prevrev', b'%8d', 'prevrev', prevrev), 884 (b'prevrev', b'%8d', 'prevrev', prevrev),
859 (b'deltatype', b'%7s', 'deltatype', deltatype), 885 (b'deltatype', b'%7s', 'deltatype', info['deltatype']),
860 (b'compsize', b'%10d', 'compsize', comp),
861 (b'uncompsize', b'%10d', 'uncompsize', uncomp),
862 (b'chainsize', b'%10d', 'chainsize', chainsize),
863 (b'chainratio', b'%9.5f', 'chainratio', chainratio),
864 (b'lindist', b'%9d', 'lindist', lineardist),
865 (b'extradist', b'%9d', 'extradist', extradist),
866 (b'extraratio', b'%10.5f', 'extraratio', extraratio),
867 ] 886 ]
868 if withsparseread: 887 if size_info:
888 entry.extend(
889 [
890 (b'compsize', b'%10d', 'compsize', comp),
891 (b'uncompsize', b'%10d', 'uncompsize', uncomp),
892 (b'chainsize', b'%10d', 'chainsize', chainsize),
893 (b'chainratio', b'%9.5f', 'chainratio', chainratio),
894 ]
895 )
896 if dist_info:
897 entry.extend(
898 [
899 (b'lindist', b'%9d', 'lindist', lineardist),
900 (b'extradist', b'%9d', 'extradist', extradist),
901 (b'extraratio', b'%10.5f', 'extraratio', extraratio),
902 ]
903 )
904 if withsparseread and sparse_info:
869 readsize = 0 905 readsize = 0
870 largestblock = 0 906 largestblock = 0
871 srchunks = 0 907 srchunks = 0
872 908
873 for revschunk in deltautil.slicechunk(r, chain): 909 for revschunk in deltautil.slicechunk(r, chain):