Crafter.Graphics/interfaces
catbot 1d7d9f7b8e perf(ui): LRU-evict the shaped-run cache instead of clearing it (#123)
At kMaxShapedRuns (8192) UIRenderer::ShapeText did a full shapedRuns_.clear().
A stream of unique strings (FPS counters, timers) alongside many stable labels
periodically nuked every stable entry, forcing a full-UI reshape the next frame.

Track recency with an auxiliary std::list<const ShapedRunKey*> (front = most
recently used) holding pointers to the keys owned by the node-based map. A hit
splices its entry to the front; an overflow pops the least-recently-used entry
from the back and erases just that one — both O(1). The hot set of labels,
reshaped every frame, stays at the front and survives, so the churn of unique
strings only recycles the cold tail. Output is byte-identical either way.

InvalidateFont now drops matching entries from both the map and the LRU list.
Adds ShapedRunCacheSize()/IsShapedRunCached() introspection hooks (the policy
isn't observable through output or atlas.dirty) and a ShapeTextCache test that
asserts the cache plateaus at a fixed cap (evict-one, not clear-all), the hot
label survives a churn past the cap, and an untouched cold string is evicted.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 13:23:34 +00:00
..
Crafter.Graphics-Animation.cppm cleaned up renderer 2026-03-09 20:10:19 +01:00
Crafter.Graphics-Clipboard.cppm clipboard 2026-05-19 00:45:22 +02:00
Crafter.Graphics-ComputeShader.cppm fix(vulkan-rt): configurable recursion depth + per-shader TLAS push for compute (#21) 2026-06-03 18:35:39 +00:00
Crafter.Graphics-Decompress.cppm browser DOM support 2026-05-18 02:07:48 +02:00
Crafter.Graphics-DescriptorHeapVulkan.cppm fix(device): add preferred mask + required-only fallback to GetMemoryType (#59) 2026-06-16 16:03:50 +00:00
Crafter.Graphics-DescriptorHeapWebGPU.cppm webgpu improvements 2026-05-24 13:32:08 +02:00
Crafter.Graphics-Device.cppm perf(device): pop retired deletions off the front in O(ready) (#116) 2026-06-17 19:37:58 +00:00
Crafter.Graphics-Dom.cppm browser DOM support 2026-05-18 02:07:48 +02:00
Crafter.Graphics-DomEvents.cppm browser DOM support 2026-05-18 02:07:48 +02:00
Crafter.Graphics-Font.cppm Merge remote-tracking branch 'origin/master' into claude/issue-57 2026-06-16 17:02:48 +00:00
Crafter.Graphics-FontAtlas.cppm Merge pull request 'perf(text): fold Ensure+Lookup into FontAtlas::EnsureAndGet (#53)' (#84) from claude/issue-53 into master 2026-06-16 17:44:20 +02:00
Crafter.Graphics-ForwardDeclarations.cppm rendertargetvulkan 2026-04-11 18:48:00 +02:00
Crafter.Graphics-Gamepad.cppm new input system 2026-05-12 00:24:48 +02:00
Crafter.Graphics-GraphicsTypes.cppm webgpu support 2026-05-18 04:58:52 +02:00
Crafter.Graphics-Image2D.cppm feat(webgpu): HDR post-process primitives — float textures, storage-texture bindings, RESOLVE→HDR target (#27) 2026-06-09 12:55:14 +00:00
Crafter.Graphics-ImageVulkan.cppm perf(image): release static texture staging after upload (#114) 2026-06-17 19:40:35 +00:00
Crafter.Graphics-Input.cppm new input system 2026-05-12 00:24:48 +02:00
Crafter.Graphics-InputField.cppm webgpu improvements 2026-05-24 13:32:08 +02:00
Crafter.Graphics-Keys.cppm browser DOM support 2026-05-18 02:07:48 +02:00
Crafter.Graphics-Mesh.cppm perf(mesh): dirty-range vertex upload for deforming-mesh Refit (#119) 2026-06-17 19:50:48 +00:00
Crafter.Graphics-PipelineRTVulkan.cppm perf(rt): place SBT in device-local memory via upload-strategy helper (#72) 2026-06-17 17:41:34 +00:00
Crafter.Graphics-PipelineRTWebGPU.cppm feat(webgpu): HDR post-process primitives — float textures, storage-texture bindings, RESOLVE→HDR target (#27) 2026-06-09 12:55:14 +00:00
Crafter.Graphics-PlainComputeShader.cppm webgpu improvements 2026-05-24 13:32:08 +02:00
Crafter.Graphics-RenderingElement3D.cppm perf(tlas): dirty-track the per-frame TLAS instance+metadata upload (#118) 2026-06-17 19:58:45 +00:00
Crafter.Graphics-RenderPass.cppm perf(sync): scope frame-loop barriers to swapchain image + real per-pass stages (#115) 2026-06-17 19:44:33 +00:00
Crafter.Graphics-Router.cppm browser DOM support 2026-05-18 02:07:48 +02:00
Crafter.Graphics-RT.cppm feat(webgpu-rt): add intersection stage, procedural hit group, AABB BLAS API 2026-06-02 22:09:14 +00:00
Crafter.Graphics-RTPass.cppm perf(sync): scope frame-loop barriers to swapchain image + real per-pass stages (#115) 2026-06-17 19:44:33 +00:00
Crafter.Graphics-SamplerVulkan.cppm browser DOM support 2026-05-18 02:07:48 +02:00
Crafter.Graphics-ShaderBindingTableVulkan.cppm fix(vulkan-rt): configurable recursion depth + per-shader TLAS push for compute (#21) 2026-06-03 18:35:39 +00:00
Crafter.Graphics-ShaderBindingTableWebGPU.cppm feat(webgpu-rt): add intersection stage, procedural hit group, AABB BLAS API 2026-06-02 22:09:14 +00:00
Crafter.Graphics-ShaderVulkan.cppm fix(vulkan-rt): configurable recursion depth + per-shader TLAS push for compute (#21) 2026-06-03 18:35:39 +00:00
Crafter.Graphics-Types.cppm browser DOM support 2026-05-18 02:07:48 +02:00
Crafter.Graphics-UI.cppm perf(ui): LRU-evict the shaped-run cache instead of clearing it (#123) 2026-06-18 13:23:34 +00:00
Crafter.Graphics-UIComponents.cppm perf(text): cache shaped runs in ShapeText (#52) 2026-06-16 15:40:52 +00:00
Crafter.Graphics-VulkanBuffer.cppm Merge pull request 'perf(tlas): dirty-track the per-frame TLAS instance+metadata upload (#118)' (#140) from claude/issue-118 into master 2026-06-18 15:07:44 +02:00
Crafter.Graphics-VulkanTransition.cppm browser DOM support 2026-05-18 02:07:48 +02:00
Crafter.Graphics-WebGPU.cppm feat(rt): BuildProcedural/RefitProcedural from a device AABB buffer (#37) 2026-06-16 14:12:04 +00:00
Crafter.Graphics-WebGPUBuffer.cppm webgpu improvements 2026-05-24 13:32:08 +02:00
Crafter.Graphics-WebGPUComputeShader.cppm feat(webgpu): HDR post-process primitives — float textures, storage-texture bindings, RESOLVE→HDR target (#27) 2026-06-09 12:55:14 +00:00
Crafter.Graphics-Window.cppm Merge remote-tracking branch 'origin/master' into claude/issue-40 2026-06-16 15:41:59 +00:00
Crafter.Graphics.cppm webgpu improvements 2026-05-24 13:32:08 +02:00