contrib/benchmarks/revset.py
changeset 30406 cff0f5926797
child 43076 2372284d9457
equal deleted inserted replaced
30405:e77e8876886f 30406:cff0f5926797
       
     1 # revset.py - asv revset benchmarks
       
     2 #
       
     3 # Copyright 2016 Logilab SA <contact@logilab.fr>
       
     4 #
       
     5 # This software may be used and distributed according to the terms of the
       
     6 # GNU General Public License version 2 or any later version.
       
     7 
       
     8 '''ASV revset benchmarks generated from contrib/base-revsets.txt
       
     9 
       
    10 Each revset benchmark is parameterized with variants (first, last, sort, ...)
       
    11 '''
       
    12 
       
    13 from __future__ import absolute_import
       
    14 
       
    15 import os
       
    16 import string
       
    17 import sys
       
    18 
       
    19 from . import basedir, perfbench
       
    20 
       
    21 def createrevsetbenchmark(baseset, variants=None):
       
    22     if variants is None:
       
    23         # Default variants
       
    24         variants = ["plain", "first", "last", "sort", "sort+first",
       
    25                     "sort+last"]
       
    26     fname = "track_" + "_".join("".join([
       
    27         c if c in string.digits + string.letters else " "
       
    28         for c in baseset
       
    29     ]).split())
       
    30 
       
    31     def wrap(fname, baseset):
       
    32         @perfbench(name=baseset, params=[("variant", variants)])
       
    33         def f(perf, variant):
       
    34             revset = baseset
       
    35             if variant != "plain":
       
    36                 for var in variant.split("+"):
       
    37                     revset = "%s(%s)" % (var, revset)
       
    38             return perf("perfrevset", revset)
       
    39         f.__name__ = fname
       
    40         return f
       
    41     return wrap(fname, baseset)
       
    42 
       
    43 def initializerevsetbenchmarks():
       
    44     mod = sys.modules[__name__]
       
    45     with open(os.path.join(basedir, 'contrib', 'base-revsets.txt'),
       
    46               'rb') as fh:
       
    47         for line in fh:
       
    48             baseset = line.strip()
       
    49             if baseset and not baseset.startswith('#'):
       
    50                 func = createrevsetbenchmark(baseset)
       
    51                 setattr(mod, func.__name__, func)
       
    52 
       
    53 initializerevsetbenchmarks()