mirror of
https://github.com/storytold/designcraft.git
synced 2026-11-14 14:22:39 +00:00
- A panic anywhere in a background job, sizing and the wait at the gate included, marks the image bad. A guard takes the job off the busy list however it ends, and a thread that ends is counted out so another starts. - Background decodes reserve their bytes where mip chooses the decode: the reduced JPEG estimate before a reduced decode (a JPEG without one goes to the full decode), the full peak before a full decode, nothing when a cached level is halved. - A request turned away as recently decoded schedules one generation advance for when its window has passed, so its stand-in doesn't stay until the view changes. Emptying the cache (new colour settings, clear) starts a new epoch, and decodes into the old cache no longer count as recent. - At most two full decodes are kept for zooming in; a newer one evicts the oldest. - warm's planning runs under catch_unwind; a panic skips warming. - Renderer::images_pending says whether the last render drew an image still decoding. Regression tests use a test-only fault hook that panics inside the job and inside warm's planning.