From: David Bremner <david@tethera.net>
To: notmuch@notmuchmail.org
Subject: [PATCH 11/17] CLI/git: add @timed decorator, time a few functions
Date: Sun, 15 May 2022 15:14:16 -0300 [thread overview]
Message-ID: <20220515181421.57088-12-david@tethera.net> (raw)
In-Reply-To: <20220515181421.57088-1-david@tethera.net>
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.
---
notmuch-git.in | 19 ++++++++++++++++++-
1 file changed, 18 insertions(+), 1 deletion(-)
diff --git a/notmuch-git.in b/notmuch-git.in
index 1d2dcd53..0aabfb60 100755
--- a/notmuch-git.in
+++ b/notmuch-git.in
@@ -91,6 +91,20 @@ def _xapian_unquote(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):
"A subprocess exited with a nonzero status"
def __init__(self, args, status, stdout=None, stderr=None):
@@ -323,6 +337,7 @@ def commit(treeish='HEAD', message=None):
_git(args=['read-tree', treeish], wait=True)
raise
+@timed
def _update_index(status):
with _git(
args=['update-index', '--index-info'],
@@ -563,6 +578,7 @@ def _is_unmerged(ref='@{upstream}'):
return base != fetch_head
+@timed
def get_status():
status = {
'deleted': {},
@@ -583,7 +599,7 @@ def get_status():
_os.remove(index)
return status
-
+@timed
def _index_tags():
"Write notmuch tags to the nmbug.index."
path = _os.path.join(NOTMUCH_GIT_DIR, 'nmbug.index')
@@ -632,6 +648,7 @@ def _index_tags_for_message(id, status, tags):
yield '{mode} {hash}\t{path}\n'.format(mode=mode, hash=hash, path=path)
+@timed
def _diff_index(index, filter):
"""
Get an {id: {tag, ...}} dict for a given filter.
--
2.35.2
next prev parent reply other threads:[~2022-05-15 18:18 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-05-15 18:14 notmuch-git David Bremner
2022-05-15 18:14 ` [PATCH 01/17] nmbug: promote to user tool "notmuch-git" David Bremner
2022-05-15 18:14 ` [PATCH 02/17] CLI/git: drop support for python < 3.2 David Bremner
2022-05-15 18:14 ` [PATCH 03/17] notmuch-git: add --git-dir, --tag-prefix arguments David Bremner
2022-05-15 18:14 ` [PATCH 04/17] CLI/git: make existance of config branch optional on clone David Bremner
2022-05-15 18:14 ` [PATCH 05/17] CLI/git: Add an 'init' command David Bremner
2022-05-15 18:14 ` [PATCH 06/17] test: initial tests for notmuch-git David Bremner
2022-05-15 18:14 ` [PATCH 07/17] CLI/git: rename environment variables David Bremner
2022-05-15 18:14 ` [PATCH 08/17] CLI/git: suppress warnings about initial branch name David Bremner
2022-05-15 18:14 ` [PATCH 09/17] test/git: add known broken test for tag with quotes David Bremner
2022-05-15 18:14 ` [PATCH 10/17] CLI/git: replace enumeration of tags with sexp query David Bremner
2022-05-15 18:14 ` David Bremner [this message]
2022-05-15 18:14 ` [PATCH 12/17] CLI/git: cache git indices David Bremner
2022-05-15 18:14 ` [PATCH 13/17] doc/notmuch-git: initial documentation David Bremner
2022-05-15 18:14 ` [PATCH 14/17] CLI/git: change defaults for repo and prefix David Bremner
2022-05-15 18:14 ` [PATCH 15/17] CLI/git: support configuration for repo location / prefix David Bremner
2022-05-15 18:14 ` [PATCH 16/17] CLI/git: add safety checks for checkout and commit David Bremner
2022-05-15 18:14 ` [PATCH 17/17] debian: install notmuch-git David Bremner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://notmuchmail.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220515181421.57088-12-david@tethera.net \
--to=david@tethera.net \
--cc=notmuch@notmuchmail.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://yhetil.org/notmuch.git/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).