diff --git a/applications/PoP/docs/perf_registry.md b/applications/PoP/docs/perf_registry.md index d51fb09..f0ed4f1 100644 --- a/applications/PoP/docs/perf_registry.md +++ b/applications/PoP/docs/perf_registry.md @@ -337,7 +337,35 @@ heal 141 048 + отрисовка 148 566 = 290 000 тактов (36 % рабо (0,8), где он и стоит. Там фон честно меняется, и оригинал персонажа тоже перерисовывает. -### P4. Накладные блита — четыре независимые правки [модель: −28 000 в 11/15; больше в сценах с 20+ блитами] +### P4. Накладные блита — ЧАСТИЧНО, эффект много меньше ожидаемого + +**Сделано 2026-08-19: каталог атласа читается из W0** (`atlas_image_w0` в +libbgi) вместо переключения W3 в `atlas_image`. **−408 на кадре.** + +Ожидание было −5 400 (672 такта × 8 блитов зелёной фазы), и оно НЕ +оправдалось: цена блита 16 107 → 16 005, то есть −102. Причина в том, что +эти 672 — почти целиком вызов функции и арифметика `idx * 8`, а не само +переключение окна. Замер после правки показывает, что работа просто +переехала между статьями: + +| этап | до | после | +|---|---:|---:| +| пролог + отсев | 810 | 762 | +| `gfx_w0_map` | (в составе 2 400) | **324** | +| каталог + шапка ленты + клип | | **2 694** | +| ядро | 8 508 | 8 508 | +| `cd_touch` + `unmap` + эпилог | 2 883 | 2 883 | +| **фиксированная накладная** | **6 765** | **6 663** | + +Правка оставлена: не вредит, убирает лишнее переключение W3 и делает +контракт честнее (страница мапится один раз). Но как способ снять +накладные она не работает. + +**Что осталось непробованным** (и во что я теперь верю меньше): один +`gfx_w0_map` на ГРУППУ блитов — судя по замеру, сам map стоит 324, так что +потолок этой правки ~2 600 за кадр, а не 10 000, как считалось. + +
Исходная постановка (модель −28 000) | правка | на блит | источник | |---|---:|---| @@ -349,6 +377,8 @@ heal 141 048 + отрисовка 148 566 = 290 000 тактов (36 % рабо Все четыре — низкий риск, механическая работа. Вместе снимают ~3 700 из 6 126 фиксированных. +
+ ### P5. `pop_loose_tick` при пустой комнате — 28 872 → 2 760 ✅ СДЕЛАНО 2026-08-19 **Получено −26 112 внутри функции, −33 840 на кадре** (замер до/после в @@ -507,7 +537,7 @@ BUG-LATTICE-DOORTOP, BUG-SEAM-WEDGE-1) — только отдельным за | # | что | ожидание | риск | комментарий | |---|---|---:|---|---| -| **P4** | **накладные блита** — 6 765 на КАЖДЫЙ блит | **−27 000 в динамике, −24 000 в статике** | низкий | **бьёт и по fore-проходу, и по зелёной фазе** | +| P4 | накладные блита — 6 663 на КАЖДЫЙ блит | частично сделано: **−408** | низкий | из четырёх правок сработала слабо; разбор ниже | | P14 | fore-проход персонажа | сводится к P4 + P10 | — | разбор ниже: цикл обходит всего 4 тайла | | P11 | мелочи с известной ценой | −26 000 | низкий | `clip_char_top` 8 658 подтверждён замером | | P10 | футпринт персонажа из физики | −23 000 | средний | часть P14 | @@ -529,7 +559,9 @@ BUG-LATTICE-DOORTOP, BUG-SEAM-WEDGE-1) — только отдельным за | ТЯЖЁЛАЯ позиция (Кид на шаг правее) | 758 358 | 257 520 | 180 870 | 319 842 | **4 и 5** | | **после P15, лёгкая** | **464 796** | 223 902 | 181 494 | **59 406** | 4 | | после P15, тяжёлая | 617 487 | 245 808 | 181 761 | 192 090 | **4 везде** | -| **после P16, лёгкая** | **438 978** | 218 052 | 181 494 | **39 438** | 4 | +| после P16, лёгкая | 438 978 | 218 052 | 181 494 | 39 438 | 4 | +| **после P4, лёгкая** | **438 570** | 217 824 | 181 086 | 39 210 | 4 | +| **после P4, тяжёлая** | **602 574** | 242 082 | 181 347 | 181 404 | 4 | Итог восьми позиций: **801 768 → 464 796 в лёгкой позиции (−42 %)** и **758 358 → 617 487 в тяжёлой (−19 %)**. Отдельно важно: в тяжёлой позиции @@ -540,8 +572,13 @@ BUG-LATTICE-DOORTOP, BUG-SEAM-WEDGE-1) — только отдельным за Цель: работа ≤ 430 000, тогда период станет 3 растра (хвост кадра — три `gfx_wait_vsync`). -- в ЛЁГКОЙ позиции снять надо **8 978** — одна правка; -- в ТЯЖЁЛОЙ — около **187 000** (замер после P16 не повторялся). +- в ЛЁГКОЙ позиции снять надо **8 570**; +- в ТЯЖЁЛОЙ — **172 574**. + +**Лёгких путей больше не осталось.** За 2026-08-19 отвергнуто ЧЕТЫРЕ +правки подряд (три с регрессом, одна почти без эффекта), и все они целили +в накладные проверок и блита. Фиксированная часть блита 6 663 держится +ядром `gfx_w0_map`/`cd_touch`/чтения шапки, а не «лишними» вызовами. Всё оставшееся в списке, кроме P13, даёт по оценкам **порядка 100 000** — и это оптимистично. **Арифметика не сходится:** сцена с двумя персонажами,