docs: function(dump) {
        // Completely skip dumps with undefined size.
        if (!hasSize(dump))
          return;
  
        // If the dump is a leaf node, then both sub-sizes are equal to the size.
        if (dump.children === undefined || dump.children.length === 0) {
          var size = getSize(dump);
          dump.notOwningSubSize_ = size;
          dump.notOwnedSubSize_ = size;
          return;
        }
  
        // Calculate this dump's not-owning sub-size by summing up the not-owning
        // sub-sizes of children MADs which do not own another MAD.
        var notOwningSubSize = 0;
        dump.children.forEach(function(childDump) {
          if (childDump.owns !== undefined)
            return;
          notOwningSubSize += optional(childDump.notOwningSubSize_, 0);
        });
        dump.notOwningSubSize_ = notOwningSubSize;
  
        // Calculate this dump's not-owned sub-size.
        var notOwnedSubSize = 0;
        dump.children.forEach(function(childDump) {
          // If the child dump is not owned, then add its not-owned sub-size.
          if (childDump.ownedBy.length === 0) {
            notOwnedSubSize += optional(childDump.notOwnedSubSize_, 0);
            return;
          }
          // If the child dump is owned, then add the difference between its size
          // and the largest owner.
          var largestChildOwnerSize = 0;
          childDump.ownedBy.forEach(function(ownershipLink) {
            largestChildOwnerSize = Math.max(
                largestChildOwnerSize, getSize(ownershipLink.source));
          });
          notOwnedSubSize += getSize(childDump) - largestChildOwnerSize;
        });
        dump.notOwnedSubSize_ = notOwnedSubSize;
      }