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

Side by Side Diff: net/quic/quic_received_packet_manager_test.cc

Issue 496133002: Optimize QUIC's EntropyTracker in QuicReceivedPacketManager by using a (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@enable_pacing_via_config_73685838
Patch Set: Created 6 years, 4 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 unified diff | Download patch
« no previous file with comments | « net/quic/quic_received_packet_manager.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/quic/quic_received_packet_manager.h" 5 #include "net/quic/quic_received_packet_manager.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <vector> 8 #include <vector>
9 9
10 #include "net/quic/quic_connection_stats.h" 10 #include "net/quic/quic_connection_stats.h"
(...skipping 18 matching lines...) Expand all
29 const QuicReceivedPacketManager::EntropyTracker& tracker) { 29 const QuicReceivedPacketManager::EntropyTracker& tracker) {
30 return tracker.largest_observed_; 30 return tracker.largest_observed_;
31 } 31 }
32 static int packets_entropy_size( 32 static int packets_entropy_size(
33 const QuicReceivedPacketManager::EntropyTracker& tracker) { 33 const QuicReceivedPacketManager::EntropyTracker& tracker) {
34 return tracker.packets_entropy_.size(); 34 return tracker.packets_entropy_.size();
35 } 35 }
36 static bool IsTrackingPacket( 36 static bool IsTrackingPacket(
37 const QuicReceivedPacketManager::EntropyTracker& tracker, 37 const QuicReceivedPacketManager::EntropyTracker& tracker,
38 QuicPacketSequenceNumber sequence_number) { 38 QuicPacketSequenceNumber sequence_number) {
39 return tracker.packets_entropy_.find(sequence_number) != 39 return sequence_number >= tracker.first_gap_ &&
40 tracker.packets_entropy_.end(); 40 sequence_number <
41 (tracker.first_gap_ + tracker.packets_entropy_.size()) &&
42 tracker.packets_entropy_[sequence_number - tracker.first_gap_].second;
41 } 43 }
42 }; 44 };
43 45
44 namespace { 46 namespace {
45 47
46 // Entropy of individual packets is not tracked if there are no gaps. 48 // Entropy of individual packets is not tracked if there are no gaps.
47 TEST(EntropyTrackerTest, NoGaps) { 49 TEST(EntropyTrackerTest, NoGaps) {
48 QuicReceivedPacketManager::EntropyTracker tracker; 50 QuicReceivedPacketManager::EntropyTracker tracker;
49 51
50 tracker.RecordPacketEntropyHash(1, 23); 52 tracker.RecordPacketEntropyHash(1, 23);
(...skipping 13 matching lines...) Expand all
64 TEST(EntropyTrackerTest, FillGaps) { 66 TEST(EntropyTrackerTest, FillGaps) {
65 QuicReceivedPacketManager::EntropyTracker tracker; 67 QuicReceivedPacketManager::EntropyTracker tracker;
66 68
67 tracker.RecordPacketEntropyHash(2, 5); 69 tracker.RecordPacketEntropyHash(2, 5);
68 tracker.RecordPacketEntropyHash(5, 17); 70 tracker.RecordPacketEntropyHash(5, 17);
69 tracker.RecordPacketEntropyHash(6, 23); 71 tracker.RecordPacketEntropyHash(6, 23);
70 tracker.RecordPacketEntropyHash(9, 42); 72 tracker.RecordPacketEntropyHash(9, 42);
71 73
72 EXPECT_EQ(1u, EntropyTrackerPeer::first_gap(tracker)); 74 EXPECT_EQ(1u, EntropyTrackerPeer::first_gap(tracker));
73 EXPECT_EQ(9u, EntropyTrackerPeer::largest_observed(tracker)); 75 EXPECT_EQ(9u, EntropyTrackerPeer::largest_observed(tracker));
74 EXPECT_EQ(4, EntropyTrackerPeer::packets_entropy_size(tracker)); 76 EXPECT_EQ(9, EntropyTrackerPeer::packets_entropy_size(tracker));
75 77
76 EXPECT_EQ(5, tracker.EntropyHash(2)); 78 EXPECT_EQ(5, tracker.EntropyHash(2));
77 EXPECT_EQ(5 ^ 17, tracker.EntropyHash(5)); 79 EXPECT_EQ(5 ^ 17, tracker.EntropyHash(5));
78 EXPECT_EQ(5 ^ 17 ^ 23, tracker.EntropyHash(6)); 80 EXPECT_EQ(5 ^ 17 ^ 23, tracker.EntropyHash(6));
79 EXPECT_EQ(5 ^ 17 ^ 23 ^ 42, tracker.EntropyHash(9)); 81 EXPECT_EQ(5 ^ 17 ^ 23 ^ 42, tracker.EntropyHash(9));
80 82
81 EXPECT_FALSE(EntropyTrackerPeer::IsTrackingPacket(tracker, 1)); 83 EXPECT_FALSE(EntropyTrackerPeer::IsTrackingPacket(tracker, 1));
82 EXPECT_TRUE(EntropyTrackerPeer::IsTrackingPacket(tracker, 2)); 84 EXPECT_TRUE(EntropyTrackerPeer::IsTrackingPacket(tracker, 2));
83 EXPECT_TRUE(EntropyTrackerPeer::IsTrackingPacket(tracker, 5)); 85 EXPECT_TRUE(EntropyTrackerPeer::IsTrackingPacket(tracker, 5));
84 EXPECT_TRUE(EntropyTrackerPeer::IsTrackingPacket(tracker, 6)); 86 EXPECT_TRUE(EntropyTrackerPeer::IsTrackingPacket(tracker, 6));
85 EXPECT_TRUE(EntropyTrackerPeer::IsTrackingPacket(tracker, 9)); 87 EXPECT_TRUE(EntropyTrackerPeer::IsTrackingPacket(tracker, 9));
86 88
87 // Fill the gap at 1. 89 // Fill the gap at 1.
88 tracker.RecordPacketEntropyHash(1, 2); 90 tracker.RecordPacketEntropyHash(1, 2);
89 91
90 EXPECT_EQ(3u, EntropyTrackerPeer::first_gap(tracker)); 92 EXPECT_EQ(3u, EntropyTrackerPeer::first_gap(tracker));
91 EXPECT_EQ(9u, EntropyTrackerPeer::largest_observed(tracker)); 93 EXPECT_EQ(9u, EntropyTrackerPeer::largest_observed(tracker));
92 EXPECT_EQ(3, EntropyTrackerPeer::packets_entropy_size(tracker)); 94 EXPECT_EQ(7, EntropyTrackerPeer::packets_entropy_size(tracker));
93 95
94 EXPECT_EQ(2 ^ 5 ^ 17, tracker.EntropyHash(5)); 96 EXPECT_EQ(2 ^ 5 ^ 17, tracker.EntropyHash(5));
95 EXPECT_EQ(2 ^ 5 ^ 17 ^ 23, tracker.EntropyHash(6)); 97 EXPECT_EQ(2 ^ 5 ^ 17 ^ 23, tracker.EntropyHash(6));
96 EXPECT_EQ(2 ^ 5 ^ 17 ^ 23 ^ 42, tracker.EntropyHash(9)); 98 EXPECT_EQ(2 ^ 5 ^ 17 ^ 23 ^ 42, tracker.EntropyHash(9));
97 99
98 EXPECT_FALSE(EntropyTrackerPeer::IsTrackingPacket(tracker, 1)); 100 EXPECT_FALSE(EntropyTrackerPeer::IsTrackingPacket(tracker, 1));
99 EXPECT_FALSE(EntropyTrackerPeer::IsTrackingPacket(tracker, 2)); 101 EXPECT_FALSE(EntropyTrackerPeer::IsTrackingPacket(tracker, 2));
100 EXPECT_TRUE(EntropyTrackerPeer::IsTrackingPacket(tracker, 5)); 102 EXPECT_TRUE(EntropyTrackerPeer::IsTrackingPacket(tracker, 5));
101 EXPECT_TRUE(EntropyTrackerPeer::IsTrackingPacket(tracker, 6)); 103 EXPECT_TRUE(EntropyTrackerPeer::IsTrackingPacket(tracker, 6));
102 EXPECT_TRUE(EntropyTrackerPeer::IsTrackingPacket(tracker, 9)); 104 EXPECT_TRUE(EntropyTrackerPeer::IsTrackingPacket(tracker, 9));
103 105
104 // Fill the gap at 4. 106 // Fill the gap at 4.
105 tracker.RecordPacketEntropyHash(4, 2); 107 tracker.RecordPacketEntropyHash(4, 2);
106 108
107 EXPECT_EQ(3u, EntropyTrackerPeer::first_gap(tracker)); 109 EXPECT_EQ(3u, EntropyTrackerPeer::first_gap(tracker));
108 EXPECT_EQ(9u, EntropyTrackerPeer::largest_observed(tracker)); 110 EXPECT_EQ(9u, EntropyTrackerPeer::largest_observed(tracker));
109 EXPECT_EQ(4, EntropyTrackerPeer::packets_entropy_size(tracker)); 111 EXPECT_EQ(7, EntropyTrackerPeer::packets_entropy_size(tracker));
110 112
111 EXPECT_EQ(5, tracker.EntropyHash(4)); 113 EXPECT_EQ(5, tracker.EntropyHash(4));
112 EXPECT_EQ(5 ^ 17, tracker.EntropyHash(5)); 114 EXPECT_EQ(5 ^ 17, tracker.EntropyHash(5));
113 EXPECT_EQ(5 ^ 17 ^ 23, tracker.EntropyHash(6)); 115 EXPECT_EQ(5 ^ 17 ^ 23, tracker.EntropyHash(6));
114 EXPECT_EQ(5 ^ 17 ^ 23 ^ 42, tracker.EntropyHash(9)); 116 EXPECT_EQ(5 ^ 17 ^ 23 ^ 42, tracker.EntropyHash(9));
115 117
116 EXPECT_FALSE(EntropyTrackerPeer::IsTrackingPacket(tracker, 3)); 118 EXPECT_FALSE(EntropyTrackerPeer::IsTrackingPacket(tracker, 3));
117 EXPECT_TRUE(EntropyTrackerPeer::IsTrackingPacket(tracker, 4)); 119 EXPECT_TRUE(EntropyTrackerPeer::IsTrackingPacket(tracker, 4));
118 EXPECT_TRUE(EntropyTrackerPeer::IsTrackingPacket(tracker, 5)); 120 EXPECT_TRUE(EntropyTrackerPeer::IsTrackingPacket(tracker, 5));
119 EXPECT_TRUE(EntropyTrackerPeer::IsTrackingPacket(tracker, 6)); 121 EXPECT_TRUE(EntropyTrackerPeer::IsTrackingPacket(tracker, 6));
120 EXPECT_TRUE(EntropyTrackerPeer::IsTrackingPacket(tracker, 9)); 122 EXPECT_TRUE(EntropyTrackerPeer::IsTrackingPacket(tracker, 9));
121 123
122 // Fill the gap at 3. Entropy for packets 3 to 6 are forgotten. 124 // Fill the gap at 3. Entropy for packets 3 to 6 are forgotten.
123 tracker.RecordPacketEntropyHash(3, 2); 125 tracker.RecordPacketEntropyHash(3, 2);
124 126
125 EXPECT_EQ(7u, EntropyTrackerPeer::first_gap(tracker)); 127 EXPECT_EQ(7u, EntropyTrackerPeer::first_gap(tracker));
126 EXPECT_EQ(9u, EntropyTrackerPeer::largest_observed(tracker)); 128 EXPECT_EQ(9u, EntropyTrackerPeer::largest_observed(tracker));
127 EXPECT_EQ(1, EntropyTrackerPeer::packets_entropy_size(tracker)); 129 EXPECT_EQ(3, EntropyTrackerPeer::packets_entropy_size(tracker));
128 130
129 EXPECT_EQ(2 ^ 5 ^ 17 ^ 23 ^ 42, tracker.EntropyHash(9)); 131 EXPECT_EQ(2 ^ 5 ^ 17 ^ 23 ^ 42, tracker.EntropyHash(9));
130 132
131 EXPECT_FALSE(EntropyTrackerPeer::IsTrackingPacket(tracker, 3)); 133 EXPECT_FALSE(EntropyTrackerPeer::IsTrackingPacket(tracker, 3));
132 EXPECT_FALSE(EntropyTrackerPeer::IsTrackingPacket(tracker, 4)); 134 EXPECT_FALSE(EntropyTrackerPeer::IsTrackingPacket(tracker, 4));
133 EXPECT_FALSE(EntropyTrackerPeer::IsTrackingPacket(tracker, 5)); 135 EXPECT_FALSE(EntropyTrackerPeer::IsTrackingPacket(tracker, 5));
134 EXPECT_FALSE(EntropyTrackerPeer::IsTrackingPacket(tracker, 6)); 136 EXPECT_FALSE(EntropyTrackerPeer::IsTrackingPacket(tracker, 6));
135 EXPECT_TRUE(EntropyTrackerPeer::IsTrackingPacket(tracker, 9)); 137 EXPECT_TRUE(EntropyTrackerPeer::IsTrackingPacket(tracker, 9));
136 138
137 // Fill in the rest. 139 // Fill in the rest.
(...skipping 10 matching lines...) Expand all
148 TEST(EntropyTrackerTest, SetCumulativeEntropyUpTo) { 150 TEST(EntropyTrackerTest, SetCumulativeEntropyUpTo) {
149 QuicReceivedPacketManager::EntropyTracker tracker; 151 QuicReceivedPacketManager::EntropyTracker tracker;
150 152
151 tracker.RecordPacketEntropyHash(2, 5); 153 tracker.RecordPacketEntropyHash(2, 5);
152 tracker.RecordPacketEntropyHash(5, 17); 154 tracker.RecordPacketEntropyHash(5, 17);
153 tracker.RecordPacketEntropyHash(6, 23); 155 tracker.RecordPacketEntropyHash(6, 23);
154 tracker.RecordPacketEntropyHash(9, 42); 156 tracker.RecordPacketEntropyHash(9, 42);
155 157
156 EXPECT_EQ(1u, EntropyTrackerPeer::first_gap(tracker)); 158 EXPECT_EQ(1u, EntropyTrackerPeer::first_gap(tracker));
157 EXPECT_EQ(9u, EntropyTrackerPeer::largest_observed(tracker)); 159 EXPECT_EQ(9u, EntropyTrackerPeer::largest_observed(tracker));
158 EXPECT_EQ(4, EntropyTrackerPeer::packets_entropy_size(tracker)); 160 EXPECT_EQ(9, EntropyTrackerPeer::packets_entropy_size(tracker));
159 161
160 // Inform the tracker about value of the hash at a gap. 162 // Inform the tracker about value of the hash at a gap.
161 tracker.SetCumulativeEntropyUpTo(3, 7); 163 tracker.SetCumulativeEntropyUpTo(3, 7);
162 EXPECT_EQ(3u, EntropyTrackerPeer::first_gap(tracker)); 164 EXPECT_EQ(3u, EntropyTrackerPeer::first_gap(tracker));
163 EXPECT_EQ(9u, EntropyTrackerPeer::largest_observed(tracker)); 165 EXPECT_EQ(9u, EntropyTrackerPeer::largest_observed(tracker));
164 EXPECT_EQ(3, EntropyTrackerPeer::packets_entropy_size(tracker)); 166 EXPECT_EQ(7, EntropyTrackerPeer::packets_entropy_size(tracker));
165 167
166 EXPECT_EQ(7 ^ 17, tracker.EntropyHash(5)); 168 EXPECT_EQ(7 ^ 17, tracker.EntropyHash(5));
167 EXPECT_EQ(7 ^ 17 ^ 23, tracker.EntropyHash(6)); 169 EXPECT_EQ(7 ^ 17 ^ 23, tracker.EntropyHash(6));
168 EXPECT_EQ(7 ^ 17 ^ 23 ^ 42, tracker.EntropyHash(9)); 170 EXPECT_EQ(7 ^ 17 ^ 23 ^ 42, tracker.EntropyHash(9));
169 171
170 // Inform the tracker about value of the hash at a known location. 172 // Inform the tracker about value of the hash at a known location.
171 tracker.SetCumulativeEntropyUpTo(6, 1); 173 tracker.SetCumulativeEntropyUpTo(6, 1);
172 EXPECT_EQ(7u, EntropyTrackerPeer::first_gap(tracker)); 174 EXPECT_EQ(7u, EntropyTrackerPeer::first_gap(tracker));
173 EXPECT_EQ(9u, EntropyTrackerPeer::largest_observed(tracker)); 175 EXPECT_EQ(9u, EntropyTrackerPeer::largest_observed(tracker));
174 EXPECT_EQ(1, EntropyTrackerPeer::packets_entropy_size(tracker)); 176 EXPECT_EQ(3, EntropyTrackerPeer::packets_entropy_size(tracker));
175 177
176 EXPECT_EQ(1 ^ 23 ^ 42, tracker.EntropyHash(9)); 178 EXPECT_EQ(1 ^ 23 ^ 42, tracker.EntropyHash(9));
177 179
178 // Inform the tracker about value of the hash at the last location. 180 // Inform the tracker about value of the hash at the last location.
179 tracker.SetCumulativeEntropyUpTo(9, 21); 181 tracker.SetCumulativeEntropyUpTo(9, 21);
180 EXPECT_EQ(10u, EntropyTrackerPeer::first_gap(tracker)); 182 EXPECT_EQ(10u, EntropyTrackerPeer::first_gap(tracker));
181 EXPECT_EQ(9u, EntropyTrackerPeer::largest_observed(tracker)); 183 EXPECT_EQ(9u, EntropyTrackerPeer::largest_observed(tracker));
182 EXPECT_EQ(0, EntropyTrackerPeer::packets_entropy_size(tracker)); 184 EXPECT_EQ(0, EntropyTrackerPeer::packets_entropy_size(tracker));
183 185
184 EXPECT_EQ(42 ^ 21, tracker.EntropyHash(9)); 186 EXPECT_EQ(42 ^ 21, tracker.EntropyHash(9));
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
354 QuicAckFrame ack; 356 QuicAckFrame ack;
355 received_manager_.UpdateReceivedPacketInfo(&ack, QuicTime::Zero()); 357 received_manager_.UpdateReceivedPacketInfo(&ack, QuicTime::Zero());
356 EXPECT_TRUE(ack.missing_packets.empty()); 358 EXPECT_TRUE(ack.missing_packets.empty());
357 EXPECT_TRUE(ack.revived_packets.empty()); 359 EXPECT_TRUE(ack.revived_packets.empty());
358 } 360 }
359 361
360 362
361 } // namespace 363 } // namespace
362 } // namespace test 364 } // namespace test
363 } // namespace net 365 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_received_packet_manager.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698