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:
@@ -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-страницы атласа:
|
||||
|
||||
Reference in New Issue
Block a user