diff --git a/tests/cstore-datapackstore.py b/tests/cstore-datapackstore.py --- a/tests/cstore-datapackstore.py +++ b/tests/cstore-datapackstore.py @@ -1,5 +1,6 @@ #!/usr/bin/env python2.7 +import copy import hashlib import os import random @@ -11,6 +12,7 @@ import silenttestrunner +from timeit import default_timer as timer # Load the local cstore, not the system one fullpath = os.path.join(os.getcwd(), __file__) sys.path.insert(0, os.path.dirname(os.path.dirname(fullpath))) @@ -20,6 +22,7 @@ ) from remotefilelog.datapack import ( + datapackstore as correctstore, fastdatapack, mutabledatapack, ) @@ -59,6 +62,45 @@ path = packer.close() return fastdatapack(path) + def testGetDeltaChainPerf(self): + """Test the performance of fetching the delta chain.""" + packdir = self.makeTempDir() + numfiles = 200 + numlines = 100 + revisions = [] + + for i in range(numfiles): + revisionlist = [] + revision = (str(i), self.getFakeHash(), nullid, "content") + + for j in range(numlines): + revisionlist.append(revision) + revision = ( + str(i), + self.getFakeHash(), + revision[1], + self.getFakeHash() + ) + + self.createPack(packdir, revisions=revisionlist) + revisions.append(revisionlist) + + store = correctstore(mercurial.ui.ui(), packdir, True) + + totaltime = 0 + random.shuffle(revisions) + for l in revisions: + oldlist = copy.deepcopy(l) + random.shuffle(l) + for r in l: + start = timer() + chain = store.getdeltachain(r[0], r[1]) + totaltime += timer() - start + self.assertEquals(oldlist.index(r) + 1, len(chain)) + + sys.stdout.write('%s seconds\n' % str(totaltime)) + sys.stdout.flush() + def testGetDeltaChainSingleRev(self): """Test getting a 1-length delta chain.""" packdir = self.makeTempDir()