Repository navigation
v4.25.0 — Automatic sleep and performance improvements
[4.25.0] — 2026-10-02
Added
- A discoverable Automatic sleep demo with a live simulated price feed, Pause/Resume,
an automatic-sleep switch, and a measured engine activity readout. - Experimental
LiveChart.autoSleep(off by default): settled paused, parked, or
fixed-time charts stop engine frame requests and wake on input or gesture changes.
Includes demand-driven candle width and event-driven marker projection. Live
scrolling, pulses, and configured continuous effects remain awake. - A volatile range stress demo with rolling data, live candles, forced spikes and
crashes, pause/resume, zoom, and in-place history corrections. A repeatable
outlier sequence and fitted Y-range readout show expansion and recovery.
Changed
-
Single-series line and candle charts reuse committed-history range scans while
the data revision and visible index bounds remain unchanged. Live candles,
reference values, and animation continue updating each frame. Same-length
replacements and notified in-place edits invalidate the cache automatically. -
Volume bars reuse rectangle inputs, and their historical maximum is reused
while data and visible bucket bounds stay unchanged. Live volume still rescales
the band immediately; notified same-length edits invalidate the maximum. -
Line, area fill and threshold bands share each segment's curve calculations.
Threshold-only updates retain existing line/fill outputs. Gap boundaries,
independent fill closures and immutable path outputs are preserved. -
Sharp candle bodies reuse a plain rectangle input within each path rebuild,
avoiding per-candle Skia rectangle factory calls. The four batched paths,
rounded bodies, wicks, and volume rendering keep their existing behavior.
Removed
- The Candle work benchmark and Volume and line work demo screens, their
menu entries, measurement-only components, and guide links.
Fixed
- Settled X-axis labels no longer repeatedly invalidate their own cache when
invisible labels are added and removed within the same calculation. - Static single-series charts refresh their range after an interior history edit,
even when array length and endpoint values stay unchanged. - Y-axis labels no longer mutate a SharedValue's published cache. Toggling the
axis off and on while values change could throwcannot add a new property
in development builds when a new tick was added. BothLiveChartand
LiveChartSeriesnow copy the cache before updating label fades (#343). LiveChartSeriespublishes replacement series with the matching engine
range and tips. Switching datasets with different units (such as Price to
Market Cap) no longer exposes new histories against the previous frame's
Y scale. Series entries are copied each measured frame; history arrays
remain shared (#346).- Degen particles and shake use a continuous display-frame clock, including
particle fading and shrinking in the Atlas. The viewport clock advances in
half-pixel steps, which made effects stutter despite healthy UI/JS FPS, and
can be pinned bynowOverrideor panning. Both chart types now animate effects
independently while retaining the fixed-length Atlas arrays that prevent
native crashes. - The empty-state label's gap gradient follows its rectangle's canvas
coordinates, removing the misplaced white/black band to the left of the text
on transparent and opaque canvases. - A styled loading shell keeps its look while it fades out and the reveal morph
melts it into the line. Both run afterloadinghas turned off, when the
config is gone, so the squiggle snapped to the default color, stroke, wave
height and speed as the data arrived, andaxisLabels: falseflashed the
skeleton Y-axis placeholders.LiveChartandLiveChartSeriesnow keep the
lastloadingconfig for the shell's look, the empty shell shown later
included. The loading guide no longer claimscolorreaches the reveal morph
(onlyamplitudeandspeeddo). - The loading line keeps moving under a
nowOverride. The squiggle took its
phase from the engine clock, which anowOverridepins between data updates,
so the loading line stood still, as the live dot's pulse once did. The
squiggle and the reveal's morph now share a wall clock. The loading shell
ticks it only while it shows, and never on astaticchart, while
isFrameLoopActiveis off, or atloading.speed0. - A tall chart's Y axis labels every grid line it draws. Labels came from a
fixed pool of 15, and a tall plot (or a smallminGap) can carry more
labelled lines: a step is kept while its spacing stays within 0.5-4x
minGap, so a full-height phone chart can show 20 or more. The extra lines
were drawn without labels, and which ones depended on key order. The pool now
starts at 15 and grows to what the grid produces, up to what the plot can
hold (labelled lines at least half aminGapapart). The fixed-countmode
is unchanged (at most 15). - Idle charts with an x-axis no longer repaint at the display refresh rate. The
axis deleted its off-plot tick labels (one interval past each edge, at alpha
0) and re-created them on the next run, so every run rewrote the label cache
its own mapper reads. A remaining case of
#304.