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
-12
View File
@@ -80,13 +80,9 @@ void pop_set_redraw_above(uint8_t col, uint8_t kind, uint8_t pages) __banked
void pop_redraw_needed(void) __banked
{
uint8_t i, row = 0, col = 0, left = 0;
uint8_t cnt[10], tot = 0; /* ВРЕМЕННО: состав кадра */
if (!rd_pending) return;
for (i = 0; i < 10; i++) cnt[i] = 0;
for (i = 0; i < NTILES; i++) {
if (rd_cnt[i]) {
if (rd_kind[i] < 8) { cnt[rd_kind[i]]++; tot++; } /* ВРЕМЕННО */
pop_dbg_kind(rd_kind[i]); /* ВРЕМЕННО */
switch (rd_kind[i]) {
case POP_RD_SPIKE: pop_spike_redraw(row, col); break;
case POP_RD_LOOSE: pop_loose_shake_draw(row, col); break;
@@ -97,7 +93,6 @@ void pop_redraw_needed(void) __banked
case POP_RD_CHOMP: pop_chomp_redraw(row, col); break;
default: break;
}
pop_dbg_m16(); /* ВРЕМЕННО */
if (--rd_cnt[i]) left++;
else rd_kind[i] = 0;
}
@@ -105,18 +100,11 @@ void pop_redraw_needed(void) __banked
}
for (i = 0; i < NCOLS; i++) {
if (rda_cnt[i]) {
cnt[8 + (rda_kind[i] == POP_RDA_CEIL ? 0 : 1)]++; tot++; /* ВРЕМЕННО */
pop_dbg_kind((uint8_t)(8 + rda_kind[i])); /* ВРЕМЕННО */
if (rda_kind[i] == POP_RDA_CEIL) pop_ceil_shake_draw(i);
else pop_ceil_bake_empty(i);
pop_dbg_m16(); /* ВРЕМЕННО */
if (--rda_cnt[i]) left++;
else rda_kind[i] = 0;
}
}
if (tot > pop_dbg_rdmax_tot) { /* ВРЕМЕННО: расклад пика */
pop_dbg_rdmax_tot = tot;
for (i = 0; i < 10; i++) pop_dbg_rdmax[i] = cnt[i];
}
rd_pending = left;
}