Files
brahman/crates/modules/ui_engine/widgets/lapaloma-stream/src/lib.rs
T
sergio 4796f2652d feat(lapaloma-stream): osciloscopio CRT con RingBuffer en sweep mode
- lapaloma-stream: feature `gpui` (default). LapalomaStreamElement
  pinta un RingBuffer en modo sweep — dos polilíneas split-at-head
  (segmento [head..cap) viejo + [0..head) nuevo) para evitar la
  línea horizontal del wraparound. Pre-fill (count < cap) sólo
  pinta [0, head) para evitar el flat-line del 1.0.2 fix.
- y_range configurable, background opcional, padding.
- crates/apps/lapaloma-stream-demo: osciloscopio sintético con
  RingBuffer cap=512. Timer en cx.background_executor que hace
  push(synthesize(t)) + cx.notify() cada 16ms (60 Hz). Señal =
  suma de dos sinusoides desfasadas + jitter determinístico.
  Header muestra cap / head / filled% / t / revision en vivo.
- Workspace: registrada la app lapaloma-stream-demo.

Showcase del P2 zero-alloc: push(v) son 2 writes + 2 increments,
zero allocations per frame, ningún Vec se reasigna.

46 tests verdes (sin cambios; el stream se valida en runtime via demo).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-13 02:58:25 +00:00

24 lines
838 B
Rust

//! `lapaloma-stream` — telemetría streaming tipo osciloscopio.
//!
//! Núcleo: `lapaloma_core::ring::RingBuffer` + render en dos
//! segmentos split-at-head (modo sweep). El emisor de samples vive
//! afuera del Element — típicamente en el `Render` host con un
//! timer `cx.background_executor().timer(...)` que llama a
//! `buffer.push(value)` y `cx.notify()` cada N ms.
//!
//! El Element clona el RingBuffer por frame (para cap = 512 son
//! 4 KB, irrelevante). Para capacidades grandes (100k+) la siguiente
//! optimización es pasar `Arc<RingBuffer>` con shared read y
//! mutación interna via `Mutex`/`AtomicU64` para el head.
#![forbid(unsafe_code)]
#![allow(dead_code)]
pub mod envelope {}
#[cfg(feature = "gpui")]
pub mod element;
#[cfg(feature = "gpui")]
pub use element::{lapaloma_stream, LapalomaStreamElement};