Revert 5775 "Modify bitrate controller to update bitrate based o..."
This triggered an occasional TSAN failure in CallTest.ReceivesPliAndRecoversWithNack e.g.: http://build.chromium.org/p/client.webrtc/builders/Linux%20Tsan/builds/1444/steps/memory%20test%3A%20video_engine_tests/logs/stdio I managed to reproduce this locally and verified that reverting this CL corrected it. > Modify bitrate controller to update bitrate based on process call and not > only whenever a RTCP receiver block is received. > > Additionally: > Add condition to only start rampup after a receiver block is received. This was same as old behaviour but now an explicit check is needed to verify process does not ramps up before the first block. > > Fix logic around capping max bitrate increase at 8% per second. Before it was only increasing once every 1 second and each increase would be as high as 8%. If receiver blocks had a different interval before it would lose an update or waste an update slot and not ramp up as much as a 8% (e.g. if RTCP received < 1 second). > > Did not touch decrease logic, however since it can be triggered more often it > may decrease much faster and closer to the original written cap of once every > 300ms + rtt. > > Note: > rampup_tests.cc don't seem to be affected by this since there is no packet loss or REMB that go higher than expected cap. > bitrate_controller_unittests.cc are don't really simulate a clock and the process thread, but trigger update by inserting an rtcp block. > > BUG=3065 > R=stefan@webrtc.org, mflodman@webrtc.org > > Review URL: https://webrtc-codereview.appspot.com/10529004 TBR=andresp@webrtc.org Review URL: https://webrtc-codereview.appspot.com/10079005 git-svn-id: http://webrtc.googlecode.com/svn/trunk@5785 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
@ -78,22 +78,13 @@ class BitrateControllerImpl::RtcpBandwidthObserverImpl
|
||||
};
|
||||
|
||||
BitrateController* BitrateController::CreateBitrateController(
|
||||
Clock* clock,
|
||||
bool enforce_min_bitrate) {
|
||||
return new BitrateControllerImpl(clock, enforce_min_bitrate);
|
||||
return new BitrateControllerImpl(enforce_min_bitrate);
|
||||
}
|
||||
|
||||
BitrateControllerImpl::BitrateControllerImpl(Clock* clock,
|
||||
bool enforce_min_bitrate)
|
||||
: clock_(clock),
|
||||
last_bitrate_update_ms_(clock_->TimeInMilliseconds()),
|
||||
critsect_(CriticalSectionWrapper::CreateCriticalSection()),
|
||||
enforce_min_bitrate_(enforce_min_bitrate),
|
||||
last_bitrate_bps_(0),
|
||||
last_fraction_loss_(0),
|
||||
last_rtt_ms_(0),
|
||||
last_enforce_min_bitrate_(enforce_min_bitrate_),
|
||||
bitrate_observers_modified_(false) {}
|
||||
BitrateControllerImpl::BitrateControllerImpl(bool enforce_min_bitrate)
|
||||
: critsect_(CriticalSectionWrapper::CreateCriticalSection()),
|
||||
enforce_min_bitrate_(enforce_min_bitrate) {}
|
||||
|
||||
BitrateControllerImpl::~BitrateControllerImpl() {
|
||||
BitrateObserverConfList::iterator it =
|
||||
@ -202,26 +193,6 @@ void BitrateControllerImpl::OnReceivedEstimatedBitrate(const uint32_t bitrate) {
|
||||
MaybeTriggerOnNetworkChanged();
|
||||
}
|
||||
|
||||
int32_t BitrateControllerImpl::TimeUntilNextProcess() {
|
||||
enum { kBitrateControllerUpdateIntervalMs = 25 };
|
||||
CriticalSectionScoped cs(critsect_);
|
||||
int time_since_update_ms =
|
||||
clock_->TimeInMilliseconds() - last_bitrate_update_ms_;
|
||||
return std::max(0, kBitrateControllerUpdateIntervalMs - time_since_update_ms);
|
||||
}
|
||||
|
||||
int32_t BitrateControllerImpl::Process() {
|
||||
if (TimeUntilNextProcess() > 0)
|
||||
return 0;
|
||||
{
|
||||
CriticalSectionScoped cs(critsect_);
|
||||
bandwidth_estimation_.UpdateEstimate(clock_->TimeInMilliseconds());
|
||||
MaybeTriggerOnNetworkChanged();
|
||||
}
|
||||
last_bitrate_update_ms_ = clock_->TimeInMilliseconds();
|
||||
return 0;
|
||||
}
|
||||
|
||||
void BitrateControllerImpl::OnReceivedRtcpReceiverReport(
|
||||
const uint8_t fraction_loss,
|
||||
const uint32_t rtt,
|
||||
@ -239,12 +210,12 @@ void BitrateControllerImpl::MaybeTriggerOnNetworkChanged() {
|
||||
uint32_t rtt;
|
||||
bandwidth_estimation_.CurrentEstimate(&bitrate, &fraction_loss, &rtt);
|
||||
|
||||
if (bitrate_observers_modified_ || bitrate != last_bitrate_bps_ ||
|
||||
fraction_loss != last_fraction_loss_ || rtt != last_rtt_ms_ ||
|
||||
if (bitrate_observers_modified_ || bitrate != last_bitrate_ ||
|
||||
fraction_loss != last_fraction_loss_ || rtt != last_rtt_ ||
|
||||
last_enforce_min_bitrate_ != enforce_min_bitrate_) {
|
||||
last_bitrate_bps_ = bitrate;
|
||||
last_bitrate_ = bitrate;
|
||||
last_fraction_loss_ = fraction_loss;
|
||||
last_rtt_ms_ = rtt;
|
||||
last_rtt_ = rtt;
|
||||
last_enforce_min_bitrate_ = enforce_min_bitrate_;
|
||||
bitrate_observers_modified_ = false;
|
||||
OnNetworkChanged(bitrate, fraction_loss, rtt);
|
||||
|
||||
Reference in New Issue
Block a user