aboutsummaryrefslogtreecommitdiffstats
path: root/.auto/ideas.md
diff options
context:
space:
mode:
authoruser <user@clank>2026-08-07 06:45:52 +0200
committeruser <user@clank>2026-08-07 06:45:52 +0200
commitd9e8fdb79136dfa32e01631aed8917c1cb9c1b54 (patch)
tree53c4e6c440f8fa5ee19f2e8ae5b3a749ab28583b /.auto/ideas.md
parentSize the worker's per-line render cache to hold a segment's DISTINCT lines (1... (diff)
downloadida-tui-d9e8fdb79136dfa32e01631aed8917c1cb9c1b54.tar.gz
ida-tui-d9e8fdb79136dfa32e01631aed8917c1cb9c1b54.tar.xz
ida-tui-d9e8fdb79136dfa32e01631aed8917c1cb9c1b54.zip
heads(digest=True): the worker answers "does this page still render exactly as you hold it?" with a hash and a count instead of the page. After a rename nearly every page is unchanged, so the pickling, transfer, unpickling and Head rebuild are all skipped. Redone at PAGE granularity end to end, which fixes both bugs of the first attempt. lg_search 5628 -> 3959.
Result: {"status":"keep","total_ms":26491.7,"lg_boot_ms":808.6,"lg_decomp_ms":2600.2,"lg_graph_ms":901.2,"lg_hex_ms":448.7,"lg_index_ms":70.3,"lg_listing_cold_ms":432.8,"lg_listing_warm_ms":445.5,"lg_nav_ms":7004.8,"lg_palette_ms":4.8,"lg_rename_ms":758.6,"lg_render_ms":231.3,"lg_search_ms":3959.2,"lg_split_ms":2659.2,"pure_graph_ms":214.7,"sm_boot_ms":432.6,"sm_decomp_ms":1305.1,"sm_graph_ms":758.3,"sm_hex_ms":431.8,"sm_index_ms":2.3,"sm_listing_cold_ms":275.4,"sm_listing_warm_ms":289.4,"sm_nav_ms":295.6,"sm_palette_ms":0.3,"sm_rename_ms":424.3,"sm_render_ms":263.6,"sm_search_ms":61.1,"sm_split_ms":1411.9,"fails":0}
Diffstat (limited to '.auto/ideas.md')
-rw-r--r--.auto/ideas.md15
1 files changed, 8 insertions, 7 deletions
diff --git a/.auto/ideas.md b/.auto/ideas.md
index 876ed8b..9226574 100644
--- a/.auto/ideas.md
+++ b/.auto/ideas.md
@@ -55,13 +55,14 @@
## Added late in the session
-- **Refresh only the rows a rename actually changed.** `bump_names` currently
- stales every row's text; a wholesale re-read then costs about what a rebuild
- costs (~10% more, measured). Only rows that *mention* the symbol change, and
- `xrefs_to(renamed_ea)` plus the function's own extent would name most of them.
- The catch: `bump_names()` is called from half a dozen places that don't have
- an address (comment, retype, literal reformat), and a name can reach a row
- through more than a direct xref. Would make a rename free everywhere.
+- ~~**Refresh only the rows a rename actually changed** (xrefs-driven).~~
+ **MEASURED AND REJECTED.** `/tmp/whatchanges.py` rebuilds the whole segment
+ before and after a rename and diffs every row. echo: all 19 changed rows over
+ 4 renames were covered by (function extent + `xrefs_to`). ls_ttl: 53 of 54 —
+ and the one that was not, `lea rcx, unk_1D7A0` → `byte_1D7A0`, **was not
+ caused by the rename at all**: IDA's own analysis defined that byte. Any
+ address-predicted invalidation leaves such a row stale for good. Superseded by
+ the digest scheme, which is exact because it looks at the rendered line.
- **Features the bench still doesn't drive end to end**, in the order they seem
worth probing: xrefs (`x`), the strings browser (`"`), literal formats (`o`),
make-code/data/function edits, history (`back`), execution traces, the RPC