From patchwork Sun Nov 4 12:55:26 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [6,of,6] ui: wrap whole _write() block with timeblockedsection From: Yuya Nishihara X-Patchwork-Id: 36361 Message-Id: To: mercurial-devel@mercurial-scm.org Date: Sun, 04 Nov 2018 21:55:26 +0900 # HG changeset patch # User Yuya Nishihara # Date 1541234843 -32400 # Sat Nov 03 17:47:23 2018 +0900 # Node ID ff828815f180a36706d51602ecd451d9294f0c36 # Parent 03e070898f1b617263663a2c0cee2eb3599d8c2a ui: wrap whole _write() block with timeblockedsection I think the cost of color labeling is negligible compared to the I/O syscalls. Let's simply wrap the whole write() function so that we can eliminate _write() and _write_err() in later changeset. diff --git a/mercurial/ui.py b/mercurial/ui.py --- a/mercurial/ui.py +++ b/mercurial/ui.py @@ -952,6 +952,9 @@ class ui(object): def _writenobuf(self, write, *args, **opts): self._progclear() msg = b''.join(args) + + # opencode timeblockedsection because this is a critical path + starttime = util.timer() try: if self._colormode == 'win32': # windows color printing is its own can of crab, defer to @@ -963,18 +966,14 @@ class ui(object): msg = self.label(msg, label) write(msg) finally: - pass + self._blockedtimes['stdio_blocked'] += \ + (util.timer() - starttime) * 1000 def _write(self, data): - # opencode timeblockedsection because this is a critical path - starttime = util.timer() try: self.fout.write(data) except IOError as err: raise error.StdioError(err) - finally: - self._blockedtimes['stdio_blocked'] += \ - (util.timer() - starttime) * 1000 def write_err(self, *args, **opts): if self._bufferstates and self._bufferstates[-1][0]: @@ -984,7 +983,7 @@ class ui(object): def _write_err(self, data): try: - with self.timeblockedsection('stdio'): + if True: if not getattr(self.fout, 'closed', False): self.fout.flush() self.ferr.write(data)