Skip to content

[Recon] Lumos render-path heat attribution (condition 1) #68

Description

@wow-miley

Suggested model tier: Opus 4.x high

Context

Lumos regressed to a static radial gradient and #67 is already bisecting that across the artifact boundary. If animation has since returned, it may have returned via an expensive fallback — a per-frame recomposition of a Brush is dramatically hotter than a GPU shader. This recon determines whether the orb is a primary heat source independent of any Arc (isolation condition 1: Lumos animating, no Arc).

Depends on the socket-link/socket#1011 harness for the static-frame seam and ThermalProbe readout.

Objective

Quantify Phosphor's standalone render cost under condition 1 and classify the bottleneck as GPU-bound, CPU/recomposition-bound, or allocation-bound.

Steps (each verifiable)

1. Run condition 1. Capture a Metal System Trace + Core Animation FPS.
Validation: you have a frame-rate number and GPU utilization %. High FPS + high GPU → Phosphor implicated immediately.

2. Confirm the render path is hardware-accelerated (Skiko → Metal), not a software/CPU draw fallback.
Validation: Metal trace shows real GPU command buffers per frame.

3. Inspect the animation driver: paced by withInfiniteAnimationFrameNanos / display-link sync, or an uncapped loop / tight delay? On ProMotion an uncapped loop renders at 120Hz.
Validation: measured frame cadence matches an intentional cap, not a busy spin.

4. Check whether VoxelFrame DTOs are recomputed per frame and on which thread, and whether recomposition scope leaks beyond the draw surface (whole orb recomposing vs. isolated drawWithCache/Canvas).
Validation: allocation rate per frame in Instruments; recomposition counts scoped to the draw node only.

Expected outcome

Verdict — Phosphor is / isn't a primary culprit — with a GPU/CPU/allocation breakdown and the specific hot path if implicated. Findings feed #67's version-axis bisection.

Technical constraints

Compose Multiplatform + Skiko/Metal on iOS; VoxelFrame DTO contract from Phosphor; consumes the socket-link/socket#1011 static-frame Koin seam and ThermalProbe.

Out of scope

Fixing the renderer. The #67 regression root-cause (this recon may hand it evidence).

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions