Python: CG trace: Improve performance by only logging when needed · ByteDecoder/codeql@3ead2e3 · GitHub
Skip to content

Commit 3ead2e3

Browse files
committed
Python: CG trace: Improve performance by only logging when needed
Seems like a 2x performance overall wcwidth: - DEBUG=True 5.78 seconds - DEBUG=False 2.70 seconds youtube-dl - DEBUG=True 238.90 seconds - DEBUG=False 120.70 seconds
1 parent fbd9391 commit 3ead2e3

5 files changed

Lines changed: 51 additions & 28 deletions

File tree

python/tools/recorded-call-graph-metrics/src/cg_trace/bytecode_reconstructor.py

Lines changed: 22 additions & 18 deletions

python/tools/recorded-call-graph-metrics/src/cg_trace/cmdline.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44
def parse(args):
55
parser = argparse.ArgumentParser()
66

7+
parser.add_argument(
8+
"--debug", action="store_true", default=False, help="Enable debug logging"
9+
)
10+
711
parser.add_argument("--xml")
812

913
parser.add_argument(

python/tools/recorded-call-graph-metrics/src/cg_trace/main.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from datetime import datetime
77
from io import StringIO
88

9-
from cg_trace import __version__, cmdline, tracer
9+
from cg_trace import __version__, cmdline, settings, tracer
1010
from cg_trace.exporter import XMLExporter
1111

1212

@@ -31,18 +31,17 @@ def record_calls(code, globals):
3131
return all_calls_sorted, captured_stdout, captured_stderr, exit_status
3232

3333

34-
def setup_logging():
34+
def setup_logging(debug):
3535
# code we run can also set up logging, so we need to set the level directly on our
3636
# own pacakge
3737
sh = logging.StreamHandler(stream=sys.stderr)
3838

3939
pkg_logger = logging.getLogger("cg_trace")
4040
pkg_logger.addHandler(sh)
41-
pkg_logger.setLevel(logging.INFO)
41+
pkg_logger.setLevel(logging.CRITICAL if debug else logging.INFO)
4242

4343

4444
def main(args=None) -> int:
45-
setup_logging()
4645

4746
# from . import bytecode_reconstructor
4847
# logging.getLogger(bytecode_reconstructor.__name__).setLevel(logging.INFO)
@@ -53,6 +52,9 @@ def main(args=None) -> int:
5352

5453
opts = cmdline.parse(args)
5554

55+
settings.DEBUG = opts.debug
56+
setup_logging(opts.debug)
57+
5658
# These details of setting up the program to be run is very much inspired by `trace`
5759
# from the standard library
5860
if opts.module:
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Whether to run the call graph tracer with debugging enabled. Turning off
2+
# `if DEBUG: LOGGER.debug()` code completely yielded massive performance improvements.
3+
DEBUG = False
4+
5+
6+
FAIL_ON_UNKNOWN_BYTECODE = False

python/tools/recorded-call-graph-metrics/src/cg_trace/tracer.py

Lines changed: 13 additions & 6 deletions

0 commit comments

Comments
 (0)