##// END OF EJS Templates
revlog: minor chunk speed-up
Matt Mackall -
r5006:c2febf54 default
parent child Browse files
Show More
@@ -509,7 +509,7 b' class revlog(object):'
509 def parentrevs(self, rev):
509 def parentrevs(self, rev):
510 return self.index[rev][5:7]
510 return self.index[rev][5:7]
511 def start(self, rev):
511 def start(self, rev):
512 return getoffset(self.index[rev][0])
512 return int(self.index[rev][0] >> 16)
513 def end(self, rev):
513 def end(self, rev):
514 return self.start(rev) + self.length(rev)
514 return self.start(rev) + self.length(rev)
515 def length(self, rev):
515 def length(self, rev):
@@ -845,12 +845,7 b' class revlog(object):'
845 return hash(text, p1, p2) != node
845 return hash(text, p1, p2) != node
846
846
847 def chunk(self, rev, df=None):
847 def chunk(self, rev, df=None):
848 start, length = self.start(rev), self.length(rev)
849 if self._inline:
850 start += (rev + 1) * self._io.size
851 end = start + length
852 def loadcache(df):
848 def loadcache(df):
853 cache_length = max(65536, length)
854 if not df:
849 if not df:
855 if self._inline:
850 if self._inline:
856 df = self.opener(self.indexfile)
851 df = self.opener(self.indexfile)
@@ -859,21 +854,29 b' class revlog(object):'
859 df.seek(start)
854 df.seek(start)
860 self._chunkcache = (start, df.read(cache_length))
855 self._chunkcache = (start, df.read(cache_length))
861
856
862 if not self._chunkcache:
857 start, length = self.start(rev), self.length(rev)
863 loadcache(df)
858 if self._inline:
859 start += (rev + 1) * self._io.size
860 end = start + length
864
861
865 cache_start = self._chunkcache[0]
862 offset = 0
866 cache_end = cache_start + len(self._chunkcache[1])
863 if not self._chunkcache:
867 if start >= cache_start and end <= cache_end:
864 cache_length = max(65536, length)
868 # it is cached
865 loadcache(df)
869 offset = start - cache_start
870 else:
866 else:
871 loadcache(df)
867 cache_start = self._chunkcache[0]
872 offset = 0
868 cache_length = len(self._chunkcache[1])
869 cache_end = cache_start + cache_length
870 if start >= cache_start and end <= cache_end:
871 # it is cached
872 offset = start - cache_start
873 else:
874 cache_length = max(65536, length)
875 loadcache(df)
873
876
874 # avoid copying large chunks
877 # avoid copying large chunks
875 c = self._chunkcache[1]
878 c = self._chunkcache[1]
876 if len(c) > length:
879 if cache_length != length:
877 c = c[offset:offset + length]
880 c = c[offset:offset + length]
878
881
879 return decompress(c)
882 return decompress(c)
General Comments 0
You need to be logged in to leave comments. Login now