The final cluster rect SDL_ttf reports stops at the last inked glyph, so a
caret at the end of a single-line field did not move when a trailing space
was typed. Use the laid-out width there; wrapped layouts keep the clamp
because their width is the widest line rather than the last one.
* refactor(crypto): deprecate custom sha256 in favor of OpenSSL libcrypto
- Remove standalone src/foundation/sha256.cc, include/mocktail/sha256.h, and tests/sha256_test.cc
- Remove mocktail_crypto_foundation library and sha256_test targets from CMake
- Export clean FileDigest and HashText helpers via include/update/payload_integrity.h
- Deduplicate byte-to-hex formatting across host ABI loader and updater modules
- Support direct generation hash sizing to avoid repetitive string slicing
- Validate all EVP return codes across streaming downloads and asset tree hashing
* fix(compat): abort candidate canary registration when profile hashing fails
- Return Failure before profile validation and registration if ComputeSha256Hex fails
- Propagate canary attestation hashing failures in ValidateCanaryAttestation
- Add SetHostAbiProfileHashingFaultForTesting hook and regression test in host_abi_profile_test
---------
Co-authored-by: glook9001 <310372091+glook9001@users.noreply.github.com>
vkAcquireNextImageKHR(): A swapchain no longer matches the surface properties exactly, but can still be used to present to the surface successfully. (VK_SUBOPTIMAL_KHR) (1000001003)
* perf(runtime, asset, jni): lock-free JNI object resolution, in-memory ETC1 transcode caching, one-time spin guard classification, and host driver environment tuning
* fix(jnivm): preserve precise g_known_objects check in PseudoObjectFromRef
* perf(jni, linker): fast-path method name matching before class queries and binary search libc symbols
* perf(jni, runtime): pre-tagged O(1) jump table for JNI method dispatch and direct main loop message pump without sigsetjmp
* perf(legacy_runtime): remove redundant sigsetjmp wrappers across surface updates and memory trimming
* Revert "perf(legacy_runtime): remove redundant sigsetjmp wrappers across surface updates and memory trimming"
This reverts commit 82e4019f68aa0d2968716a2dc066bc26961d7755.
* refactor(legacy_runtime): remove dead alpha DelayedUpdateSurfaceAppThread and redundant post-start surface calls
* perf(jnivm, android): lock-free JNI object resolution and zero-allocation asset URI prefixes
* perf(runtime, compat): use cached ::gettid and eliminate all remaining detached pthread spawns and busy waits
* perf(vulkan, jnivm, legacy): mailbox present rewrite, JNI handle reuse, and dead-code cull
Rewrite guest swapchain presentMode at vkCreateSwapchainKHR so vsync:auto
and a fixed FPS cap stay on MAILBOX/FIFO_LATEST_READY instead of host-default
FIFO. Prefer FIFO_LATEST_READY then MAILBOX, bump vsync minImageCount, treat
SUBOPTIMAL as OUT_OF_DATE, and drop the 1s acquire watchdog.
Fix JNI local-frame handle leaks (unsigned 32-bit handles, freelist reuse,
no intern pool wrap-stomp). Default native_set_roblox_channel on so injected
production channel is applied. Remove TM2 .* deny-list, unused OpenGL trim,
and leftover legacy_runtime dead code.
Leave untracked docs, vulkaninfo dumps, rbx_bin assets, and bpftrace scripts
out of this commit.
---------
Co-authored-by: glook9001 <310372091+glook9001@users.noreply.github.com>