• src/conio/scale_spinner.csrc/conio/CMakeLists.txt GNUmakefile scale.c

    From Deucе@1:103/705 to Git commit to main/sbbs/master on Wed May 27 17:29:16 2026
    https://gitlab.synchro.net/main/sbbs/-/commit/85593274bd6e22a844637bd9
    Added Files:
    src/conio/scale_spinner.c
    Modified Files:
    src/conio/CMakeLists.txt GNUmakefile scale.c
    Log Message:
    Optimize scaled row interpolation

    The scaler commonly applies integer scaling before the final
    aspect-correction interpolation. That produces repeated adjacent rows,
    but interpolate_height() still blended those rows pixel by pixel.

    Track the vertical repeat count from multiply_scale() and let interpolate_height() copy rows that are known duplicates. Also replace
    its static temporary row buffers with direct source row pointers and use
    the actual row byte count.

    This removes thread-hostile static state and avoids unnecessary row
    copies.

    On the scale_spinner X11 profiling run with a dense 0xB2 screen,
    sampled totals dropped from 4,132 to 2,630 (-36.4%). do_scale samples
    dropped from 3,407 to 1,844 (-45.9%), and interpolate_height dropped
    from 3,186 to 1,580 (-50.4%).

    Add a small scale_spinner profiling binary target for exercising
    one-cell updates under internal/external scaling.
    --- SBBSecho 3.37-Linux
    * Origin: Vertrauen - [vert/cvs/bbs].synchro.net (1:103/705)