fix(viewer2d): sync dwg-wasm fix for large-DWG load and hatch arc artifacts
Mirrors hmwebviewer's rust/dwg-wasm change into the sample: the wasm artifact plus the parser wrapper, which now goes through parse_dwg_json and JSON.parse instead of the JsValue-returning parse_dwg. Building the whole result as a serde_json::Value tree pushed the live wasm heap near 2.9GB for a 19MB drawing, and the allocator's cost grows with that heap, so parsing went quadratic — 354s, with the tab frozen throughout. Streaming one entity at a time keeps it linear: 2.5s. The same build also fixes three bugs that drew stray 4km grey shapes where two CF-PATT SOLID hatches should be. Max hatch span 4655 -> 110. Adds two docs recording both investigations, in the format of the existing ones: measurements, the hypotheses that were ruled out, the fixes, regression checks, and the MPL-2.0 position (acadrust is unmodified, so no new source-disclosure obligation arises). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
7a6edd4347
commit
b047dc44e2
7 files changed
+770
-3
No files matched your search
+15
@@ -3,15 +3,30 @@
|
||||
|
||||
export function parse_dwg(bytes: Uint8Array): any;
|
||||
|
||||
/**
|
||||
* The same parseResult as [`parse_dwg`], returned as a JSON string for the
|
||||
* caller to hand to `JSON.parse`. Prefer this on anything but small drawings.
|
||||
*
|
||||
* Materializing the whole result as a `serde_json::Value` is what makes big
|
||||
* files unopenable. The tree costs ~150× the DWG on the heap (a 19 MB drawing
|
||||
* peaks near 2 GB), and the wasm allocator's per-allocation cost rises with the
|
||||
* live heap, so conversion goes quadratic — measured 352 s in wasm for work
|
||||
* that takes 2.5 s natively. Converting one entity at a time and appending its
|
||||
* JSON text keeps the live heap flat and the cost linear.
|
||||
*/
|
||||
export function parse_dwg_json(bytes: Uint8Array): string;
|
||||
|
||||
export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module;
|
||||
|
||||
export interface InitOutput {
|
||||
readonly memory: WebAssembly.Memory;
|
||||
readonly parse_dwg: (a: number, b: number) => [number, number, number];
|
||||
readonly parse_dwg_json: (a: number, b: number) => [number, number, number, number];
|
||||
readonly __wbindgen_malloc: (a: number, b: number) => number;
|
||||
readonly __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number;
|
||||
readonly __wbindgen_externrefs: WebAssembly.Table;
|
||||
readonly __externref_table_dealloc: (a: number) => void;
|
||||
readonly __wbindgen_free: (a: number, b: number, c: number) => void;
|
||||
readonly __wbindgen_start: () => void;
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user