segmentDownloaded(deltaTimeMs, numBytes, allowSwitch, request, context) {
    let realTimeMs = deltaTimeMs;
    if (this.config_.removeLatencyFromFirstPacketTime &&
        request && request.packetNumber === 1 && request.timeToFirstByte) {
      realTimeMs = deltaTimeMs - request.timeToFirstByte;
    }
    if (realTimeMs < this.config_.cacheLoadThreshold) {
      // The time indicates that it could be a cache response, so we should
      // ignore this value.
      return;
    }
    shaka.log.v2('Segment downloaded:',
        'contentType=' + (request && request.contentType),
        'deltaTimeMs=' + realTimeMs,
        'numBytes=' + numBytes,
        'lastTimeChosenMs=' + this.lastTimeChosenMs_,
        'enabled=' + this.enabled_);
    goog.asserts.assert(realTimeMs >= 0, 'expected a non-negative duration');
    this.bandwidthEstimator_.sample(realTimeMs, numBytes);

    if (allowSwitch && (this.lastTimeChosenMs_ != null) && this.enabled_) {
      this.suggestStreams_();
    }
  }
@param {number} deltaTimeMs The duration, in milliseconds, that the request
    took to complete.
@param {number} numBytes The total number of bytes transferred.
@param {boolean} allowSwitch Indicate if the segment is allowed to switch
    to another stream.
@param {shaka.extern.Request=} request
    A reference to the request
@param {shaka.extern.RequestContext=} context
    A reference to the request context
@override
@export