| Index: net/quic/quic_connection.cc
|
| diff --git a/net/quic/quic_connection.cc b/net/quic/quic_connection.cc
|
| index 778d6d0c51ee5353784a053866bef381235e756e..454a15b59b5780745b593b603b0c4c06aa0d8bf2 100644
|
| --- a/net/quic/quic_connection.cc
|
| +++ b/net/quic/quic_connection.cc
|
| @@ -1123,22 +1123,29 @@
|
| }
|
|
|
| const QuicConnectionStats& QuicConnection::GetStats() {
|
| - const RttStats* rtt_stats = sent_packet_manager_.GetRttStats();
|
| -
|
| - // Update rtt and estimated bandwidth.
|
| - QuicTime::Delta min_rtt = rtt_stats->min_rtt();
|
| - if (min_rtt.IsZero()) {
|
| - // If min RTT has not been set, use initial RTT instead.
|
| - min_rtt = QuicTime::Delta::FromMicroseconds(rtt_stats->initial_rtt_us());
|
| - }
|
| - stats_.min_rtt_us = min_rtt.ToMicroseconds();
|
| -
|
| - QuicTime::Delta srtt = rtt_stats->smoothed_rtt();
|
| - if (srtt.IsZero()) {
|
| - // If SRTT has not been set, use initial RTT instead.
|
| - srtt = QuicTime::Delta::FromMicroseconds(rtt_stats->initial_rtt_us());
|
| - }
|
| - stats_.srtt_us = srtt.ToMicroseconds();
|
| + if (!FLAGS_quic_use_initial_rtt_for_stats) {
|
| + stats_.min_rtt_us =
|
| + sent_packet_manager_.GetRttStats()->min_rtt().ToMicroseconds();
|
| + stats_.srtt_us =
|
| + sent_packet_manager_.GetRttStats()->smoothed_rtt().ToMicroseconds();
|
| + } else {
|
| + const RttStats* rtt_stats = sent_packet_manager_.GetRttStats();
|
| +
|
| + // Update rtt and estimated bandwidth.
|
| + QuicTime::Delta min_rtt = rtt_stats->min_rtt();
|
| + if (min_rtt.IsZero()) {
|
| + // If min RTT has not been set, use initial RTT instead.
|
| + min_rtt = QuicTime::Delta::FromMicroseconds(rtt_stats->initial_rtt_us());
|
| + }
|
| + stats_.min_rtt_us = min_rtt.ToMicroseconds();
|
| +
|
| + QuicTime::Delta srtt = rtt_stats->smoothed_rtt();
|
| + if (srtt.IsZero()) {
|
| + // If SRTT has not been set, use initial RTT instead.
|
| + srtt = QuicTime::Delta::FromMicroseconds(rtt_stats->initial_rtt_us());
|
| + }
|
| + stats_.srtt_us = srtt.ToMicroseconds();
|
| + }
|
|
|
| stats_.estimated_bandwidth = sent_packet_manager_.BandwidthEstimate();
|
| stats_.max_packet_size = packet_generator_.max_packet_length();
|
| @@ -1396,8 +1403,7 @@
|
| return true;
|
| }
|
| // Connection close packets are encrypted and saved, so don't exit early.
|
| - const bool is_connection_close = IsConnectionClose(*packet);
|
| - if (writer_->IsWriteBlocked() && !is_connection_close) {
|
| + if (writer_->IsWriteBlocked() && !IsConnectionClose(*packet)) {
|
| return false;
|
| }
|
|
|
| @@ -1421,7 +1427,7 @@
|
| // Connection close packets are eventually owned by TimeWaitListManager.
|
| // Others are deleted at the end of this call.
|
| scoped_ptr<QuicEncryptedPacket> encrypted_deleter;
|
| - if (is_connection_close) {
|
| + if (IsConnectionClose(*packet)) {
|
| DCHECK(connection_close_packet_.get() == nullptr);
|
| connection_close_packet_.reset(encrypted);
|
| // This assures we won't try to write *forced* packets when blocked.
|
| @@ -1536,10 +1542,6 @@
|
|
|
| if (result.status == WRITE_STATUS_ERROR) {
|
| OnWriteError(result.error_code);
|
| - DLOG(ERROR) << ENDPOINT << "failed writing " << encrypted->length()
|
| - << "bytes "
|
| - << " from host " << self_address().ToStringWithoutPort()
|
| - << " to address " << peer_address().ToString();
|
| return false;
|
| }
|
|
|
| @@ -2102,14 +2104,15 @@
|
| }
|
| }
|
|
|
| -bool QuicConnection::IsConnectionClose(const QueuedPacket& packet) {
|
| - const RetransmittableFrames* retransmittable_frames =
|
| +bool QuicConnection::IsConnectionClose(
|
| + QueuedPacket packet) {
|
| + RetransmittableFrames* retransmittable_frames =
|
| packet.serialized_packet.retransmittable_frames;
|
| - if (retransmittable_frames == nullptr) {
|
| - return false;
|
| - }
|
| - for (const QuicFrame& frame : retransmittable_frames->frames()) {
|
| - if (frame.type == CONNECTION_CLOSE_FRAME) {
|
| + if (!retransmittable_frames) {
|
| + return false;
|
| + }
|
| + for (size_t i = 0; i < retransmittable_frames->frames().size(); ++i) {
|
| + if (retransmittable_frames->frames()[i].type == CONNECTION_CLOSE_FRAME) {
|
| return true;
|
| }
|
| }
|
|
|