profiler: flush after writing the profiler output
Otherwise, the profiler output might only partially appears until the next flush
of the buffer. Since profiling often happens for long operation, the next flush
can be a long time away.
--- a/mercurial/profiling.py Sun Apr 14 02:33:36 2024 +0200
+++ b/mercurial/profiling.py Sun Apr 14 02:36:55 2024 +0200
@@ -70,6 +70,7 @@
stats = lsprof.Stats(p.getstats())
stats.sort(pycompat.sysstr(field))
stats.pprint(limit=limit, file=fp, climit=climit)
+ fp.flush()
@contextlib.contextmanager
@@ -97,14 +98,15 @@
finally:
thread.stop()
thread.join()
- print(
- b'Collected %d stack frames (%d unique) in %2.2f seconds.'
- % (
+ m = b'Collected %d stack frames (%d unique) in %2.2f seconds.'
+ m %= (
+ (
util.timer() - start_time,
thread.num_frames(),
thread.num_frames(unique=True),
- )
+ ),
)
+ print(m, flush=True)
@contextlib.contextmanager
@@ -170,6 +172,7 @@
kwargs['showtime'] = showtime
statprof.display(fp, data=data, format=displayformat, **kwargs)
+ fp.flush()
class profile: