hg: wrap the highest layer in the `hg` script possible in trace event
This should help us have a better idea of what "interpreter startup
costs" look like. This does omit the HGUNICODEPEDANTRY block and the
LIBDIR dancing to set up sys.path, but the former is usually off and
the latter is unavoidable and should be very fast. If we get worried
about those cases we can consider open-coding the tracing logic here.
Differential Revision: https://phab.mercurial-scm.org/D4346
--- a/hg Wed Sep 12 12:01:32 2018 -0700
+++ b/hg Tue Aug 21 15:25:46 2018 -0400
@@ -27,15 +27,17 @@
libdir = os.path.abspath(libdir)
sys.path.insert(0, libdir)
-# enable importing on demand to reduce startup time
-try:
- if sys.version_info[0] < 3 or sys.version_info >= (3, 6):
- import hgdemandimport; hgdemandimport.enable()
-except ImportError:
- sys.stderr.write("abort: couldn't find mercurial libraries in [%s]\n" %
- ' '.join(sys.path))
- sys.stderr.write("(check your install and PYTHONPATH)\n")
- sys.exit(-1)
+from hgdemandimport import tracing
+with tracing.log('hg script'):
+ # enable importing on demand to reduce startup time
+ try:
+ if sys.version_info[0] < 3 or sys.version_info >= (3, 6):
+ import hgdemandimport; hgdemandimport.enable()
+ except ImportError:
+ sys.stderr.write("abort: couldn't find mercurial libraries in [%s]\n" %
+ ' '.join(sys.path))
+ sys.stderr.write("(check your install and PYTHONPATH)\n")
+ sys.exit(-1)
-from mercurial import dispatch
-dispatch.run()
+ from mercurial import dispatch
+ dispatch.run()