[PATCH 6 of 6] ui: wrap whole _write() block with timeblockedsection

Yuya Nishihara yuya at tcha.org
Sun Nov 4 07:55:26 EST 2018


# HG changeset patch
# User Yuya Nishihara <yuya at tcha.org>
# 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)


More information about the Mercurial-devel mailing list