Builtin Library
README.md
profiler.frame
The current frame's time as a self-accounting tree — the deep view. Every schedule, system, and sub-timing shows its SELF time (own cost, excluding children), TOTAL, call count, and % of the frame; the frame-limiter / vsync wait shows as an explicit present / idle bucket instead of vanishing; and each heavy component's update(dt) is attributed by component + entity under lua_update.vm_call. Read the live frame with source now, or a stopped recording by its label (its worst or typical frame). Read from the top: the row with the largest SELF time is where the frame time actually goes. A row whose name ends in wait (render_frame.present.gpu_wait, render_frame.present_wait) reads (wait): it is time the engine thread spent blocked on the GPU, the display or another thread, and the line below it says which. The header states the frame's total wait. The core/performance guide explains every row at the end of a rendered frame.