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:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user