{ "schema": "freecad-web-performance-budget/v1", "sourceRevision": "4f4e9244e613ea2df06e70027074a562695048cb", "inputs": { "desktop": "FreeCAD/docs/freecad-performance-desktop.json", "mobile": "FreeCAD/docs/freecad-performance-mobile.json", "fixture": "FreeCAD/docs/freecad-performance-fixtures.json" }, "thresholds": { "startupMs": {"desktopMax": 1000, "mobileMax": 1500, "unit": "ms"}, "stepImportMs": {"desktopMax": 2000, "mobileMax": 3000, "unit": "ms"}, "resetMs": {"desktopMax": 250, "mobileMax": 500, "unit": "ms"}, "peakHeapDeltaBytes": {"max": 33554432, "unit": "bytes", "definition": "peak usedJSHeapSize minus initial usedJSHeapSize per replay"}, "postResetHeapDeltaBytes": {"max": 2097152, "unit": "bytes", "definition": "after-reset usedJSHeapSize minus initial usedJSHeapSize per replay; negative is acceptable"} }, "measured": { "desktop": { "startupMs": {"min": 219.5, "max": 241.8, "median": 229.7, "result": "pass"}, "stepImportMs": {"min": 580.4, "max": 636.2, "median": 582.7, "result": "pass"}, "resetMs": {"min": 0.5, "max": 1.1, "median": 0.7, "result": "pass"}, "peakHeapDeltaBytes": {"max": 1158277, "result": "pass"}, "postResetHeapDeltaBytes": {"max": 1158277, "result": "pass"} }, "mobileEmulation": { "startupMs": {"min": 221.6, "max": 241.2, "median": 240.7, "result": "pass"}, "stepImportMs": {"min": 651.1, "max": 666.5, "median": 653.9, "result": "pass"}, "resetMs": {"min": 7.0, "max": 7.2, "median": 7.1, "result": "pass"}, "peakHeapDeltaBytes": {"max": 1198313, "result": "pass"}, "postResetHeapDeltaBytes": {"max": 1198313, "result": "pass"} } }, "sampleOutcomes": { "STEP": "3/3 pass on desktop and mobile emulation; mesh 8376/2792/62", "FCStd": "3/3 expected parser errors on each environment; importer remains pending", "OBJ": "3/3 expected parser errors on each environment; mesh-file importer remains pending" }, "pendingRisks": [ { "id": "heap-baseline-growth", "status": "pending", "observation": "usedJSHeapSize baseline increased across repeated page reloads in one Chrome session; no forced GC API is available", "impact": "this evidence cannot prove long-session reclamation beyond the per-run post-reset threshold" }, { "id": "cache-hit-not-observable", "status": "pending", "observation": "current sample path writes mesh cache after a load but does not read it before the next load", "impact": "cache hit latency is excluded from this budget" }, { "id": "fcstd-and-mesh-import", "status": "pending", "observation": "FCStd and OBJ fixtures produce the fixed STEP-parser error in the current UI", "impact": "no performance claim is made for those formats" } ], "result": "pass_for_measured_step_contract_with_explicit_pending_scope", "blocked": false }