mirror of
https://github.com/Matysh/houseplan-card
synced 2026-09-28 19:01:34 +00:00
#500 gave `_serverCfg` and `_layout` prototype accessors but left them in
`static properties`. Lit marks such a property `wrapped` and, on the FIRST
update, force-writes it into `changedProperties` with an `undefined` old
value even though nobody assigned anything (`reactive-element.js:249-252`
and `:880-886`). `willUpdate` reads that as a config replacement, raises
`_cfgEpoch`, the memoized model key changes, and a 60-room house builds and
paints its model a second time: measured 19 update cycles, 4 builds and 4
epochs against 18 / 3 / 3 before #500, worth ~550 ms of `modelReadyMs` and
the same on `firstStableRenderMs` (3355 against a 3000 ceiling).
The declaration goes; the bodies stay reactive through the owner —
`_adoption` → `onBodyReplaced` → `requestUpdate(field, previous)` — which
needs no declaration: `getPropertyOptions` falls back to the default and
`changed.has('_serverCfg')` works as before. `noAccessor: true` would not
help, `wrapped` is set before that flag is read. The trap is written above
`static properties`, where someone would put the declaration back.
`cache.entries.cleanFloor` returns to 100 in both interaction budgets: the
120 entries were the extra epoch re-keying the per-room cache, not a
property of the design — the reasoning in 914e8402 was wrong.
Witness: test/config-adoption-ownership.test.mjs pins that neither body is
declared; the mutant `adoption-bodies-declared-reactive` puts the
declaration back and reddens it.
The boot diagnostics of the previous three commits touch four private
members, so they are declared in the performance contract: `_buildModel` and
`_cfgEpoch` outright (both exist in every supported comparison base), and the
adoption entry point as a current/legacy pair — #500 turned the private
`_adoptStructuralResponses` into the public `_adoptAuthoritative`, and an
undeclared rename would have the counter report zero adoptions instead of
failing.
The same commits carried a `node_modules` symlink: `.gitignore` had the
pattern with a trailing slash, which does not cover a symbolic link, and
`git add -A` in a sandbox worktree committed it. The link is removed and the
pattern loses the slash; a mutant run on this branch failed with `EEXIST` on
it.
Issue: #520
User-Visible: no
118 lines
2.3 KiB
JSON
118 lines
2.3 KiB
JSON
{
|
|
"schema": 1,
|
|
"profile": "large-house-interaction-v1",
|
|
"minimumSamples": 3,
|
|
"timings": {
|
|
"modelReadyMs": {
|
|
"stat": "median",
|
|
"hardMaxMs": 2500
|
|
},
|
|
"firstStableRenderMs": {
|
|
"stat": "median",
|
|
"hardMaxMs": 3000
|
|
},
|
|
"interactionSeriesMs": {
|
|
"stat": "median",
|
|
"hardMaxMs": 3300
|
|
},
|
|
"hoverSeriesMs": {
|
|
"stat": "median",
|
|
"hardMaxMs": 500
|
|
},
|
|
"panSeriesMs": {
|
|
"stat": "median",
|
|
"hardMaxMs": 500
|
|
},
|
|
"cameraSeriesMs": {
|
|
"stat": "median",
|
|
"hardMaxMs": 500
|
|
},
|
|
"editorSeriesMs": {
|
|
"stat": "median",
|
|
"hardMaxMs": 750
|
|
},
|
|
"irrelevantHaTicksMs": {
|
|
"stat": "median",
|
|
"hardMaxMs": 250
|
|
},
|
|
"relevantHaTickMs": {
|
|
"stat": "median",
|
|
"hardMaxMs": 250
|
|
},
|
|
"spaceSwitchMs": {
|
|
"stat": "median",
|
|
"hardMaxMs": 1500
|
|
},
|
|
"stateUpdateMs": {
|
|
"stat": "median",
|
|
"hardMaxMs": 1000
|
|
},
|
|
"resizePreviewMs": {
|
|
"stat": "median",
|
|
"hardMaxMs": 2000
|
|
},
|
|
"panZoomMs": {
|
|
"stat": "median",
|
|
"hardMaxMs": 500
|
|
},
|
|
"settingsDialogMs": {
|
|
"stat": "median",
|
|
"hardMaxMs": 1000
|
|
},
|
|
"switchCycleMs": {
|
|
"stat": "median",
|
|
"hardMaxMs": 7000
|
|
}
|
|
},
|
|
"longTasks": {
|
|
"maxSingleMs": 3000,
|
|
"maxCountP95": 30,
|
|
"maxTotalP95Ms": 12000
|
|
},
|
|
"longTaskWindows": {
|
|
"hoverSeries": {
|
|
"maxSingleMs": 150,
|
|
"maxCountP95": 3,
|
|
"maxTotalP95Ms": 300
|
|
},
|
|
"panSeries": {
|
|
"maxSingleMs": 150,
|
|
"maxCountP95": 3,
|
|
"maxTotalP95Ms": 300
|
|
},
|
|
"cameraSeries": {
|
|
"maxSingleMs": 150,
|
|
"maxCountP95": 3,
|
|
"maxTotalP95Ms": 300
|
|
},
|
|
"editorSeries": {
|
|
"maxSingleMs": 150,
|
|
"maxCountP95": 3,
|
|
"maxTotalP95Ms": 300
|
|
}
|
|
},
|
|
"heap": {
|
|
"required": true,
|
|
"hardMaxGrowthBytes": 67108864
|
|
},
|
|
"cacheEntries": {
|
|
"cleanFloor": 100,
|
|
"glowClip": 200,
|
|
"wallUnion": 1,
|
|
"openingTunnel": 1,
|
|
"openingWallIndex": 1,
|
|
"planSnapGeometry": 1,
|
|
"wallFaceGraph": 4
|
|
},
|
|
"cacheGrowth": {
|
|
"cleanFloor": 0,
|
|
"glowClip": 0,
|
|
"wallUnion": 0,
|
|
"openingTunnel": 0,
|
|
"openingWallIndex": 0,
|
|
"planSnapGeometry": 0,
|
|
"wallFaceGraph": 0
|
|
},
|
|
"renderedDevices": 200
|
|
}
|