Turn ConnectionStateOnSentPacket into an opaque class. This will be useful when experimenting with alternative internal representations of ConnectionStateOnSentPacket fields. PiperOrigin-RevId: 619277286
diff --git a/quiche/quic/core/congestion_control/bandwidth_sampler.cc b/quiche/quic/core/congestion_control/bandwidth_sampler.cc index 05687d7..6b93c13 100644 --- a/quiche/quic/core/congestion_control/bandwidth_sampler.cc +++ b/quiche/quic/core/congestion_control/bandwidth_sampler.cc
@@ -269,7 +269,7 @@ connection_state_map_.Remove( packet_number, [&](const ConnectionStateOnSentPacket& sent_packet) { QUIC_CODE_COUNT(quic_bandwidth_sampler_packet_neutered); - total_bytes_neutered_ += sent_packet.size; + total_bytes_neutered_ += sent_packet.size(); }); } @@ -402,10 +402,10 @@ BandwidthSample BandwidthSampler::OnPacketAcknowledgedInner( QuicTime ack_time, QuicPacketNumber packet_number, const ConnectionStateOnSentPacket& sent_packet) { - total_bytes_acked_ += sent_packet.size; + total_bytes_acked_ += sent_packet.size(); total_bytes_sent_at_last_acked_packet_ = - sent_packet.send_time_state.total_bytes_sent; - last_acked_packet_sent_time_ = sent_packet.sent_time; + sent_packet.send_time_state().total_bytes_sent; + last_acked_packet_sent_time_ = sent_packet.sent_time(); last_acked_packet_ack_time_ = ack_time; if (overestimate_avoidance_) { recent_ack_points_.Update(ack_time, total_bytes_acked_); @@ -426,7 +426,7 @@ // There might have been no packets acknowledged at the moment when the // current packet was sent. In that case, there is no bandwidth sample to // make. - if (sent_packet.last_acked_packet_sent_time == QuicTime::Zero()) { + if (sent_packet.last_acked_packet_sent_time() == QuicTime::Zero()) { QUIC_BUG(quic_bug_10437_4) << "sent_packet.last_acked_packet_sent_time is zero"; return BandwidthSample(); @@ -435,20 +435,20 @@ // Infinite rate indicates that the sampler is supposed to discard the // current send rate sample and use only the ack rate. QuicBandwidth send_rate = QuicBandwidth::Infinite(); - if (sent_packet.sent_time > sent_packet.last_acked_packet_sent_time) { + if (sent_packet.sent_time() > sent_packet.last_acked_packet_sent_time()) { send_rate = QuicBandwidth::FromBytesAndTimeDelta( - sent_packet.send_time_state.total_bytes_sent - - sent_packet.total_bytes_sent_at_last_acked_packet, - sent_packet.sent_time - sent_packet.last_acked_packet_sent_time); + sent_packet.send_time_state().total_bytes_sent - + sent_packet.total_bytes_sent_at_last_acked_packet(), + sent_packet.sent_time() - sent_packet.last_acked_packet_sent_time()); } AckPoint a0; if (overestimate_avoidance_ && - ChooseA0Point(sent_packet.send_time_state.total_bytes_acked, &a0)) { + ChooseA0Point(sent_packet.send_time_state().total_bytes_acked, &a0)) { QUIC_DVLOG(2) << "Using a0 point: " << a0; } else { - a0.ack_time = sent_packet.last_acked_packet_ack_time, - a0.total_bytes_acked = sent_packet.send_time_state.total_bytes_acked; + a0.ack_time = sent_packet.last_acked_packet_ack_time(), + a0.total_bytes_acked = sent_packet.send_time_state().total_bytes_acked; } // During the slope calculation, ensure that ack time of the current packet is @@ -457,7 +457,7 @@ if (ack_time <= a0.ack_time) { // TODO(wub): Compare this code count before and after fixing clock jitter // issue. - if (a0.ack_time == sent_packet.sent_time) { + if (a0.ack_time == sent_packet.sent_time()) { // This is the 1st packet after quiescense. QUIC_CODE_COUNT_N(quic_prev_ack_time_larger_than_current_ack_time, 1, 2); } else { @@ -482,7 +482,7 @@ // Note: this sample does not account for delayed acknowledgement time. This // means that the RTT measurements here can be artificially high, especially // on low bandwidth connections. - sample.rtt = ack_time - sent_packet.sent_time; + sample.rtt = ack_time - sent_packet.sent_time(); sample.send_rate = send_rate; SentPacketToSendTimeState(sent_packet, &sample.state_at_send); @@ -547,7 +547,7 @@ void BandwidthSampler::SentPacketToSendTimeState( const ConnectionStateOnSentPacket& sent_packet, SendTimeState* send_time_state) const { - *send_time_state = sent_packet.send_time_state; + *send_time_state = sent_packet.send_time_state(); send_time_state->is_valid = true; }
diff --git a/quiche/quic/core/congestion_control/bandwidth_sampler.h b/quiche/quic/core/congestion_control/bandwidth_sampler.h index 87989dc..457dbcd 100644 --- a/quiche/quic/core/congestion_control/bandwidth_sampler.h +++ b/quiche/quic/core/congestion_control/bandwidth_sampler.h
@@ -454,28 +454,35 @@ // and the state of the connection at the moment the packet was sent, // specifically the information about the most recently acknowledged packet at // that moment. - struct QUICHE_EXPORT ConnectionStateOnSentPacket { + class QUICHE_EXPORT ConnectionStateOnSentPacket { + public: // Time at which the packet is sent. - QuicTime sent_time; + QuicTime sent_time() const { return sent_time_; } // Size of the packet. - QuicByteCount size; + QuicByteCount size() const { return size_; } // The value of |total_bytes_sent_at_last_acked_packet_| at the time the // packet was sent. - QuicByteCount total_bytes_sent_at_last_acked_packet; + QuicByteCount total_bytes_sent_at_last_acked_packet() const { + return total_bytes_sent_at_last_acked_packet_; + } // The value of |last_acked_packet_sent_time_| at the time the packet was // sent. - QuicTime last_acked_packet_sent_time; + QuicTime last_acked_packet_sent_time() const { + return last_acked_packet_sent_time_; + } // The value of |last_acked_packet_ack_time_| at the time the packet was // sent. - QuicTime last_acked_packet_ack_time; + QuicTime last_acked_packet_ack_time() const { + return last_acked_packet_ack_time_; + } // Send time states that are returned to the congestion controller when the // packet is acked or lost. - SendTimeState send_time_state; + const SendTimeState& send_time_state() const { return send_time_state_; } // Snapshot constructor. Records the current state of the bandwidth // sampler. @@ -483,35 +490,43 @@ ConnectionStateOnSentPacket(QuicTime sent_time, QuicByteCount size, QuicByteCount bytes_in_flight, const BandwidthSampler& sampler) - : sent_time(sent_time), - size(size), - total_bytes_sent_at_last_acked_packet( + : sent_time_(sent_time), + size_(size), + total_bytes_sent_at_last_acked_packet_( sampler.total_bytes_sent_at_last_acked_packet_), - last_acked_packet_sent_time(sampler.last_acked_packet_sent_time_), - last_acked_packet_ack_time(sampler.last_acked_packet_ack_time_), - send_time_state(sampler.is_app_limited_, sampler.total_bytes_sent_, - sampler.total_bytes_acked_, sampler.total_bytes_lost_, - bytes_in_flight) {} + last_acked_packet_sent_time_(sampler.last_acked_packet_sent_time_), + last_acked_packet_ack_time_(sampler.last_acked_packet_ack_time_), + send_time_state_(sampler.is_app_limited_, sampler.total_bytes_sent_, + sampler.total_bytes_acked_, + sampler.total_bytes_lost_, bytes_in_flight) {} // Default constructor. Required to put this structure into // PacketNumberIndexedQueue. ConnectionStateOnSentPacket() - : sent_time(QuicTime::Zero()), - size(0), - total_bytes_sent_at_last_acked_packet(0), - last_acked_packet_sent_time(QuicTime::Zero()), - last_acked_packet_ack_time(QuicTime::Zero()) {} + : sent_time_(QuicTime::Zero()), + size_(0), + total_bytes_sent_at_last_acked_packet_(0), + last_acked_packet_sent_time_(QuicTime::Zero()), + last_acked_packet_ack_time_(QuicTime::Zero()) {} friend QUICHE_EXPORT std::ostream& operator<<( std::ostream& os, const ConnectionStateOnSentPacket& p) { - os << "{sent_time:" << p.sent_time << ", size:" << p.size + os << "{sent_time:" << p.sent_time() << ", size:" << p.size() << ", total_bytes_sent_at_last_acked_packet:" - << p.total_bytes_sent_at_last_acked_packet - << ", last_acked_packet_sent_time:" << p.last_acked_packet_sent_time - << ", last_acked_packet_ack_time:" << p.last_acked_packet_ack_time - << ", send_time_state:" << p.send_time_state << "}"; + << p.total_bytes_sent_at_last_acked_packet() + << ", last_acked_packet_sent_time:" << p.last_acked_packet_sent_time() + << ", last_acked_packet_ack_time:" << p.last_acked_packet_ack_time() + << ", send_time_state:" << p.send_time_state() << "}"; return os; } + + private: + QuicTime sent_time_; + QuicByteCount size_; + QuicByteCount total_bytes_sent_at_last_acked_packet_; + QuicTime last_acked_packet_sent_time_; + QuicTime last_acked_packet_ack_time_; + SendTimeState send_time_state_; }; BandwidthSample OnPacketAcknowledged(QuicTime ack_time,
diff --git a/quiche/quic/core/congestion_control/bandwidth_sampler_test.cc b/quiche/quic/core/congestion_control/bandwidth_sampler_test.cc index 97a0bf3..7d3d54b 100644 --- a/quiche/quic/core/congestion_control/bandwidth_sampler_test.cc +++ b/quiche/quic/core/congestion_control/bandwidth_sampler_test.cc
@@ -26,7 +26,7 @@ static QuicByteCount GetPacketSize(const BandwidthSampler& sampler, QuicPacketNumber packet_number) { - return sampler.connection_state_map_.GetEntry(packet_number)->size; + return sampler.connection_state_map_.GetEntry(packet_number)->size(); } };