mirror of
https://github.com/facebook/sapling.git
synced 2024-10-07 15:27:13 +03:00
revlog: minor chunk speed-up
This commit is contained in:
parent
d106fa8150
commit
eeb8f14a99
@ -509,7 +509,7 @@ class revlog(object):
|
|||||||
def parentrevs(self, rev):
|
def parentrevs(self, rev):
|
||||||
return self.index[rev][5:7]
|
return self.index[rev][5:7]
|
||||||
def start(self, rev):
|
def start(self, rev):
|
||||||
return getoffset(self.index[rev][0])
|
return int(self.index[rev][0] >> 16)
|
||||||
def end(self, rev):
|
def end(self, rev):
|
||||||
return self.start(rev) + self.length(rev)
|
return self.start(rev) + self.length(rev)
|
||||||
def length(self, rev):
|
def length(self, rev):
|
||||||
@ -845,12 +845,7 @@ class revlog(object):
|
|||||||
return hash(text, p1, p2) != node
|
return hash(text, p1, p2) != node
|
||||||
|
|
||||||
def chunk(self, rev, df=None):
|
def chunk(self, rev, df=None):
|
||||||
start, length = self.start(rev), self.length(rev)
|
|
||||||
if self._inline:
|
|
||||||
start += (rev + 1) * self._io.size
|
|
||||||
end = start + length
|
|
||||||
def loadcache(df):
|
def loadcache(df):
|
||||||
cache_length = max(65536, length)
|
|
||||||
if not df:
|
if not df:
|
||||||
if self._inline:
|
if self._inline:
|
||||||
df = self.opener(self.indexfile)
|
df = self.opener(self.indexfile)
|
||||||
@ -859,21 +854,29 @@ class revlog(object):
|
|||||||
df.seek(start)
|
df.seek(start)
|
||||||
self._chunkcache = (start, df.read(cache_length))
|
self._chunkcache = (start, df.read(cache_length))
|
||||||
|
|
||||||
if not self._chunkcache:
|
start, length = self.start(rev), self.length(rev)
|
||||||
loadcache(df)
|
if self._inline:
|
||||||
|
start += (rev + 1) * self._io.size
|
||||||
|
end = start + length
|
||||||
|
|
||||||
cache_start = self._chunkcache[0]
|
offset = 0
|
||||||
cache_end = cache_start + len(self._chunkcache[1])
|
if not self._chunkcache:
|
||||||
if start >= cache_start and end <= cache_end:
|
cache_length = max(65536, length)
|
||||||
# it is cached
|
|
||||||
offset = start - cache_start
|
|
||||||
else:
|
|
||||||
loadcache(df)
|
loadcache(df)
|
||||||
offset = 0
|
else:
|
||||||
|
cache_start = self._chunkcache[0]
|
||||||
|
cache_length = len(self._chunkcache[1])
|
||||||
|
cache_end = cache_start + cache_length
|
||||||
|
if start >= cache_start and end <= cache_end:
|
||||||
|
# it is cached
|
||||||
|
offset = start - cache_start
|
||||||
|
else:
|
||||||
|
cache_length = max(65536, length)
|
||||||
|
loadcache(df)
|
||||||
|
|
||||||
# avoid copying large chunks
|
# avoid copying large chunks
|
||||||
c = self._chunkcache[1]
|
c = self._chunkcache[1]
|
||||||
if len(c) > length:
|
if cache_length != length:
|
||||||
c = c[offset:offset + length]
|
c = c[offset:offset + length]
|
||||||
|
|
||||||
return decompress(c)
|
return decompress(c)
|
||||||
|
Loading…
Reference in New Issue
Block a user