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