diff options
-rw-r--r-- | build-aux/measurestack/analyze.py | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/build-aux/measurestack/analyze.py b/build-aux/measurestack/analyze.py index 2485970..3996b3b 100644 --- a/build-aux/measurestack/analyze.py +++ b/build-aux/measurestack/analyze.py @@ -9,6 +9,9 @@ import typing from . import vcg +# Whether to print "//dbg-nstatic:" lines that trace nstatic() execution +dbg_nstatic = False + # pylint: disable=unused-variable __all__ = [ "BaseName", @@ -337,8 +340,6 @@ def analyze( dynamic: set[QName] = set() included_funcs: set[QName] = set() - dbg = False - track_inclusion: bool = True skipmodels = app.skipmodels() @@ -351,16 +352,15 @@ def analyze( _nstatic_cache: dict[QName, int] = {} def _nstatic(chain: list[QName], funcname: QName) -> tuple[int, int]: - nonlocal dbg nonlocal track_inclusion assert funcname in graphdata.graph def putdbg(msg: str) -> None: - print(f"//dbg: {'- '*len(chain)}{msg}") + print(f"//dbg-nstatic: {'- '*len(chain)}{msg}") node = graphdata.graph[funcname] - if dbg: + if dbg_nstatic: putdbg(f"{funcname}\t{node.nstatic}") if node.usage_kind == "dynamic" or node.ndynamic > 0: dynamic.add(funcname) @@ -383,12 +383,12 @@ def analyze( if skipmodel: skip, _ = skipmodel(chain, call_orig_qname) if skip: - if dbg: + if dbg_nstatic: putdbg(f"{call_orig_qname}\tskip missing") continue if not call_missing_ok: missing.add(call_orig_qname) - if dbg: + if dbg_nstatic: putdbg(f"{call_orig_qname}\tmissing") continue @@ -397,19 +397,26 @@ def analyze( skip, skip_nchain = skipmodel(chain, call_qname) max_call_nchain = max(max_call_nchain, skip_nchain) if skip: - if dbg: + if dbg_nstatic: putdbg(f"{call_qname}\tskip") continue # 3. Call if skip_nchain == 0 and call_qname in _nstatic_cache: - max_call_nstatic = max(max_call_nstatic, _nstatic_cache[call_qname]) + call_nstatic = _nstatic_cache[call_qname] + if dbg_nstatic: + putdbg(f"{call_qname}\ttotal={call_nstatic} (cache-read)") + max_call_nstatic = max(max_call_nstatic, call_nstatic) else: call_nstatic, call_nchain = _nstatic(chain, call_qname) max_call_nstatic = max(max_call_nstatic, call_nstatic) max_call_nchain = max(max_call_nchain, call_nchain) if skip_nchain == 0 and call_nchain == 0: + if dbg_nstatic: + putdbg(f"{call_qname}\ttotal={call_nstatic} (cache-write)") _nstatic_cache[call_qname] = call_nstatic + elif dbg_nstatic: + putdbg(f"{call_qname}\ttotal={call_nstatic} (do-not-cache)") chain.pop() return node.nstatic + max_call_nstatic, max(0, max_call_nchain - 1) |