applySnapshotBudget function

UiSnapshot applySnapshotBudget(
  1. UiSnapshot snap, {
  2. int maxNodes = kSnapshotMaxNodes,
})

Trim snap to at most maxNodes nodes by rank, keeping document order.

Implementation

UiSnapshot applySnapshotBudget(UiSnapshot snap,
    {int maxNodes = kSnapshotMaxNodes}) {
  if (snap.nodes.length <= maxNodes) return snap;

  final indexed = List<int>.generate(snap.nodes.length, (i) => i);
  indexed.sort((a, b) {
    final ra = snapshotBudgetRank(snap.nodes[a]);
    final rb = snapshotBudgetRank(snap.nodes[b]);
    if (ra != rb) return ra - rb;
    return a - b;
  });
  final keep = indexed.take(maxNodes).toList()..sort();

  return _selectNodes(snap, keep);
}