Реестр: P4 частично, эффект много меньше ожидаемого

Каталог атласа теперь читается из 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 <noreply@anthropic.com>
This commit is contained in:
2026-08-19 17:41:14 +03:00
parent 06fb4235f0
commit a993cb3b62
+42 -5
View File
@@ -337,7 +337,35 @@ heal 141 048 + отрисовка 148 566 = 290 000 тактов (36 % рабо
(0,8), где он и стоит. Там фон честно меняется, и оригинал персонажа тоже (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, как считалось.
<details><summary>Исходная постановка (модель 28 000)</summary>
| правка | на блит | источник | | правка | на блит | источник |
|---|---:|---| |---|---:|---|
@@ -349,6 +377,8 @@ heal 141 048 + отрисовка 148 566 = 290 000 тактов (36 % рабо
Все четыре — низкий риск, механическая работа. Вместе снимают ~3 700 из Все четыре — низкий риск, механическая работа. Вместе снимают ~3 700 из
6 126 фиксированных. 6 126 фиксированных.
</details>
### P5. `pop_loose_tick` при пустой комнате — 28 872 → 2 760 ✅ СДЕЛАНО 2026-08-19 ### P5. `pop_loose_tick` при пустой комнате — 28 872 → 2 760 ✅ СДЕЛАНО 2026-08-19
**Получено −26 112 внутри функции, −33 840 на кадре** (замер до/после в **Получено −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 тайла | | P14 | fore-проход персонажа | сводится к P4 + P10 | — | разбор ниже: цикл обходит всего 4 тайла |
| P11 | мелочи с известной ценой | −26 000 | низкий | `clip_char_top` 8 658 подтверждён замером | | P11 | мелочи с известной ценой | −26 000 | низкий | `clip_char_top` 8 658 подтверждён замером |
| P10 | футпринт персонажа из физики | −23 000 | средний | часть P14 | | 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** | | ТЯЖЁЛАЯ позиция (Кид на шаг правее) | 758 358 | 257 520 | 180 870 | 319 842 | **4 и 5** |
| **после P15, лёгкая** | **464 796** | 223 902 | 181 494 | **59 406** | 4 | | **после P15, лёгкая** | **464 796** | 223 902 | 181 494 | **59 406** | 4 |
| после P15, тяжёлая | 617 487 | 245 808 | 181 761 | 192 090 | **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 %)** и Итог восьми позиций: **801 768 → 464 796 в лёгкой позиции (−42 %)** и
**758 358 → 617 487 в тяжёлой (19 %)**. Отдельно важно: в тяжёлой позиции **758 358 → 617 487 в тяжёлой (19 %)**. Отдельно важно: в тяжёлой позиции
@@ -540,8 +572,13 @@ BUG-LATTICE-DOORTOP, BUG-SEAM-WEDGE-1) — только отдельным за
Цель: работа ≤ 430 000, тогда период станет 3 растра (хвост кадра — три Цель: работа ≤ 430 000, тогда период станет 3 растра (хвост кадра — три
`gfx_wait_vsync`). `gfx_wait_vsync`).
- в ЛЁГКОЙ позиции снять надо **8 978** — одна правка; - в ЛЁГКОЙ позиции снять надо **8 570**;
- в ТЯЖЁЛОЙ — около **187 000** (замер после P16 не повторялся). - в ТЯЖЁЛОЙ — **172 574**.
**Лёгких путей больше не осталось.** За 2026-08-19 отвергнуто ЧЕТЫРЕ
правки подряд (три с регрессом, одна почти без эффекта), и все они целили
в накладные проверок и блита. Фиксированная часть блита 6 663 держится
ядром `gfx_w0_map`/`cd_touch`/чтения шапки, а не «лишними» вызовами.
Всё оставшееся в списке, кроме P13, даёт по оценкам **порядка 100 000** — и Всё оставшееся в списке, кроме P13, даёт по оценкам **порядка 100 000** — и
это оптимистично. **Арифметика не сходится:** сцена с двумя персонажами, это оптимистично. **Арифметика не сходится:** сцена с двумя персонажами,