Mercurial > hg
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: |