summaryrefslogtreecommitdiff
path: root/build-aux/measurestack/analyze.py
diff options
context:
space:
mode:
authorLuke T. Shumaker <lukeshu@lukeshu.com>2025-04-29 14:21:25 -0600
committerLuke T. Shumaker <lukeshu@lukeshu.com>2025-05-06 11:50:46 -0600
commita56ba340a7cb0d6ea8a9c25965cb5311978c0e25 (patch)
tree176dd9bab6f3780e4110b989e4299398953830e3 /build-aux/measurestack/analyze.py
parent6a45430e83a845dc6274b1785d6816fd61897117 (diff)
measurestack: Promote and enhance `dbg` to a global `dbg_nstatic`
Diffstat (limited to 'build-aux/measurestack/analyze.py')
-rw-r--r--build-aux/measurestack/analyze.py25
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)