# HG changeset patch # User Pierre-Yves David # Date 1572823004 -3600 # Node ID bfc68404cccd4520faeaececf829f7888c98e109 # Parent 0371a8c8482736617a746bcfb569f2cb78b9a6b3 perf: add a way to benchmark `dirstate.status` Getting more details about time spend in this specific internal bit is meaningful. diff -r 0371a8c84827 -r bfc68404cccd contrib/perf.py --- a/contrib/perf.py Thu Oct 24 11:12:17 2019 -0700 +++ b/contrib/perf.py Mon Nov 04 00:16:44 2019 +0100 @@ -760,7 +760,10 @@ @command( b'perfstatus', - [(b'u', b'unknown', False, b'ask status to look for unknown files')] + [ + (b'u', b'unknown', False, b'ask status to look for unknown files'), + (b'', b'dirstate', False, b'benchmark the internal dirstate call'), + ] + formatteropts, ) def perfstatus(ui, repo, **opts): @@ -776,7 +779,20 @@ # timer(lambda: sum(map(len, repo.dirstate.status(m, [], False, False, # False)))) timer, fm = gettimer(ui, opts) - timer(lambda: sum(map(len, repo.status(unknown=opts[b'unknown'])))) + if opts[b'dirstate']: + dirstate = repo.dirstate + m = scmutil.matchall(repo) + unknown = opts[b'unknown'] + + def status_dirstate(): + s = dirstate.status( + m, subrepos=[], ignored=False, clean=False, unknown=unknown + ) + sum(map(len, s)) + + timer(status_dirstate) + else: + timer(lambda: sum(map(len, repo.status(unknown=opts[b'unknown'])))) fm.end() diff -r 0371a8c84827 -r bfc68404cccd tests/test-contrib-perf.t --- a/tests/test-contrib-perf.t Thu Oct 24 11:12:17 2019 -0700 +++ b/tests/test-contrib-perf.t Mon Nov 04 00:16:44 2019 +0100 @@ -248,6 +248,7 @@ $ hg perfrevset 'all()' $ hg perfstartup $ hg perfstatus + $ hg perfstatus --dirstate $ hg perftags $ hg perftemplating $ hg perfvolatilesets