per-LOD metrics snapshots (already produced by getMetrics())
the parent node path to report as this aggregate's path
the type to report when inner is EMPTY — a disposed
ladder clears its level loaders, so this is the only thing left to name the
node by. Required from the caller rather than defaulted: it used to be a
hard-coded 'point-spatial-index', which silently relabelled a disposed
lines / gsplats / mesh node as a points loader in the monitor's loader list
(mesh visibly so — a mesh row reading "points / pts").
Aggregate the per-LOD metrics of a progressive loader's inner loaders into a single LoaderMetrics representing the whole node.
Counters (
queries/loads/errors/elementsLoaded/bytesLoaded/visibleElements/memoryUsed) are summed.avgQueryTime/avgLoadTimeare weighted means byqueries/loadsrespectively (so a LOD that never queried doesn't skew the average). The optionalspatialIndexcell counts are summed; its per-query rates (avgCellsPerQuery/queryEfficiency) are query-weighted means over the LODs that actually report aspatialIndex(a LOD without a chunk index still counts queries, soout.querieswould be the wrong denominator), whileavgElementsPerCellis weighted byoccupiedCells(it is a per-cell density — cell-weighting recovers total elements / total cells).optimization(mostly app-global singletons like WASM/GPU-pool) is taken from the first loader that reports it to avoid double-counting.