// Copyright (c) 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // Ramp up bitrate from a start point normally our "current_rate" as long as we // have no packet loss or delay events. // The first half of the ramp up curve follows a cubic function with its orgin // at the estimated available bandwidth, onece the bitrate pass the halfway // point between the estimated available bandwidth and the estimated max // bandwidth it will follw a new cubic function with its orgin at the estimated // max bandwidth. #ifndef NET_QUIC_CONGESTION_CONTROL_INTER_ARRIVAL_BITRATE_RAMP_UP_H_ #define NET_QUIC_CONGESTION_CONTROL_INTER_ARRIVAL_BITRATE_RAMP_UP_H_ #include "base/basictypes.h" #include "net/base/net_export.h" #include "net/quic/quic_bandwidth.h" #include "net/quic/quic_clock.h" #include "net/quic/quic_time.h" namespace net { class NET_EXPORT_PRIVATE InterArrivalBitrateRampUp { public: explicit InterArrivalBitrateRampUp(const QuicClock* clock); // Call after a decision to lower the bitrate and after a probe. void Reset(QuicBandwidth current_rate, QuicBandwidth available_channel_estimate, QuicBandwidth channel_estimate); // Call everytime we get a new channel estimate. void UpdateChannelEstimate(QuicBandwidth channel_estimate); // Compute a new send pace to use. QuicBandwidth GetNewBitrate(QuicBandwidth sent_bitrate); private: uint32 CalcuateTimeToOriginPoint(QuicBandwidth rate_difference) const; static const QuicTime::Delta MaxCubicTimeInterval() { return QuicTime::Delta::FromMilliseconds(30); } const QuicClock* clock_; QuicBandwidth current_rate_; QuicBandwidth channel_estimate_; QuicBandwidth available_channel_estimate_; QuicBandwidth halfway_point_; // Time when this cycle started, after a Reset. QuicTime epoch_; // Time when we updated current_rate_. QuicTime last_update_time_; // Time to origin point of cubic function in 2^10 fractions of a second. uint32 time_to_origin_point_; DISALLOW_COPY_AND_ASSIGN(InterArrivalBitrateRampUp); }; } // namespace net #endif // NET_QUIC_CONGESTION_CONTROL_INTER_ARRIVAL_BITRATE_RAMP_UP_H_