mirror of
https://github.com/Matysh/houseplan-card
synced 2026-09-29 03:09:36 +00:00
Every card instance attached its summary-panel runtime through import().then(), even when the chunk had loaded long ago. The first render therefore measured a header without summary controls; the controls arrived a beat later, the stage shrank, the deferred refit opened a `stage-resize` continuity candidate and the first HA tick paid three extra render passes (Full Performance: blend stateUpdate1 50 → 130 ms, overlay 217 → 809 ms; locally 4 performUpdate per tick instead of 1). summary-runtime-loader.ts separates the summary code from its state: the loaded factory is cached per page, every host builds its own runtime from it (no shared preferences, drafts, subscriptions, timers or DOM). A warm factory yields the runtime synchronously in connectedCallback, before the first Lit render; a cold mount still pays one lazy import, concurrent cold mounts share the pending import, a failed import is forgotten so the next connection retries, and a disconnect cancels the pending attachment of that connection. SummaryRuntimeSlot owns the per-host lifecycle so the card core stays under its line ceiling. Witnesses: loader unit tests (distinct instances, shared pending import, cancelled attachment, retry after failure); demo/smoke_summary_warm_attach (warm replacement and cold-key instance on a warm page own the runtime before the first render, header/stage stable from the first frame, no stage-resize, one performUpdate per geometry-neutral tick, a real viewport resize still opens stage-resize); mutant summary-runtime-attaches-after- first-render. smoke_summary_panel waited for `_summary` as a readiness proxy; it now waits for the server config load, which stays asynchronous. Local paired glow benchmarks (4× CPU throttle): blend 159.7 → 49.9 ms and overlay 326.7 → 120.4 ms at stateUpdate1 with renders 4 → 1; the isometric load loses the three summary-owned long tasks. Docs screenshots: all 11 frames decode pixel-identical to the committed ones; the manifest carries only the new source fingerprint. Initial View ceiling recentred 299 100 → 299 600 for the +299 B loader. Issue: #506 User-Visible: yes
144 lines
4.5 KiB
JSON
144 lines
4.5 KiB
JSON
{
|
|
"version": 2,
|
|
"fixture": "synthetic-only",
|
|
"chromium": "151.0.7922.34",
|
|
"oxipng": "oxipng 10.2.0",
|
|
"sourceFingerprint": "4c472e043fa69a664ba9778200ff67b223e2f23b4eeb29c84688c14d93956de7",
|
|
"captureScriptSha256": "9e4b0ae533407fe003a129078aec020f2c83d67cdb6fc6da696ce3d829beaeb5",
|
|
"command": "npm run build && node demo/docs/capture.mjs",
|
|
"scenarios": {
|
|
"view-desktop": {
|
|
"file": "01-view-desktop.png",
|
|
"viewport": {
|
|
"width": 1180,
|
|
"height": 900
|
|
},
|
|
"theme": "dark",
|
|
"language": "en",
|
|
"sourceSha256": "4c472e043fa69a664ba9778200ff67b223e2f23b4eeb29c84688c14d93956de7",
|
|
"imageSha256": "76c35a87810e3dc6890bda7b43da133f57d8860031204a62cda7115c15950090"
|
|
},
|
|
"view-touch": {
|
|
"file": "02-view-touch.png",
|
|
"viewport": {
|
|
"width": 390,
|
|
"height": 760
|
|
},
|
|
"theme": "dark",
|
|
"language": "en",
|
|
"sourceSha256": "4c472e043fa69a664ba9778200ff67b223e2f23b4eeb29c84688c14d93956de7",
|
|
"imageSha256": "795585acb09488236ebb8028a7fcbd918404c5fe01560bb9b4559de13d441625"
|
|
},
|
|
"space-create": {
|
|
"file": "03-space-create.png",
|
|
"viewport": {
|
|
"width": 900,
|
|
"height": 850
|
|
},
|
|
"theme": "dark",
|
|
"language": "en",
|
|
"sourceSha256": "4c472e043fa69a664ba9778200ff67b223e2f23b4eeb29c84688c14d93956de7",
|
|
"imageSha256": "9f0970de09772674c3156b9fc5b2d49de0ceb22be11ecf8b136047d37d100a84"
|
|
},
|
|
"room-contour-close": {
|
|
"file": "04-room-contour-close.png",
|
|
"viewport": {
|
|
"width": 1180,
|
|
"height": 900
|
|
},
|
|
"theme": "dark",
|
|
"language": "en",
|
|
"sourceSha256": "4c472e043fa69a664ba9778200ff67b223e2f23b4eeb29c84688c14d93956de7",
|
|
"imageSha256": "0c354a79f9c3660788b6c5e889a27b6bd78b1f209dc0eef6bb43e2c1344028c4"
|
|
},
|
|
"plan-context-tray": {
|
|
"file": "05-plan-context-tray.png",
|
|
"viewport": {
|
|
"width": 1180,
|
|
"height": 900
|
|
},
|
|
"theme": "dark",
|
|
"language": "en",
|
|
"sourceSha256": "4c472e043fa69a664ba9778200ff67b223e2f23b4eeb29c84688c14d93956de7",
|
|
"imageSha256": "64169c543291bc4df806dcf8ff484b42c8ea55eb343323d945344e0e28f2ce97"
|
|
},
|
|
"device-editor": {
|
|
"file": "06-device-editor.png",
|
|
"viewport": {
|
|
"width": 1180,
|
|
"height": 1100
|
|
},
|
|
"theme": "dark",
|
|
"language": "en",
|
|
"sourceSha256": "4c472e043fa69a664ba9778200ff67b223e2f23b4eeb29c84688c14d93956de7",
|
|
"imageSha256": "3c8703175605fcf0387d654cd30783ecfd33e21743e70b45190a5ae1a8d355c2"
|
|
},
|
|
"device-display-preview": {
|
|
"file": "06-device-display-preview.png",
|
|
"viewport": {
|
|
"width": 1180,
|
|
"height": 1100
|
|
},
|
|
"theme": "dark",
|
|
"language": "en",
|
|
"sourceSha256": "4c472e043fa69a664ba9778200ff67b223e2f23b4eeb29c84688c14d93956de7",
|
|
"imageSha256": "5d6193202102f5e6d85567f1111fa105895b933979fbf369c6ba0b1029deb823"
|
|
},
|
|
"background-editor": {
|
|
"file": "07-background-editor.png",
|
|
"viewport": {
|
|
"width": 1180,
|
|
"height": 900
|
|
},
|
|
"theme": "dark",
|
|
"language": "en",
|
|
"sourceSha256": "4c472e043fa69a664ba9778200ff67b223e2f23b4eeb29c84688c14d93956de7",
|
|
"imageSha256": "375900a29aa62632883ede6727b7dbb8b48cabe9d7d0e16425f9779c837f3dd9"
|
|
},
|
|
"room-card": {
|
|
"file": "08-room-card.png",
|
|
"viewport": {
|
|
"width": 1180,
|
|
"height": 900
|
|
},
|
|
"theme": "dark",
|
|
"language": "en",
|
|
"sourceSha256": "4c472e043fa69a664ba9778200ff67b223e2f23b4eeb29c84688c14d93956de7",
|
|
"imageSha256": "3d85424676c823ddca3fa7dab3cce089b6030e48c05d16d2d48d922c66c0cbd2"
|
|
},
|
|
"device-info": {
|
|
"file": "09-device-info.png",
|
|
"viewport": {
|
|
"width": 1000,
|
|
"height": 900
|
|
},
|
|
"theme": "dark",
|
|
"language": "en",
|
|
"sourceSha256": "4c472e043fa69a664ba9778200ff67b223e2f23b4eeb29c84688c14d93956de7",
|
|
"imageSha256": "ac962820f8e1c5cb5b042d39b18dc95905fa840cb2d4749060d991be4f6977c2"
|
|
},
|
|
"pdf-export": {
|
|
"file": "10-pdf-export.png",
|
|
"viewport": {
|
|
"width": 900,
|
|
"height": 760
|
|
},
|
|
"theme": "light",
|
|
"language": "en",
|
|
"sourceSha256": "4c472e043fa69a664ba9778200ff67b223e2f23b4eeb29c84688c14d93956de7",
|
|
"imageSha256": "4537692fd57a3ed95528eddd748eee5cb6e456ffab7cc49169853d62459252cd"
|
|
}
|
|
},
|
|
"acceptedOn": "linux",
|
|
"acceptance": {
|
|
"declared": [
|
|
"view-desktop",
|
|
"view-touch",
|
|
"device-info",
|
|
"pdf-export"
|
|
],
|
|
"witnesses": 7,
|
|
"floor": 2
|
|
}
|
|
}
|