- Dirty-flag render: dataVersion counter in RealtimeChartState, skip Canvas draw when no new data since last frame (zero GPU work when sensor idle) - targetFps=30 default in ChartConfig (pass null for max display refresh rate) - iOS targets: iosX64, iosArm64, iosSimulatorArm64 + Platform.ios.kt actual - KDoc: RealtimeChart params, dataVersion, ChartConfig.targetFps, LodMode entries, AxisLabelMode entries - README: fixed Maven coords, added LoD/AxisLabels/Material3 sections, updated feature list and performance notes - Tests: RealtimeChartStateTest (17 tests, dataVersion + signal lifecycle) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
71 lines
2.6 KiB
Markdown
71 lines
2.6 KiB
Markdown
# Project State
|
||
|
||
## Project Reference
|
||
|
||
See: .paul/PROJECT.md (updated 2026-05-21)
|
||
|
||
**Core value:** Android devs plot 200Hz+ multi-signal sensor data without frame drops
|
||
**Current focus:** v0.3.0 IN PROGRESS — dirty flag render + targetFps=30 shipped
|
||
|
||
## Current Position
|
||
|
||
Milestone: v0.2.0-polish
|
||
Phase: 6 of 6 — Complete
|
||
Plan: .paul/phases/v0.2.0-plan.md
|
||
Status: Complete
|
||
Last activity: 2026-05-21 — dirty flag render, targetFps=30, 17 unit tests, KDoc, README, iOS targets (iosX64/iosArm64/iosSimulatorArm64) + Platform.ios.kt actual.
|
||
|
||
Progress:
|
||
- v0.1.0 milestone: [██████████] 100% SHIPPED
|
||
- v0.2.0 milestone: [██████████] 100% SHIPPED
|
||
|
||
## Loop Position
|
||
|
||
```
|
||
PLAN ──▶ APPLY ──▶ UNIFY
|
||
✓ ✓ ✓ [v0.2.0 SHIPPED — v0.5.0-SNAPSHOT]
|
||
```
|
||
|
||
## Accumulated Context
|
||
|
||
### Decisions
|
||
|
||
| Decision | Phase | Impact |
|
||
|----------|-------|--------|
|
||
| Canvas custom rendering (no lib) | Init | Core architecture |
|
||
| Render/data decoupled withFrameNanos | Init | RenderLoop design |
|
||
| TieredBuffer over flat ring | v0.2.0 | O(N×constant) memory, 20+ signals |
|
||
| MIN_MAX tier binning (not MEAN) | v0.2.0 | Composable, no artifacts at tier boundaries |
|
||
| MEAN removed from LodMode | v0.2.0 | Cleaner API, no synthetic values |
|
||
| LodDecimator as class (pre-alloc scratch) | v0.2.0 | Zero GC at render time |
|
||
| Sensor cap 200Hz (5_000μs) | v0.2.0 | Thermal/battery optimization |
|
||
| Package dev.dtrentin | v0.2.0 | Personal project, not company |
|
||
| iOS targets shipped | v0.3.0 | iosX64/iosArm64/iosSimulatorArm64 + Platform.ios.kt |
|
||
|
||
### Deferred Issues
|
||
|
||
| Issue | Origin | Effort | Revisit |
|
||
|-------|--------|--------|---------|
|
||
| ~~Dirty flag render (skip frame if no new data)~~ | v0.2.0 | S | ✓ v0.3.0 |
|
||
| ~~targetFps=30 default~~ | v0.2.0 | S | ✓ v0.3.0 |
|
||
| ~~iOS expect/actual beyond currentTimeMs~~ | Init | L | ✓ v0.3.0 |
|
||
| ~~KDoc on public API surface~~ | v0.2.0 | M | ✓ v0.3.0 |
|
||
| ~~README with integration example~~ | v0.2.0 | S | ✓ v0.3.0 |
|
||
| Publish to Maven Central / GitHub Packages | v0.2.0 | M | v0.3.0 |
|
||
|
||
### Blockers/Concerns
|
||
None.
|
||
|
||
## Session Continuity
|
||
|
||
Last session: 2026-05-21
|
||
Stopped at: v0.2.0 complete. All AC pass. Git pushed to remote.
|
||
Next action: Define v0.3.0 scope (dirty flag render, targetFps=30, KDoc, publish)
|
||
Resume context:
|
||
- Library: AndroidCharts/chart-realtime, published dev.dtrentin:chart-realtime:0.5.0-SNAPSHOT to mavenLocal
|
||
- App: AndroidChartsApp consuming library, builds clean
|
||
- Remote: ssh://git@3nt-git.duckdns.org:222/davide.trentin/KMPCharts.git
|
||
- Package: dev.dtrentin.chart
|
||
|
||
---
|
||
*STATE.md — Updated after every significant action*
|