comparison contrib/perf.py @ 38257:a577a199983c

perftemplating: stop going through the log command Only benchmark the rendering phase by moving steps outside of the timed function: * revisions resolution, * template parsing
author Boris Feld <boris.feld@octobus.net>
date Thu, 31 May 2018 19:23:04 +0200
parents b8f75bc9f623
children ae6e02fcee24
comparison
equal deleted inserted replaced
38256:b8f75bc9f623 38257:a577a199983c
78 # <4.7. 78 # <4.7.
79 try: 79 try:
80 queue = pycompat.queue 80 queue = pycompat.queue
81 except (AttributeError, ImportError): 81 except (AttributeError, ImportError):
82 queue = util.queue 82 queue = util.queue
83
84 try:
85 from mercurial import logcmdutil
86 makelogtemplater = logcmdutil.maketemplater
87 except (AttributeError, ImportError):
88 try:
89 makelogtemplater = cmdutil.makelogtemplater
90 except (AttributeError, ImportError):
91 makelogtemplater = None
83 92
84 # for "historical portability": 93 # for "historical portability":
85 # define util.safehasattr forcibly, because util.safehasattr has been 94 # define util.safehasattr forcibly, because util.safehasattr has been
86 # available since 1.9.3 (or 94b200a11cf7) 95 # available since 1.9.3 (or 94b200a11cf7)
87 _undefined = object() 96 _undefined = object()
899 908
900 @command('perftemplating', 909 @command('perftemplating',
901 [('r', 'rev', [], 'revisions to run the template on'), 910 [('r', 'rev', [], 'revisions to run the template on'),
902 ] + formatteropts) 911 ] + formatteropts)
903 def perftemplating(ui, repo, **opts): 912 def perftemplating(ui, repo, **opts):
913 if makelogtemplater is None:
914 ui.write_err('incompatible Mercurial version')
915 return 1
916
904 nullui = ui.copy() 917 nullui = ui.copy()
905 nullui.fout = open(os.devnull, 'wb') 918 nullui.fout = open(os.devnull, 'wb')
906 nullui.disablepager() 919 nullui.disablepager()
907 revs = opts.get('rev') 920 revs = opts.get('rev')
921 if not revs:
922 revs = ['all()']
923 revs = list(scmutil.revrange(repo, revs))
924
925 template = ('{date|shortdate} [{rev}:{node|short}]'
926 ' {author|person}: {desc|firstline}\n')
927 displayer = makelogtemplater(nullui, repo, template)
908 def format(): 928 def format():
909 commands.log(nullui, repo, rev=revs, date='', user='', 929 for r in revs:
910 template='{date|shortdate} [{rev}:{node|short}]' 930 ctx = repo[r]
911 ' {author|person}: {desc|firstline}\n') 931 displayer.show(ctx)
932 displayer.flush(ctx)
912 933
913 timer, fm = gettimer(ui, opts) 934 timer, fm = gettimer(ui, opts)
914 timer(format) 935 timer(format)
915 fm.end() 936 fm.end()
916 937