TimeToFirstDraw
TimeToFirstDrawRenderable captures and displays a performance.now() reading the first time it draws. Use it only as a rendering diagnostic.
Despite its name and default label, the displayed value is the first-draw timestamp from the runtime’s performance time origin. The implementation does not subtract renderer creation time or application start time, so it is not an elapsed startup duration.
Availability#
| Field | Availability |
|---|---|
| Package | @aicippytui/core |
| Core renderable | TimeToFirstDrawRenderable |
| React | TimeToFirstDraw wrapper and automatic <time-to-first-draw> |
| Solid | TimeToFirstDraw wrapper and automatic <time_to_first_draw> |
| Status | Built-in diagnostic |
Core API#
import { TimeToFirstDrawRenderable } from "@aicippytui/core"
const firstDraw = new TimeToFirstDrawRenderable(renderer, {
label: "First draw timestamp",
precision: 1,
fg: "#94a3b8",
})
renderer.root.add(firstDraw)On its first renderSelf() call, the renderable stores performance.now() in runtimeMs. Later draws continue to display that same value. reset() clears it and requests another render. The next draw captures a new timestamp.
console.log(firstDraw.runtimeMs) // null before the first draw
firstDraw.reset()React#
import { TimeToFirstDraw } from "@aicippytui/react"
function App() {
return <TimeToFirstDraw label="First draw timestamp" precision={1} fg="#94a3b8" />
}The React binding exports TimeToFirstDraw and TimeToFirstDrawProps. It also registers the time-to-first-draw intrinsic element automatically. The exported component is the direct public wrapper.
Solid#
import { TimeToFirstDraw } from "@aicippytui/solid"
const App = () => <TimeToFirstDraw label="First draw timestamp" precision={1} fg="#94a3b8" />The Solid binding exports TimeToFirstDraw and TimeToFirstDrawProps. It also registers the time_to_first_draw intrinsic element automatically. The exported component is the direct public wrapper.
Options#
The core renderable and both framework wrappers accept these options in addition to standard renderable layout options:
| Option | Type | Default | Description |
|---|---|---|---|
fg |
ColorInput |
"#AAAAAA" |
Text color |
label |
string |
"Time to first draw" |
Text before the timestamp |
precision |
number |
2 |
Decimal places passed to toFixed(). Use an integer from 0 through 100 |
width |
layout dimension | "100%" |
Renderable width |
height |
layout dimension | 1 |
Renderable height |
flexShrink |
number |
0 |
Layout shrink factor |
alignSelf |
layout alignment | "center" |
Cross-axis alignment |
User-supplied layout values override the width, height, shrink, and alignment defaults. The Core constructor floors
precision and clamps it to zero. A non-finite Core value becomes 2. React and Solid currently assign the prop
directly after construction and bypass that normalization. Pass an integer from 0 through 100 to either wrapper.
Negative and infinite wrapper values can throw when the component draws, and NaN produces zero decimal places.
The rendered line is ${label}: ${runtimeMs.toFixed(precision)}ms. AiCIPPYTUI centers it by display-cell width and truncates it at a grapheme boundary.
Runtime properties#
| Member | Description |
|---|---|
runtimeMs |
Read-only number | null. First-draw performance.now() reading |
fg = value |
Change the text color and request a render |
color = value |
Alias for the fg setter |
textLabel = value |
Change the displayed label |
decimals = value |
Change the normalized display precision |
reset() |
Clear runtimeMs and capture another timestamp on the next draw |
The constructor and JSX option names are label and precision. The post-construction setter names are textLabel and decimals.