summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNirbheek Chauhan <nirbheek@centricular.com>2018-04-25 00:02:44 +0530
committerNirbheek Chauhan <nirbheek@centricular.com>2018-04-27 07:49:18 +0530
commitb0edf465a1028b5a4d20e94a62cb062b54adc711 (patch)
treef2f78bdfbb6ebdc7977419278366880f68de1a41
parenteb6b56216ce6725741eece265d803fe8edab1c19 (diff)
downloadmeson-nirbheek/profile-support.tar.gz
New argument: --profile-self for profiling performancenirbheek/profile-support
Outputs two profile logs: one for the interpreter run and another for the backend-specific build file generation. Both are stored in meson-private in the build directory.
-rw-r--r--mesonbuild/mesonmain.py19
1 files changed, 16 insertions, 3 deletions
diff --git a/mesonbuild/mesonmain.py b/mesonbuild/mesonmain.py
index 613e953dc..f4fec95af 100644
--- a/mesonbuild/mesonmain.py
+++ b/mesonbuild/mesonmain.py
@@ -15,10 +15,12 @@
import sys, stat, traceback, argparse
import datetime
import os.path
+import platform
+import cProfile as profile
+
from . import environment, interpreter, mesonlib
from . import build
from . import mconf, mintro, mtest, rewriter, minit
-import platform
from . import mlog, coredata
from .mesonlib import MesonException
from .wrap import WrapMode, wraptool
@@ -38,6 +40,8 @@ def create_parser():
p.add_argument('--wrap-mode', default=WrapMode.default,
type=wrapmodetype, choices=WrapMode,
help='Special wrap mode to use')
+ p.add_argument('--profile-self', action='store_true', dest='profile',
+ help=argparse.SUPPRESS)
p.add_argument('directories', nargs='*')
return p
@@ -176,7 +180,11 @@ class MesonApp:
mlog.log('Target machine cpu:', mlog.bold(intr.builtin['target_machine'].cpu_method([], {})))
mlog.log('Build machine cpu family:', mlog.bold(intr.builtin['build_machine'].cpu_family_method([], {})))
mlog.log('Build machine cpu:', mlog.bold(intr.builtin['build_machine'].cpu_method([], {})))
- intr.run()
+ if self.options.profile:
+ fname = os.path.join(self.build_dir, 'meson-private', 'profile-interpreter.log')
+ profile.runctx('intr.run()', globals(), locals(), filename=fname)
+ else:
+ intr.run()
try:
dumpfile = os.path.join(env.get_scratch_dir(), 'build.dat')
# We would like to write coredata as late as possible since we use the existence of
@@ -186,7 +194,12 @@ class MesonApp:
# sync with the time that gets applied to any files. Thus, we dump this file as late as
# possible, but before build files, and if any error occurs, delete it.
cdf = env.dump_coredata()
- g.generate(intr)
+ if self.options.profile:
+ fname = 'profile-{}-backend.log'.format(self.options.backend)
+ fname = os.path.join(self.build_dir, 'meson-private', fname)
+ profile.runctx('g.generate(intr)', globals(), locals(), filename=fname)
+ else:
+ g.generate(intr)
build.save(b, dumpfile)
# Post-conf scripts must be run after writing coredata or else introspection fails.
g.run_postconf_scripts()