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
3 // found in the LICENSE file.
4
5 #include "quiche/quic/test_tools/quic_sent_packet_manager_peer.h"
6
7 #include "quiche/quic/core/congestion_control/loss_detection_interface.h"
8 #include "quiche/quic/core/congestion_control/send_algorithm_interface.h"
9 #include "quiche/quic/core/quic_packets.h"
10 #include "quiche/quic/core/quic_sent_packet_manager.h"
11 #include "quiche/quic/test_tools/quic_unacked_packet_map_peer.h"
12 #include "quiche/common/platform/api/quiche_logging.h"
13
14 namespace quic {
15 namespace test {
16
17
18 // static
SetPerspective(QuicSentPacketManager * sent_packet_manager,Perspective perspective)19 void QuicSentPacketManagerPeer::SetPerspective(
20 QuicSentPacketManager* sent_packet_manager, Perspective perspective) {
21 QuicUnackedPacketMapPeer::SetPerspective(
22 &sent_packet_manager->unacked_packets_, perspective);
23 }
24
25 // static
GetSendAlgorithm(const QuicSentPacketManager & sent_packet_manager)26 SendAlgorithmInterface* QuicSentPacketManagerPeer::GetSendAlgorithm(
27 const QuicSentPacketManager& sent_packet_manager) {
28 return sent_packet_manager.send_algorithm_.get();
29 }
30
31 // static
SetSendAlgorithm(QuicSentPacketManager * sent_packet_manager,SendAlgorithmInterface * send_algorithm)32 void QuicSentPacketManagerPeer::SetSendAlgorithm(
33 QuicSentPacketManager* sent_packet_manager,
34 SendAlgorithmInterface* send_algorithm) {
35 sent_packet_manager->SetSendAlgorithm(send_algorithm);
36 }
37
38 // static
GetLossAlgorithm(QuicSentPacketManager * sent_packet_manager)39 const LossDetectionInterface* QuicSentPacketManagerPeer::GetLossAlgorithm(
40 QuicSentPacketManager* sent_packet_manager) {
41 return sent_packet_manager->loss_algorithm_;
42 }
43
44 // static
SetLossAlgorithm(QuicSentPacketManager * sent_packet_manager,LossDetectionInterface * loss_detector)45 void QuicSentPacketManagerPeer::SetLossAlgorithm(
46 QuicSentPacketManager* sent_packet_manager,
47 LossDetectionInterface* loss_detector) {
48 sent_packet_manager->loss_algorithm_ = loss_detector;
49 }
50
51 // static
GetRttStats(QuicSentPacketManager * sent_packet_manager)52 RttStats* QuicSentPacketManagerPeer::GetRttStats(
53 QuicSentPacketManager* sent_packet_manager) {
54 return &sent_packet_manager->rtt_stats_;
55 }
56
57 // static
IsRetransmission(QuicSentPacketManager * sent_packet_manager,uint64_t packet_number)58 bool QuicSentPacketManagerPeer::IsRetransmission(
59 QuicSentPacketManager* sent_packet_manager, uint64_t packet_number) {
60 QUICHE_DCHECK(HasRetransmittableFrames(sent_packet_manager, packet_number));
61 if (!HasRetransmittableFrames(sent_packet_manager, packet_number)) {
62 return false;
63 }
64 return sent_packet_manager->unacked_packets_
65 .GetTransmissionInfo(QuicPacketNumber(packet_number))
66 .transmission_type != NOT_RETRANSMISSION;
67 }
68
69 // static
MarkForRetransmission(QuicSentPacketManager * sent_packet_manager,uint64_t packet_number,TransmissionType transmission_type)70 void QuicSentPacketManagerPeer::MarkForRetransmission(
71 QuicSentPacketManager* sent_packet_manager, uint64_t packet_number,
72 TransmissionType transmission_type) {
73 sent_packet_manager->MarkForRetransmission(QuicPacketNumber(packet_number),
74 transmission_type);
75 }
76
77 // static
GetNumRetransmittablePackets(const QuicSentPacketManager * sent_packet_manager)78 size_t QuicSentPacketManagerPeer::GetNumRetransmittablePackets(
79 const QuicSentPacketManager* sent_packet_manager) {
80 size_t num_unacked_packets = 0;
81 for (auto it = sent_packet_manager->unacked_packets_.begin();
82 it != sent_packet_manager->unacked_packets_.end(); ++it) {
83 if (sent_packet_manager->unacked_packets_.HasRetransmittableFrames(*it)) {
84 ++num_unacked_packets;
85 }
86 }
87 return num_unacked_packets;
88 }
89
90 // static
SetConsecutivePtoCount(QuicSentPacketManager * sent_packet_manager,size_t count)91 void QuicSentPacketManagerPeer::SetConsecutivePtoCount(
92 QuicSentPacketManager* sent_packet_manager, size_t count) {
93 sent_packet_manager->consecutive_pto_count_ = count;
94 }
95
96 // static
GetBandwidthRecorder(QuicSentPacketManager * sent_packet_manager)97 QuicSustainedBandwidthRecorder& QuicSentPacketManagerPeer::GetBandwidthRecorder(
98 QuicSentPacketManager* sent_packet_manager) {
99 return sent_packet_manager->sustained_bandwidth_recorder_;
100 }
101
102 // static
UsingPacing(const QuicSentPacketManager * sent_packet_manager)103 bool QuicSentPacketManagerPeer::UsingPacing(
104 const QuicSentPacketManager* sent_packet_manager) {
105 return sent_packet_manager->using_pacing_;
106 }
107
108 // static
SetUsingPacing(QuicSentPacketManager * sent_packet_manager,bool using_pacing)109 void QuicSentPacketManagerPeer::SetUsingPacing(
110 QuicSentPacketManager* sent_packet_manager, bool using_pacing) {
111 sent_packet_manager->using_pacing_ = using_pacing;
112 }
113
114 // static
GetPacingSender(QuicSentPacketManager * sent_packet_manager)115 PacingSender* QuicSentPacketManagerPeer::GetPacingSender(
116 QuicSentPacketManager* sent_packet_manager) {
117 QUICHE_DCHECK(UsingPacing(sent_packet_manager));
118 return &sent_packet_manager->pacing_sender_;
119 }
120
121 // static
HasRetransmittableFrames(QuicSentPacketManager * sent_packet_manager,uint64_t packet_number)122 bool QuicSentPacketManagerPeer::HasRetransmittableFrames(
123 QuicSentPacketManager* sent_packet_manager, uint64_t packet_number) {
124 return sent_packet_manager->unacked_packets_.HasRetransmittableFrames(
125 QuicPacketNumber(packet_number));
126 }
127
128 // static
GetUnackedPacketMap(QuicSentPacketManager * sent_packet_manager)129 QuicUnackedPacketMap* QuicSentPacketManagerPeer::GetUnackedPacketMap(
130 QuicSentPacketManager* sent_packet_manager) {
131 return &sent_packet_manager->unacked_packets_;
132 }
133
134 // static
DisablePacerBursts(QuicSentPacketManager * sent_packet_manager)135 void QuicSentPacketManagerPeer::DisablePacerBursts(
136 QuicSentPacketManager* sent_packet_manager) {
137 sent_packet_manager->pacing_sender_.burst_tokens_ = 0;
138 sent_packet_manager->pacing_sender_.initial_burst_size_ = 0;
139 }
140
141 // static
GetPacerInitialBurstSize(QuicSentPacketManager * sent_packet_manager)142 int QuicSentPacketManagerPeer::GetPacerInitialBurstSize(
143 QuicSentPacketManager* sent_packet_manager) {
144 return sent_packet_manager->pacing_sender_.initial_burst_size_;
145 }
146
147 // static
SetNextPacedPacketTime(QuicSentPacketManager * sent_packet_manager,QuicTime time)148 void QuicSentPacketManagerPeer::SetNextPacedPacketTime(
149 QuicSentPacketManager* sent_packet_manager, QuicTime time) {
150 sent_packet_manager->pacing_sender_.ideal_next_packet_send_time_ = time;
151 }
152
153 // static
GetReorderingShift(QuicSentPacketManager * sent_packet_manager)154 int QuicSentPacketManagerPeer::GetReorderingShift(
155 QuicSentPacketManager* sent_packet_manager) {
156 return sent_packet_manager->uber_loss_algorithm_.general_loss_algorithms_[0]
157 .reordering_shift();
158 }
159
160 // static
AdaptiveReorderingThresholdEnabled(QuicSentPacketManager * sent_packet_manager)161 bool QuicSentPacketManagerPeer::AdaptiveReorderingThresholdEnabled(
162 QuicSentPacketManager* sent_packet_manager) {
163 return sent_packet_manager->uber_loss_algorithm_.general_loss_algorithms_[0]
164 .use_adaptive_reordering_threshold();
165 }
166
167 // static
AdaptiveTimeThresholdEnabled(QuicSentPacketManager * sent_packet_manager)168 bool QuicSentPacketManagerPeer::AdaptiveTimeThresholdEnabled(
169 QuicSentPacketManager* sent_packet_manager) {
170 return sent_packet_manager->uber_loss_algorithm_.general_loss_algorithms_[0]
171 .use_adaptive_time_threshold();
172 }
173
174 // static
UsePacketThresholdForRuntPackets(QuicSentPacketManager * sent_packet_manager)175 bool QuicSentPacketManagerPeer::UsePacketThresholdForRuntPackets(
176 QuicSentPacketManager* sent_packet_manager) {
177 return sent_packet_manager->uber_loss_algorithm_.general_loss_algorithms_[0]
178 .use_packet_threshold_for_runt_packets();
179 }
180
181 // static
GetNumPtosForPathDegrading(QuicSentPacketManager * sent_packet_manager)182 int QuicSentPacketManagerPeer::GetNumPtosForPathDegrading(
183 QuicSentPacketManager* sent_packet_manager) {
184 return sent_packet_manager->num_ptos_for_path_degrading_;
185 }
186
187 // static
GetPeerEcnCounts(QuicSentPacketManager * sent_packet_manager,PacketNumberSpace space)188 QuicEcnCounts* QuicSentPacketManagerPeer::GetPeerEcnCounts(
189 QuicSentPacketManager* sent_packet_manager, PacketNumberSpace space) {
190 return &(sent_packet_manager->peer_ack_ecn_counts_[space]);
191 }
192
193 // static
GetEct0Sent(QuicSentPacketManager * sent_packet_manager,PacketNumberSpace space)194 QuicPacketCount QuicSentPacketManagerPeer::GetEct0Sent(
195 QuicSentPacketManager* sent_packet_manager, PacketNumberSpace space) {
196 return sent_packet_manager->ect0_packets_sent_[space];
197 }
198
199 // static
GetEct1Sent(QuicSentPacketManager * sent_packet_manager,PacketNumberSpace space)200 QuicPacketCount QuicSentPacketManagerPeer::GetEct1Sent(
201 QuicSentPacketManager* sent_packet_manager, PacketNumberSpace space) {
202 return sent_packet_manager->ect1_packets_sent_[space];
203 }
204
205 } // namespace test
206 } // namespace quic
207