From a29fb8da347965fd09b71a8ada70ae8d86f3ecd7 Mon Sep 17 00:00:00 2001 From: Alexander Petrov Date: Wed, 19 Aug 2026 18:18:13 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D0=B5=D1=81=D1=82=D1=80:=20P6a=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=BA=D1=80=D1=8B=D1=82=20(-840),=20P6b=20=D0=BE?= =?UTF-8?q?=D1=81=D1=82=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=20=D0=BD=D0=B5=D0=B4?= =?UTF-8?q?=D0=B5=D0=BB=D0=B0=D0=BD=D0=BD=D1=8B=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Оценка пары P6a/P6b была -20 000, факт по P6a — -840. Записана причина: оценку я перенёс по аналогии с лучом видимости, где трамплин звался девять раз за кадр, а тут trob'ов в комнате всего несколько. Урок в реестре: «тот же паттерн» не означает «тот же порядок величины». P6b (кэш префетча, 11 058) не делался: инвалидацию пришлось бы ловить из трёх источников (pop_level_set_tile, вход в комнату, добавление trob), а пропуск любого даёт застывшую анимацию. Бюджет лёгкой позиции: 437 484, до цели 7 484. Co-Authored-By: Claude Opus 5 --- applications/PoP/docs/perf_registry.md | 29 ++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/applications/PoP/docs/perf_registry.md b/applications/PoP/docs/perf_registry.md index 99b7cb4..925c4c9 100644 --- a/applications/PoP/docs/perf_registry.md +++ b/applications/PoP/docs/perf_registry.md @@ -352,6 +352,30 @@ SDCC z80 разворачивается в `sbc` плюс `jp PO / xor 0x80 / jp `pop_sprite_size_limits`). **−276 в статике, −1 134 в циане динамики**, плюс 24 байта `_DATA`. +### P6a. Кэш указателя модификаторов ✅ 2026-08-19 — −840 (ждали −20 000) + +`pop_trob_modif` объявлен `__banked`, а звался на КАЖДЫЙ trob внутри цикла +`pop_process_trobs`, хотя комната у них в подавляющем большинстве кадров +одна. Указатель теперь кэшируется между итерациями. + +Цикл trobs 78 726 → **74 964**, работа кадра 438 324 → **437 484**. + +**Оценка в реестре была завышена в двадцать раз**, и стоит понять почему: +я перенёс её по аналогии с лучом видимости (P2b), где трамплин звался +ДЕВЯТЬ раз за кадр. Здесь trob'ов в комнате всего несколько, и кэш +экономит два-три вызова. **Урок: «тот же паттерн» не означает «тот же +порядок величины» — считать надо число вызовов, а не узнавать шаблон.** + +### P6b. Кэш префетча кодов тайлов — НЕ ДЕЛАЛОСЬ + +Префетч (`pop_level_access_begin/end` плюс чтение кода на каждый trob) +стоит **11 058** за кадр. Кэшировать мешает инвалидация: код тайла меняет +`pop_level_set_tile` (кнопка → пол, loose → empty), вход в комнату и +добавление trob'а — пропустить хоть один источник значит получить +застывшую анимацию. С учётом того, что P6a дал 840 вместо 20 000, +ожидаемый выигрыш тут тоже стоит считать скромным, а риск он несёт +несоразмерный. + ### P18. Метка «фон трогали» огрублена по X — ОТЛОЖЕНО (решение пользователя) **Найдено 2026-08-19 пользователем:** Кид перерисовывается, хотя с пламенем @@ -625,7 +649,8 @@ BUG-LATTICE-DOORTOP, BUG-SEAM-WEDGE-1) — только отдельным за | после P15, тяжёлая | 617 487 | 245 808 | 181 761 | 192 090 | **4 везде** | | после P16, лёгкая | 438 978 | 218 052 | 181 494 | 39 438 | 4 | | ~~после P4~~ | ~~438 570~~ | | | | правка **ОТКАЧЕНА** | -| **после P17, лёгкая** | **438 324** | 217 590 | 181 098 | 39 192 | 4 | +| после P17, лёгкая | 438 324 | 217 590 | 181 098 | 39 192 | 4 | +| **после P6a, лёгкая** | **437 484** | 217 704 | 180 252 | 39 306 | 4 | | **после P17, тяжёлая** | **603 684** | 241 956 | 181 464 | 180 270 | 4 | Итог восьми позиций: **801 768 → 464 796 в лёгкой позиции (−42 %)** и @@ -637,7 +662,7 @@ BUG-LATTICE-DOORTOP, BUG-SEAM-WEDGE-1) — только отдельным за Цель: работа ≤ 430 000, тогда период станет 3 растра (хвост кадра — три `gfx_wait_vsync`). -- в ЛЁГКОЙ позиции снять надо **8 324**; +- в ЛЁГКОЙ позиции снять надо **7 484**; - в ТЯЖЁЛОЙ — **173 684**. **Лёгких путей больше не осталось.** За 2026-08-19 отвергнуто ЧЕТЫРЕ