From 60f0d70b81510d9dd58d4cc7992f33663f5aca88 Mon Sep 17 00:00:00 2001 From: user Date: Fri, 7 Aug 2026 02:35:07 +0200 Subject: Two independent constants: memoise the pygments token -> Rich style lookup (a decompilation uses ~18 distinct token types but each token walked up to nine 'token in ttype' hierarchy checks), and hold the worker-connect poll at 5ms for the first 5s instead of backing off geometrically from the first probe. Result: {"status":"keep","total_ms":18856.8,"lg_boot_ms":689.7,"lg_decomp_ms":2484.2,"lg_graph_ms":1120,"lg_hex_ms":700.1,"lg_index_ms":96.5,"lg_listing_cold_ms":425.6,"lg_listing_warm_ms":511.5,"lg_nav_ms":6590.7,"lg_palette_ms":4.8,"lg_render_ms":215.1,"lg_search_ms":2195.5,"pure_graph_ms":238.1,"sm_boot_ms":431.5,"sm_decomp_ms":667.2,"sm_graph_ms":686.9,"sm_hex_ms":569.8,"sm_index_ms":0,"sm_listing_cold_ms":258.1,"sm_listing_warm_ms":283.2,"sm_nav_ms":365.2,"sm_palette_ms":0.3,"sm_render_ms":243.7,"sm_search_ms":79,"fails":0} --- idatui/worker_client.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'idatui/worker_client.py') diff --git a/idatui/worker_client.py b/idatui/worker_client.py index 59c62a1..4f90700 100644 --- a/idatui/worker_client.py +++ b/idatui/worker_client.py @@ -116,7 +116,17 @@ class WorkerClient: # fifth of a second even when the worker was ready in milliseconds # (a small binary, or a seeded .i64), which is most of the time in # the tests and noticeable on a re-open. + # + # Backing off geometrically from the first probe was still too eager: + # a seeded database is ready at ~250ms, by which point the delay has + # grown to 134ms, so every open waited ~350ms whatever the binary -- + # the same number for a 47KB `echo` and a 1.2MB `bash`, which is what + # gives a polling artefact away. Hold the fast rate for the first few + # seconds (a connect attempt on an absent socket is microseconds) and + # only slow down for a genuine cold auto-analysis, which runs for + # minutes and does not care about 200ms. delay = 0.005 + fast_until = t0 + 5.0 while time.time() < deadline: try: s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) @@ -132,7 +142,8 @@ class WorkerClient: progress(f"auto-analyzing {os.path.basename(self._bin)}… " f"({int(time.time() - t0)}s)") time.sleep(delay) - delay = min(delay * 1.6, 0.2) + if time.time() > fast_until: + delay = min(delay * 1.6, 0.2) raise IDAConnectionError("worker did not become ready in time") @property -- cgit v1.3.1-sl0p