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_