mirror of
https://github.com/ARMSX2/ARMSX3.git
synced 2026-08-24 16:58:52 -07:00
The two by-pass tables were joined on counters that reset at different points. tick_frame runs from on_frame_end, before flip; the GPU timer rotates its slot at the top of flip and then drops every non-frame region on the fresh slot, which is flip's own overlay and calibration passes -- and those still incremented the CPU counter. So the CPU ordinal ran ahead by the number of present-path passes and the two tables described different passes. A whole anomaly came out of that: a pass whose GPU cost was joined to a neighbour's workload read as 36x the per-draw cost of its peers. The comment claiming both reset on the same boundary was wrong. Reset where the GPU slot actually rotates instead. Also adds a Storage Access Framework route to the package installer. The in-app browser walks java.io.File, which only reaches storage this process can open by path, so a .pkg on a USB-OTG drive or an SD card was unreachable and had to be copied to internal storage first. Packages are handed over as the descriptor SAF already returned -- the native side takes a raw fd, so nothing is copied and a 4 GB package costs no extra space; licences are 16 bytes and their installer wants a real file, so those alone are staged.