2888 # the context is exited. |
2888 # the context is exited. |
2889 elapsed = attr.ib(default=0) |
2889 elapsed = attr.ib(default=0) |
2890 # the number of nested timedcm context managers. |
2890 # the number of nested timedcm context managers. |
2891 level = attr.ib(default=1) |
2891 level = attr.ib(default=1) |
2892 |
2892 |
2893 def __str__(self): |
2893 def __bytes__(self): |
2894 return timecount(self.elapsed) if self.elapsed else '<unknown>' |
2894 return timecount(self.elapsed) if self.elapsed else '<unknown>' |
|
2895 |
|
2896 __str__ = encoding.strmethod(__bytes__) |
2895 |
2897 |
2896 @contextlib.contextmanager |
2898 @contextlib.contextmanager |
2897 def timedcm(): |
2899 def timedcm(): |
2898 """A context manager that produces timing information for a given context. |
2900 """A context manager that produces timing information for a given context. |
2899 |
2901 |
2927 def wrapper(*args, **kwargs): |
2929 def wrapper(*args, **kwargs): |
2928 with timedcm() as time_stats: |
2930 with timedcm() as time_stats: |
2929 result = func(*args, **kwargs) |
2931 result = func(*args, **kwargs) |
2930 stderr = procutil.stderr |
2932 stderr = procutil.stderr |
2931 stderr.write('%s%s: %s\n' % ( |
2933 stderr.write('%s%s: %s\n' % ( |
2932 ' ' * time_stats.level * 2, func.__name__, time_stats)) |
2934 ' ' * time_stats.level * 2, pycompat.bytestr(func.__name__), |
|
2935 time_stats)) |
2933 return result |
2936 return result |
2934 return wrapper |
2937 return wrapper |
2935 |
2938 |
2936 _sizeunits = (('m', 2**20), ('k', 2**10), ('g', 2**30), |
2939 _sizeunits = (('m', 2**20), ('k', 2**10), ('g', 2**30), |
2937 ('kb', 2**10), ('mb', 2**20), ('gb', 2**30), ('b', 1)) |
2940 ('kb', 2**10), ('mb', 2**20), ('gb', 2**30), ('b', 1)) |