From a993cb3b62ea37720fdee8a752e539dadcef77ce Mon Sep 17 00:00:00 2001 From: Alexander Petrov Date: Wed, 19 Aug 2026 17:41:14 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D0=B5=D1=81=D1=82=D1=80:=20P4=20?= =?UTF-8?q?=D1=87=D0=B0=D1=81=D1=82=D0=B8=D1=87=D0=BD=D0=BE,=20=D1=8D?= =?UTF-8?q?=D1=84=D1=84=D0=B5=D0=BA=D1=82=20=D0=BC=D0=BD=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=20=D0=BC=D0=B5=D0=BD=D1=8C=D1=88=D0=B5=20=D0=BE=D0=B6=D0=B8?= =?UTF-8?q?=D0=B4=D0=B0=D0=B5=D0=BC=D0=BE=D0=B3=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Каталог атласа теперь читается из W0 вместо переключения W3 — минус 408 на кадре при ожидании минус 5 400. Цена блита 16 107 -> 16 005. Причина записана: 672 такта atlas_image — это почти целиком вызов функции и арифметика idx*8, а не переключение окна; после правки работа переехала в статью «каталог + шапка + клип» (2 694), а сам gfx_w0_map стоит всего 324. Отсюда понижена оценка непробованной части P4 (один map на группу блитов): потолок ~2 600 за кадр, а не 10 000. Бюджет: лёгкая 438 570, тяжёлая 602 574. До цели 8 570 и 172 574. Co-Authored-By: Claude Opus 5 --- applications/PoP/docs/perf_registry.md | 47 +++++++++++++++++++++++--- 1 file changed, 42 insertions(+), 5 deletions(-) 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** — и это оптимистично. **Арифметика не сходится:** сцена с двумя персонажами,