diff options
| author | user <user@clank> | 2026-08-07 06:45:52 +0200 |
|---|---|---|
| committer | user <user@clank> | 2026-08-07 06:45:52 +0200 |
| commit | d9e8fdb79136dfa32e01631aed8917c1cb9c1b54 (patch) | |
| tree | 53c4e6c440f8fa5ee19f2e8ae5b3a749ab28583b /.auto/ideas.md | |
| parent | Size the worker's per-line render cache to hold a segment's DISTINCT lines (1... (diff) | |
| download | ida-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.md | 15 |
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 |
