comparison contrib/perf.py @ 32390:f90419a90cc3

perf: allow to clear the obsstore in 'perfvolatilesets' Loading the obsstore can become a large part of the time necessary to compute the important volatile set. We add a flag purging all known obsstore related data. For example, computing the 'bumped' set currently requires reading the full obsstore, so timing greatly differ with or without that flag: Without: ! bumped ! wall 0.005047 comb 0.000000 user 0.000000 sys 0.000000 (best of 446) With: ! bumped ! wall 0.512367 comb 0.510000 user 0.480000 sys 0.030000 (best of 15)
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Sun, 21 May 2017 13:32:07 +0200
parents 04baab18d60a
children ad37c569ec81
comparison
equal deleted inserted replaced
32389:4e51b2a99847 32390:f90419a90cc3
1127 else: 1127 else:
1128 for r in repo.revs(expr): pass 1128 for r in repo.revs(expr): pass
1129 timer(d) 1129 timer(d)
1130 fm.end() 1130 fm.end()
1131 1131
1132 @command('perfvolatilesets', formatteropts) 1132 def _clearobsstore(repo):
1133 unfi = repo.unfiltered()
1134 if 'obsstore' in vars(unfi):
1135 del unfi.obsstore
1136 del unfi._filecache['obsstore']
1137
1138 @command('perfvolatilesets',
1139 [('', 'clear-obsstore', False, 'drop obsstore between each call.'),
1140 ] + formatteropts)
1133 def perfvolatilesets(ui, repo, *names, **opts): 1141 def perfvolatilesets(ui, repo, *names, **opts):
1134 """benchmark the computation of various volatile set 1142 """benchmark the computation of various volatile set
1135 1143
1136 Volatile set computes element related to filtering and obsolescence.""" 1144 Volatile set computes element related to filtering and obsolescence."""
1137 timer, fm = gettimer(ui, opts) 1145 timer, fm = gettimer(ui, opts)
1138 repo = repo.unfiltered() 1146 repo = repo.unfiltered()
1139 1147
1140 def getobs(name): 1148 def getobs(name):
1141 def d(): 1149 def d():
1142 repo.invalidatevolatilesets() 1150 repo.invalidatevolatilesets()
1151 if opts['clear_obsstore']:
1152 _clearobsstore(repo)
1143 obsolete.getrevs(repo, name) 1153 obsolete.getrevs(repo, name)
1144 return d 1154 return d
1145 1155
1146 allobs = sorted(obsolete.cachefuncs) 1156 allobs = sorted(obsolete.cachefuncs)
1147 if names: 1157 if names:
1151 timer(getobs(name), title=name) 1161 timer(getobs(name), title=name)
1152 1162
1153 def getfiltered(name): 1163 def getfiltered(name):
1154 def d(): 1164 def d():
1155 repo.invalidatevolatilesets() 1165 repo.invalidatevolatilesets()
1166 if opts['clear_obsstore']:
1167 _clearobsstore(repo)
1156 repoview.filterrevs(repo, name) 1168 repoview.filterrevs(repo, name)
1157 return d 1169 return d
1158 1170
1159 allfilter = sorted(repoview.filtertable) 1171 allfilter = sorted(repoview.filtertable)
1160 if names: 1172 if names: