mob_tick_one в file-scope + снятие временной оснастки замеров

зелёная пик  423 558 -> 414 456
  работа пик   793 266 -> 783 798
  ПЕРИОД логического кадра в каскаде: было 5-6 растровых, стало РОВНО 4

mob_tick_one: рабочие переменные в file-scope (было 16 байт кадра и 99
обращений `-N(ix)`, стало 17) — то же лечение, что у draw_tile и blit_b_clip.

Снята временная оснастка из ГОРЯЧИХ путей: шесть вызовов pop_dbg_b1..b6 в
pop_blit_b (по ~65 такта каждый на КАЖДЫЙ блит), pop_dbg_kind/m16 и
подсчёт состава кадра в pop_redraw_needed, pop_dbg_m13..m15 в
pop_ceil_shake_draw.  Сами пустышки в pop_state.c оставлены — вставить их
обратно на один замер дешевле, чем заводить заново; как это делается,
записано в docs/perf_l13_room23.md.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-17 16:47:20 +03:00
parent 5ef721e340
commit 18ee60eb69
3 changed files with 47 additions and 61 deletions
-7
View File
@@ -503,10 +503,8 @@ void pop_blit_b(atlas_t *a, uint8_t idx, int x, int ybottom)
pb_yb + POP_YOFF + 1 <= pop_t_fclip_ly0 ||
pb_yb + POP_YOFF - 64 >= pop_t_fclip_ly1))
return;
pop_dbg_b1(); /* ВРЕМЕННО */
pb_img = (const uint8_t *)atlas_image(pb_a, pb_idx);
gfx_w0_map(pb_a->page);
pop_dbg_b2(); /* ВРЕМЕННО */
/* Габарит читаем БАЙТАМИ. С `uint16_t pb_w = pb_img[0] | (pb_img[1] << 8)` SDCC
* разворачивал каждую такую строку в два десятка IX-относительных
* пересылок: 16-битные pb_w/pb_h не влезали в регистры, и функция целиком
@@ -547,23 +545,18 @@ void pop_blit_b(atlas_t *a, uint8_t idx, int x, int ybottom)
/* pb_w<256 && pb_h<256 больше не проверяем — гарантировано типом. */
if (pb_x >= 0 && pb_top >= 0 &&
pb_x + (int)pb_w <= 320 && pb_top + (int)pb_h <= 256) {
pop_dbg_b6(); /* ВРЕМЕННО: пометка «шли в noclip» */
if (pop_upside) gfx_blit_noclip_vflip(pb_x, pb_top, pb_img);
else gfx_blit_noclip(pb_x, pb_top, pb_img);
} else {
if (pop_upside) gfx_blit_part_vflip(pb_x, pb_top, pb_img, 0, 0, (int)pb_w, (int)pb_h);
else gfx_blit_part(pb_x, pb_top, pb_img, 0, 0, (int)pb_w, (int)pb_h);
}
pop_dbg_b3(); /* ВРЕМЕННО */
pop_cd_touch(pb_x, pb_top, (int)pb_w, (int)pb_h);
pop_dbg_b4(); /* ВРЕМЕННО */
} else {
blit_b_clip(pb_img, pb_x, pb_top, pb_w, pb_h);
pop_dbg_b3(); pop_dbg_b4(); /* ВРЕМЕННО: медленный путь целиком в b3 */
}
}
gfx_w0_unmap();
pop_dbg_b5(); /* ВРЕМЕННО */
}
/* Блит getimage-блоба из ОБЫЧНОЙ памяти (W2), а не из EMM-страницы атласа: