diff mercurial/profiling.py @ 51585:1574718fa62f

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.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Sun, 14 Apr 2024 02:36:55 +0200
parents 18c8c18993f0
children 812a094a7477 1bb71046f5e0
line wrap: on
line diff
--- 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: