docs: function(fn) {
        var visitedDumps = new WeakSet();
        var openDumps = new WeakSet();
  
        function visit(dump) {
          if (visitedDumps.has(dump))
            return;
  
          if (openDumps.has(dump))
            throw new Error(dump.userFriendlyName + ' contains a cycle');
          openDumps.add(dump);
  
          // Visit owners before the dumps they own.
          dump.ownedBy.forEach(function(ownershipLink) {
            visit.call(this, ownershipLink.source);
          }, this);
  
          // Visit children before parents.
          dump.children.forEach(visit, this);
  
          // Actually visit the current memory allocator dump.
          fn.call(this, dump);
          visitedDumps.add(dump);
  
          openDumps.delete(dump);
        }
  
        this.iterateAllRootAllocatorDumps(visit);
      }