Home | History | Annotate | Download | only in congestion_control
      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 #ifndef MEDIA_CAST_CONGESTION_CONTROL_CONGESTION_CONTROL_H_
      6 #define MEDIA_CAST_CONGESTION_CONTROL_CONGESTION_CONTROL_H_
      7 
      8 #include "base/basictypes.h"
      9 #include "base/memory/scoped_ptr.h"
     10 #include "base/time/tick_clock.h"
     11 #include "base/time/time.h"
     12 
     13 namespace media {
     14 namespace cast {
     15 
     16 class CongestionControl {
     17  public:
     18   CongestionControl(base::TickClock* clock,
     19                     float congestion_control_back_off,
     20                     uint32 max_bitrate_configured,
     21                     uint32 min_bitrate_configured,
     22                     uint32 start_bitrate);
     23 
     24   virtual ~CongestionControl();
     25 
     26   // Don't call OnAck if the same message contain a NACK.
     27   // Returns true if the bitrate have changed.
     28   bool OnAck(base::TimeDelta rtt_ms, uint32* new_bitrate);
     29 
     30   // Returns true if the bitrate have changed.
     31   bool OnNack(base::TimeDelta rtt_ms, uint32* new_bitrate);
     32 
     33 
     34  private:
     35   base::TickClock* const clock_;  // Not owned by this class.
     36   const float congestion_control_back_off_;
     37   const uint32 max_bitrate_configured_;
     38   const uint32 min_bitrate_configured_;
     39   uint32 bitrate_;
     40   base::TimeTicks time_last_increase_;
     41   base::TimeTicks time_last_decrease_;
     42 
     43   DISALLOW_COPY_AND_ASSIGN(CongestionControl);
     44 };
     45 
     46 }  // namespace cast
     47 }  // namespace media
     48 
     49 #endif  // MEDIA_CAST_CONGESTION_CONTROL_CONGESTION_CONTROL_H_
     50