Реестр: 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:
@@ -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, как считалось.
|
||||
|
||||
<details><summary>Исходная постановка (модель −28 000)</summary>
|
||||
|
||||
| правка | на блит | источник |
|
||||
|---|---:|---|
|
||||
@@ -349,6 +377,8 @@ heal 141 048 + отрисовка 148 566 = 290 000 тактов (36 % рабо
|
||||
Все четыре — низкий риск, механическая работа. Вместе снимают ~3 700 из
|
||||
6 126 фиксированных.
|
||||
|
||||
</details>
|
||||
|
||||
### 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** — и
|
||||
это оптимистично. **Арифметика не сходится:** сцена с двумя персонажами,
|
||||
|
||||
Reference in New Issue
Block a user