Remove locks in SendSideBandwidthEstimation since those are only accessed while owning locks in
BitrateControllerImpl (excluding AvailableBandwidth).
+ Refactor BitrateController logic around LowRate allocation so access to SendSideBandwidthEstimation
is clear.
+ Refactor NormalRateAllocation away from OnNetworkChange.
+ Annotate BitrateController locks.
R=henrik.lundin@webrtc.org, stefan@webrtc.org
BUG=3065
Review URL: https://webrtc-codereview.appspot.com/10129004
git-svn-id: http://webrtc.googlecode.com/svn/trunk@5749 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/webrtc/modules/bitrate_controller/bitrate_controller_impl.h b/webrtc/modules/bitrate_controller/bitrate_controller_impl.h
index a5bba44..4e40997 100644
--- a/webrtc/modules/bitrate_controller/bitrate_controller_impl.h
+++ b/webrtc/modules/bitrate_controller/bitrate_controller_impl.h
@@ -27,12 +27,28 @@
namespace webrtc {
-class RtcpBandwidthObserverImpl;
-class LowRateStrategy;
-
class BitrateControllerImpl : public BitrateController {
public:
- friend class RtcpBandwidthObserverImpl;
+ explicit BitrateControllerImpl(bool enforce_min_bitrate);
+ virtual ~BitrateControllerImpl();
+
+ virtual bool AvailableBandwidth(uint32_t* bandwidth) const OVERRIDE;
+
+ virtual RtcpBandwidthObserver* CreateRtcpBandwidthObserver() OVERRIDE;
+
+ virtual void SetBitrateObserver(BitrateObserver* observer,
+ const uint32_t start_bitrate,
+ const uint32_t min_bitrate,
+ const uint32_t max_bitrate) OVERRIDE;
+
+ virtual void RemoveBitrateObserver(BitrateObserver* observer) OVERRIDE;
+
+ virtual void EnforceMinBitrate(bool enforce_min_bitrate) OVERRIDE;
+
+ virtual void SetBweMinBitrate(uint32_t min_bitrate) OVERRIDE;
+
+ private:
+ class RtcpBandwidthObserverImpl;
struct BitrateConfiguration {
BitrateConfiguration(uint32_t start_bitrate,
@@ -59,25 +75,7 @@
BitrateObserverConfiguration;
typedef std::list<BitrateObserverConfiguration> BitrateObserverConfList;
- explicit BitrateControllerImpl(bool enforce_min_bitrate);
- virtual ~BitrateControllerImpl();
- virtual bool AvailableBandwidth(uint32_t* bandwidth) const OVERRIDE;
-
- virtual RtcpBandwidthObserver* CreateRtcpBandwidthObserver() OVERRIDE;
-
- virtual void SetBitrateObserver(BitrateObserver* observer,
- const uint32_t start_bitrate,
- const uint32_t min_bitrate,
- const uint32_t max_bitrate) OVERRIDE;
-
- virtual void RemoveBitrateObserver(BitrateObserver* observer) OVERRIDE;
-
- virtual void EnforceMinBitrate(bool enforce_min_bitrate) OVERRIDE;
-
- virtual void SetBweMinBitrate(uint32_t min_bitrate) OVERRIDE;
-
- private:
// Called by BitrateObserver's direct from the RTCP module.
void OnReceivedEstimatedBitrate(const uint32_t bitrate);
@@ -86,18 +84,32 @@
const int number_of_packets,
const uint32_t now_ms);
- typedef std::multimap<uint32_t, ObserverConfiguration*> ObserverSortingMap;
-
- BitrateObserverConfList::iterator
- FindObserverConfigurationPair(const BitrateObserver* observer);
void OnNetworkChanged(const uint32_t bitrate,
const uint8_t fraction_loss, // 0 - 255.
- const uint32_t rtt);
+ const uint32_t rtt)
+ EXCLUSIVE_LOCKS_REQUIRED(*critsect_);
+
+ void NormalRateAllocation(uint32_t bitrate,
+ uint8_t fraction_loss,
+ uint32_t rtt,
+ uint32_t sum_min_bitrates)
+ EXCLUSIVE_LOCKS_REQUIRED(*critsect_);
+
+ void LowRateAllocation(uint32_t bitrate,
+ uint8_t fraction_loss,
+ uint32_t rtt,
+ uint32_t sum_min_bitrates)
+ EXCLUSIVE_LOCKS_REQUIRED(*critsect_);
+
+ typedef std::multimap<uint32_t, ObserverConfiguration*> ObserverSortingMap;
+
+ BitrateObserverConfList::iterator FindObserverConfigurationPair(
+ const BitrateObserver* observer) EXCLUSIVE_LOCKS_REQUIRED(*critsect_);
CriticalSectionWrapper* critsect_;
- SendSideBandwidthEstimation bandwidth_estimation_;
- BitrateObserverConfList bitrate_observers_;
- scoped_ptr<LowRateStrategy> low_rate_strategy_;
+ SendSideBandwidthEstimation bandwidth_estimation_ GUARDED_BY(*critsect_);
+ BitrateObserverConfList bitrate_observers_ GUARDED_BY(*critsect_);
+ bool enforce_min_bitrate_ GUARDED_BY(*critsect_);
};
} // namespace webrtc
#endif // WEBRTC_MODULES_BITRATE_CONTROLLER_BITRATE_CONTROLLER_IMPL_H_