mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-28 21:54:10 +01:00
CLI/git: add @timed decorator, time a few functions
Perf will show which binaries are using the CPU cycles, and standard python profilers will show which python functions, but neither is great at finding which call to an external binary is taking time, or locating I/O hotspots.
This commit is contained in:
parent
f67d7c9e7a
commit
5ef56fe812
1 changed files with 18 additions and 1 deletions
|
@ -89,6 +89,20 @@ def _xapian_unquote(string):
|
||||||
return string
|
return string
|
||||||
|
|
||||||
|
|
||||||
|
def timed(fn):
|
||||||
|
"""Timer decorator"""
|
||||||
|
from time import perf_counter
|
||||||
|
|
||||||
|
def inner(*args, **kwargs):
|
||||||
|
start_time = perf_counter()
|
||||||
|
rval = fn(*args, **kwargs)
|
||||||
|
end_time = perf_counter()
|
||||||
|
_LOG.info('{0}: {1:.8f}s elapsed'.format(fn.__name__, end_time - start_time))
|
||||||
|
return rval
|
||||||
|
|
||||||
|
return inner
|
||||||
|
|
||||||
|
|
||||||
class SubprocessError(RuntimeError):
|
class SubprocessError(RuntimeError):
|
||||||
"A subprocess exited with a nonzero status"
|
"A subprocess exited with a nonzero status"
|
||||||
def __init__(self, args, status, stdout=None, stderr=None):
|
def __init__(self, args, status, stdout=None, stderr=None):
|
||||||
|
@ -321,6 +335,7 @@ def commit(treeish='HEAD', message=None):
|
||||||
_git(args=['read-tree', treeish], wait=True)
|
_git(args=['read-tree', treeish], wait=True)
|
||||||
raise
|
raise
|
||||||
|
|
||||||
|
@timed
|
||||||
def _update_index(status):
|
def _update_index(status):
|
||||||
with _git(
|
with _git(
|
||||||
args=['update-index', '--index-info'],
|
args=['update-index', '--index-info'],
|
||||||
|
@ -561,6 +576,7 @@ def _is_unmerged(ref='@{upstream}'):
|
||||||
return base != fetch_head
|
return base != fetch_head
|
||||||
|
|
||||||
|
|
||||||
|
@timed
|
||||||
def get_status():
|
def get_status():
|
||||||
status = {
|
status = {
|
||||||
'deleted': {},
|
'deleted': {},
|
||||||
|
@ -581,7 +597,7 @@ def get_status():
|
||||||
_os.remove(index)
|
_os.remove(index)
|
||||||
return status
|
return status
|
||||||
|
|
||||||
|
@timed
|
||||||
def _index_tags():
|
def _index_tags():
|
||||||
"Write notmuch tags to the nmbug.index."
|
"Write notmuch tags to the nmbug.index."
|
||||||
path = _os.path.join(NOTMUCH_GIT_DIR, 'nmbug.index')
|
path = _os.path.join(NOTMUCH_GIT_DIR, 'nmbug.index')
|
||||||
|
@ -630,6 +646,7 @@ def _index_tags_for_message(id, status, tags):
|
||||||
yield '{mode} {hash}\t{path}\n'.format(mode=mode, hash=hash, path=path)
|
yield '{mode} {hash}\t{path}\n'.format(mode=mode, hash=hash, path=path)
|
||||||
|
|
||||||
|
|
||||||
|
@timed
|
||||||
def _diff_index(index, filter):
|
def _diff_index(index, filter):
|
||||||
"""
|
"""
|
||||||
Get an {id: {tag, ...}} dict for a given filter.
|
Get an {id: {tag, ...}} dict for a given filter.
|
||||||
|
|
Loading…
Reference in a new issue