Mercurial > hg
comparison mercurial/ui.py @ 40524:25732c5678bc
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.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Sat, 03 Nov 2018 17:47:23 +0900 |
parents | 0c7b2035a604 |
children | c5e964f75bf7 |
comparison
equal
deleted
inserted
replaced
40523:0c7b2035a604 | 40524:25732c5678bc |
---|---|
950 self._writenobuf(self._write, *args, **opts) | 950 self._writenobuf(self._write, *args, **opts) |
951 | 951 |
952 def _writenobuf(self, write, *args, **opts): | 952 def _writenobuf(self, write, *args, **opts): |
953 self._progclear() | 953 self._progclear() |
954 msg = b''.join(args) | 954 msg = b''.join(args) |
955 | |
956 # opencode timeblockedsection because this is a critical path | |
957 starttime = util.timer() | |
955 try: | 958 try: |
956 if self._colormode == 'win32': | 959 if self._colormode == 'win32': |
957 # windows color printing is its own can of crab, defer to | 960 # windows color printing is its own can of crab, defer to |
958 # the color module and that is it. | 961 # the color module and that is it. |
959 color.win32print(self, write, msg, **opts) | 962 color.win32print(self, write, msg, **opts) |
961 if self._colormode is not None: | 964 if self._colormode is not None: |
962 label = opts.get(r'label', '') | 965 label = opts.get(r'label', '') |
963 msg = self.label(msg, label) | 966 msg = self.label(msg, label) |
964 write(msg) | 967 write(msg) |
965 finally: | 968 finally: |
966 pass | 969 self._blockedtimes['stdio_blocked'] += \ |
970 (util.timer() - starttime) * 1000 | |
967 | 971 |
968 def _write(self, data): | 972 def _write(self, data): |
969 # opencode timeblockedsection because this is a critical path | |
970 starttime = util.timer() | |
971 try: | 973 try: |
972 self.fout.write(data) | 974 self.fout.write(data) |
973 except IOError as err: | 975 except IOError as err: |
974 raise error.StdioError(err) | 976 raise error.StdioError(err) |
975 finally: | |
976 self._blockedtimes['stdio_blocked'] += \ | |
977 (util.timer() - starttime) * 1000 | |
978 | 977 |
979 def write_err(self, *args, **opts): | 978 def write_err(self, *args, **opts): |
980 if self._bufferstates and self._bufferstates[-1][0]: | 979 if self._bufferstates and self._bufferstates[-1][0]: |
981 self.write(*args, **opts) | 980 self.write(*args, **opts) |
982 else: | 981 else: |
983 self._writenobuf(self._write_err, *args, **opts) | 982 self._writenobuf(self._write_err, *args, **opts) |
984 | 983 |
985 def _write_err(self, data): | 984 def _write_err(self, data): |
986 try: | 985 try: |
987 with self.timeblockedsection('stdio'): | 986 if True: |
988 if not getattr(self.fout, 'closed', False): | 987 if not getattr(self.fout, 'closed', False): |
989 self.fout.flush() | 988 self.fout.flush() |
990 self.ferr.write(data) | 989 self.ferr.write(data) |
991 # stderr may be buffered under win32 when redirected to files, | 990 # stderr may be buffered under win32 when redirected to files, |
992 # including stdout. | 991 # including stdout. |