##// END OF EJS Templates
perf: split obtaining chunks from decompression...
Gregory Szorc -
r30882:74cfc435 default
parent child Browse files
Show More
@@ -993,6 +993,26 b' def perfrevlogrevision(ui, repo, file_, '
993 node = r.lookup(rev)
993 node = r.lookup(rev)
994 rev = r.rev(node)
994 rev = r.rev(node)
995
995
996 def getrawchunks(data, chain):
997 start = r.start
998 length = r.length
999 inline = r._inline
1000 iosize = r._io.size
1001 buffer = util.buffer
1002 offset = start(chain[0])
1003
1004 chunks = []
1005 ladd = chunks.append
1006
1007 for rev in chain:
1008 chunkstart = start(rev)
1009 if inline:
1010 chunkstart += (rev + 1) * iosize
1011 chunklength = length(rev)
1012 ladd(buffer(data, chunkstart - offset, chunklength))
1013
1014 return chunks
1015
996 def dodeltachain(rev):
1016 def dodeltachain(rev):
997 if not cache:
1017 if not cache:
998 r.clearcaches()
1018 r.clearcaches()
@@ -1003,24 +1023,15 b' def perfrevlogrevision(ui, repo, file_, '
1003 r.clearcaches()
1023 r.clearcaches()
1004 r._chunkraw(chain[0], chain[-1])
1024 r._chunkraw(chain[0], chain[-1])
1005
1025
1006 def dodecompress(data, chain):
1026 def dorawchunks(data, chain):
1007 if not cache:
1027 if not cache:
1008 r.clearcaches()
1028 r.clearcaches()
1009
1029 getrawchunks(data, chain)
1010 start = r.start
1011 length = r.length
1012 inline = r._inline
1013 iosize = r._io.size
1014 buffer = util.buffer
1015 offset = start(chain[0])
1016
1030
1017 for rev in chain:
1031 def dodecompress(chunks):
1018 chunkstart = start(rev)
1032 decomp = r.decompress
1019 if inline:
1033 for chunk in chunks:
1020 chunkstart += (rev + 1) * iosize
1034 decomp(chunk)
1021 chunklength = length(rev)
1022 b = buffer(data, chunkstart - offset, chunklength)
1023 r.decompress(b)
1024
1035
1025 def dopatch(text, bins):
1036 def dopatch(text, bins):
1026 if not cache:
1037 if not cache:
@@ -1039,6 +1050,7 b' def perfrevlogrevision(ui, repo, file_, '
1039
1050
1040 chain = r._deltachain(rev)[0]
1051 chain = r._deltachain(rev)[0]
1041 data = r._chunkraw(chain[0], chain[-1])[1]
1052 data = r._chunkraw(chain[0], chain[-1])[1]
1053 rawchunks = getrawchunks(data, chain)
1042 bins = r._chunks(chain)
1054 bins = r._chunks(chain)
1043 text = str(bins[0])
1055 text = str(bins[0])
1044 bins = bins[1:]
1056 bins = bins[1:]
@@ -1048,7 +1060,8 b' def perfrevlogrevision(ui, repo, file_, '
1048 (lambda: dorevision(), 'full'),
1060 (lambda: dorevision(), 'full'),
1049 (lambda: dodeltachain(rev), 'deltachain'),
1061 (lambda: dodeltachain(rev), 'deltachain'),
1050 (lambda: doread(chain), 'read'),
1062 (lambda: doread(chain), 'read'),
1051 (lambda: dodecompress(data, chain), 'decompress'),
1063 (lambda: dorawchunks(data, chain), 'rawchunks'),
1064 (lambda: dodecompress(rawchunks), 'decompress'),
1052 (lambda: dopatch(text, bins), 'patch'),
1065 (lambda: dopatch(text, bins), 'patch'),
1053 (lambda: dohash(text), 'hash'),
1066 (lambda: dohash(text), 'hash'),
1054 ]
1067 ]
General Comments 0
You need to be logged in to leave comments. Login now