[PATCH 3 of 6] revlog._chunks: inline getchunk

Siddharth Agarwal sid0 at fb.com
Sat Sep 7 15:40:37 CDT 2013


# HG changeset patch
# User Siddharth Agarwal <sid0 at fb.com>
# Date 1378533471 25200
#      Fri Sep 06 22:57:51 2013 -0700
# Node ID 8c9c2c14cdfb0dd708c5f2fdd793035b1f6c8466
# Parent  6d30cb54be060a26ce4a042be8ff43b88afc9829
revlog._chunks: inline getchunk

We do this in a somewhat hacky way, relying on the fact that our sole caller
preloads the cache right before calling us. An upcoming patch will make this
more sensible.

For a 20 MB manifest with a delta chain of > 40k, perfmanifest goes from 0.49
seconds to 0.46.

diff --git a/mercurial/revlog.py b/mercurial/revlog.py
--- a/mercurial/revlog.py
+++ b/mercurial/revlog.py
@@ -863,17 +863,20 @@
         length = self.length
         inline = self._inline
         iosize = self._io.size
-        getchunk = self._getchunk
+        buffer = util.buffer
 
         l = []
         ladd = l.append
 
+        # XXX assume for now that chunkcache is preloaded
+        offset, data = self._chunkcache
+
         for rev in revs:
             chunkstart = start(rev)
             if inline:
                 chunkstart += (rev + 1) * iosize
             chunklength = length(rev)
-            ladd(decompress(getchunk(chunkstart, chunklength)))
+            ladd(decompress(buffer(data, chunkstart - offset, chunklength)))
 
         return l
 


More information about the Mercurial-devel mailing list