code: func (c *cubicSender) maybeIncreaseCwnd(
  	ackedPacketNumber protocol.PacketNumber,
  	ackedBytes protocol.ByteCount,
  	priorInFlight protocol.ByteCount,
  	eventTime time.Time,
  ) {
  	// Do not increase the congestion window unless the sender is close to using
  	// the current window.
  	if !c.isCwndLimited(priorInFlight) {
  		c.cubic.OnApplicationLimited()
  		return
  	}
  	if c.congestionWindow >= c.maxCongestionWindow {
  		return
  	}
  	if c.InSlowStart() {
  		// TCP slow start, exponential growth, increase by one for each ACK.
  		c.congestionWindow += protocol.DefaultTCPMSS
  		return
  	}
  	// Congestion avoidance
  	if c.reno {
  		// Classic Reno congestion avoidance.
  		c.numAckedPackets++
  		// Divide by num_connections to smoothly increase the CWND at a faster
  		// rate than conventional Reno.
  		if c.numAckedPackets*uint64(c.numConnections) >= uint64(c.congestionWindow)/uint64(protocol.DefaultTCPMSS) {
  			c.congestionWindow += protocol.DefaultTCPMSS
  			c.numAckedPackets = 0
  		}
  	} else {
  		c.congestionWindow = utils.MinByteCount(c.maxCongestionWindow, c.cubic.CongestionWindowAfterAck(ackedBytes, c.congestionWindow, c.rttStats.MinRTT(), eventTime))
  	}
  }
docs: // Called when we receive an ack. Normal TCP tracks how many packets one ack
  // represents, but quic has a separate ack for each packet.