Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(468)

Unified Diff: net/quic/core/congestion_control/bandwidth_sampler.cc

Issue 2901773004: Landing Recent QUIC changes until May 20, 2017. (Closed)
Patch Set: Disable quic_restart_flag_quic_big_endian_connection_id_server until tests can be fixed. Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: net/quic/core/congestion_control/bandwidth_sampler.cc
diff --git a/net/quic/core/congestion_control/bandwidth_sampler.cc b/net/quic/core/congestion_control/bandwidth_sampler.cc
index 6f150044dec728c4d9ac3409411c33ab736e8199..f95fdd71816aa53e365c726b7dbf4725276c23f8 100644
--- a/net/quic/core/congestion_control/bandwidth_sampler.cc
+++ b/net/quic/core/congestion_control/bandwidth_sampler.cc
@@ -7,6 +7,8 @@
#include <algorithm>
#include "net/quic/platform/api/quic_bug_tracker.h"
+#include "net/quic/platform/api/quic_flag_utils.h"
+#include "net/quic/platform/api/quic_flags.h"
namespace net {
BandwidthSampler::BandwidthSampler()
@@ -18,7 +20,10 @@ BandwidthSampler::BandwidthSampler()
last_sent_packet_(0),
is_app_limited_(false),
end_of_app_limited_phase_(0),
- connection_state_map_() {}
+ connection_state_map_(),
+ connection_state_map_new_(),
+ use_new_connection_state_map_(
+ FLAGS_quic_reloadable_flag_quic_faster_bandwidth_sampler) {}
BandwidthSampler::~BandwidthSampler() {}
@@ -51,6 +56,23 @@ void BandwidthSampler::OnPacketSent(
last_acked_packet_sent_time_ = sent_time;
}
+ if (use_new_connection_state_map_) {
+ if (!connection_state_map_new_.IsEmpty() &&
+ packet_number >
+ connection_state_map_new_.last_packet() + kMaxTrackedPackets) {
+ QUIC_BUG << "BandwidthSampler in-flight packet map has exceeded maximum "
+ "number "
+ "of tracked packets.";
+ }
+
+ bool success = connection_state_map_new_.Emplace(packet_number, sent_time,
+ bytes, *this);
+ QUIC_BUG_IF(!success) << "BandwidthSampler failed to insert the packet "
+ "into the map, most likely because it's already "
+ "in it.";
+ return;
+ }
+
DCHECK(connection_state_map_.find(packet_number) ==
connection_state_map_.end());
connection_state_map_.emplace(
@@ -64,6 +86,20 @@ void BandwidthSampler::OnPacketSent(
BandwidthSample BandwidthSampler::OnPacketAcknowledged(
QuicTime ack_time,
QuicPacketNumber packet_number) {
+ if (use_new_connection_state_map_) {
+ ConnectionStateOnSentPacket* sent_packet_pointer =
+ connection_state_map_new_.GetEntry(packet_number);
+ if (sent_packet_pointer == nullptr) {
+ // See the TODO below.
+ return BandwidthSample();
+ }
+ BandwidthSample sample = OnPacketAcknowledgedInner(ack_time, packet_number,
+ *sent_packet_pointer);
+ connection_state_map_new_.Remove(packet_number);
+ QUIC_FLAG_COUNT_N(quic_reloadable_flag_quic_faster_bandwidth_sampler, 1, 2);
+ return sample;
+ }
+
auto it = connection_state_map_.find(packet_number);
if (it == connection_state_map_.end()) {
// TODO(vasilvv): currently, this can happen because the congestion
@@ -72,15 +108,21 @@ BandwidthSample BandwidthSampler::OnPacketAcknowledged(
// this should be a QUIC_BUG equivalent.
return BandwidthSample();
}
- const ConnectionStateOnSentPacket sent_packet = it->second;
+ BandwidthSample sample =
+ OnPacketAcknowledgedInner(ack_time, packet_number, it->second);
+ connection_state_map_.erase(it);
+ return sample;
+}
+BandwidthSample BandwidthSampler::OnPacketAcknowledgedInner(
+ QuicTime ack_time,
+ QuicPacketNumber packet_number,
+ const ConnectionStateOnSentPacket& sent_packet) {
total_bytes_acked_ += sent_packet.size;
total_bytes_sent_at_last_acked_packet_ = sent_packet.total_bytes_sent;
last_acked_packet_sent_time_ = sent_packet.sent_time;
last_acked_packet_ack_time_ = ack_time;
- connection_state_map_.erase(it);
-
// Exit app-limited phase once a packet that was sent while the connection is
// not app-limited is acknowledged.
if (is_app_limited_ && packet_number > end_of_app_limited_phase_) {
@@ -130,6 +172,15 @@ BandwidthSample BandwidthSampler::OnPacketAcknowledged(
}
void BandwidthSampler::OnPacketLost(QuicPacketNumber packet_number) {
+ if (use_new_connection_state_map_) {
+ // TODO(vasilvv): see the comment for the case of missing packets in
+ // BandwidthSampler::OnPacketAcknowledged on why this does not raise a
+ // QUIC_BUG when removal fails.
+ connection_state_map_new_.Remove(packet_number);
+ QUIC_FLAG_COUNT_N(quic_reloadable_flag_quic_faster_bandwidth_sampler, 2, 2);
+ return;
+ }
+
auto it = connection_state_map_.find(packet_number);
if (it == connection_state_map_.end()) {
// TODO(vasilvv): see the comment for the same case in
@@ -146,6 +197,14 @@ void BandwidthSampler::OnAppLimited() {
}
void BandwidthSampler::RemoveObsoletePackets(QuicPacketNumber least_unacked) {
+ if (use_new_connection_state_map_) {
+ while (!connection_state_map_new_.IsEmpty() &&
+ connection_state_map_new_.first_packet() < least_unacked) {
+ connection_state_map_new_.Remove(
+ connection_state_map_new_.first_packet());
+ }
+ return;
+ }
while (!connection_state_map_.empty() &&
connection_state_map_.begin()->first < least_unacked) {
connection_state_map_.pop_front();
« no previous file with comments | « net/quic/core/congestion_control/bandwidth_sampler.h ('k') | net/quic/core/congestion_control/bandwidth_sampler_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698