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