Chromium Code Reviews| Index: webrtc/modules/audio_coding/audio_network_adaptor/audio_network_adaptor_impl.cc |
| diff --git a/webrtc/modules/audio_coding/audio_network_adaptor/audio_network_adaptor_impl.cc b/webrtc/modules/audio_coding/audio_network_adaptor/audio_network_adaptor_impl.cc |
| index 627d78a4b73c7799e93334635d217e0c73ef9eb7..64a5c414b2188e50d62f7a0ed141720ac826efbd 100644 |
| --- a/webrtc/modules/audio_coding/audio_network_adaptor/audio_network_adaptor_impl.cc |
| +++ b/webrtc/modules/audio_coding/audio_network_adaptor/audio_network_adaptor_impl.cc |
| @@ -14,6 +14,7 @@ |
| #include "webrtc/rtc_base/logging.h" |
| #include "webrtc/rtc_base/timeutils.h" |
| +#include "webrtc/system_wrappers/include/field_trial.h" |
| namespace webrtc { |
| @@ -40,7 +41,17 @@ AudioNetworkAdaptorImpl::AudioNetworkAdaptorImpl( |
| kEventLogMinBitrateChangeBps, |
| kEventLogMinBitrateChangeFraction, |
| kEventLogMinPacketLossChangeFraction) |
| - : nullptr) { |
| + : nullptr), |
| + enable_bitrate_adaptation_( |
| + webrtc::field_trial::IsEnabled("WebRTC-Audio-BitrateAdaptation")), |
| + enable_dtx_adaptation_( |
| + webrtc::field_trial::IsEnabled("WebRTC-Audio-DtxAdaptation")), |
| + enable_fec_adaptation_( |
| + webrtc::field_trial::IsEnabled("WebRTC-Audio-FecAdaptation")), |
| + enable_channel_adaptation_( |
| + webrtc::field_trial::IsEnabled("WebRTC-Audio-ChannelAdaptation")), |
| + enable_frame_length_adaptation_(webrtc::field_trial::IsEnabled( |
| + "WebRTC-Audio-FrameLengthAdaptation")) { |
| RTC_DCHECK(controller_manager_); |
| } |
| @@ -118,6 +129,58 @@ AudioEncoderRuntimeConfig AudioNetworkAdaptorImpl::GetEncoderRuntimeConfig() { |
| controller_manager_->GetSortedControllers(last_metrics_)) |
| controller->MakeDecision(&config); |
| + // Update ANA stats. |
| + auto increment_opt = [](rtc::Optional<uint32_t>& a) { |
| + if (a) |
| + (*a)++; |
| + else |
| + a = rtc::Optional<uint32_t>(1); |
|
ossu
2017/09/08 10:56:01
I think you could just do a = a.value_or(0) + 1 as
ivoc
2017/09/08 11:43:47
Nice! Done, although I needed to wrap the result i
ossu
2017/09/08 12:05:21
Ah, that's right. I'll try to look at getting a ne
|
| + }; |
| + if (prev_config_) { |
| + if (config.bitrate_bps != prev_config_->bitrate_bps) { |
| + increment_opt(stats_.bitrate_action_counter); |
| + } |
| + if (config.enable_dtx != prev_config_->enable_dtx) { |
| + increment_opt(stats_.dtx_action_counter); |
| + } |
| + if (config.enable_fec != prev_config_->enable_fec) { |
| + increment_opt(stats_.fec_action_counter); |
| + } |
| + if (config.frame_length_ms && prev_config_->frame_length_ms) { |
| + if (*config.frame_length_ms > *prev_config_->frame_length_ms) { |
| + increment_opt(stats_.frame_length_increase_counter); |
| + } else if (*config.frame_length_ms < *prev_config_->frame_length_ms) { |
| + increment_opt(stats_.frame_length_decrease_counter); |
| + } |
| + } |
| + if (config.num_channels != prev_config_->num_channels) { |
| + increment_opt(stats_.channel_action_counter); |
| + } |
| + if (config.uplink_packet_loss_fraction) { |
| + stats_.uplink_packet_loss_fraction = rtc::Optional<double>( |
| + static_cast<double>(*config.uplink_packet_loss_fraction)); |
|
ossu
2017/09/08 10:56:01
Why does this need a static_cast? Why isn't uplink
ivoc
2017/09/08 11:43:47
That's a good point, I changed the stat into a flo
|
| + } |
| + } |
| + prev_config_ = rtc::Optional<AudioEncoderRuntimeConfig>(config); |
| + |
| + // Prevent certain controllers from taking action (determined by field trials) |
| + if (!enable_bitrate_adaptation_ && config.bitrate_bps) { |
| + config.bitrate_bps = rtc::Optional<int>(); |
|
ossu
2017/09/08 10:56:01
You can use .reset() to empty Optionals and save o
ivoc
2017/09/08 11:43:47
Done!
|
| + } |
| + if (!enable_dtx_adaptation_ && config.enable_dtx) { |
| + config.enable_dtx = rtc::Optional<bool>(); |
| + } |
| + if (!enable_fec_adaptation_ && config.enable_fec) { |
| + config.enable_fec = rtc::Optional<bool>(); |
| + config.uplink_packet_loss_fraction = rtc::Optional<float>(); |
| + } |
| + if (!enable_frame_length_adaptation_ && config.frame_length_ms) { |
| + config.frame_length_ms = rtc::Optional<int>(); |
| + } |
| + if (!enable_channel_adaptation_ && config.num_channels) { |
| + config.num_channels = rtc::Optional<size_t>(); |
| + } |
| + |
| if (debug_dump_writer_) |
| debug_dump_writer_->DumpEncoderRuntimeConfig(config, rtc::TimeMillis()); |
| @@ -136,9 +199,7 @@ void AudioNetworkAdaptorImpl::StopDebugDump() { |
| } |
| ANAStats AudioNetworkAdaptorImpl::GetStats() const { |
| - // TODO(ivoc): Actually implement the stat. |
| - // Tracking bug: https://bugs.chromium.org/p/webrtc/issues/detail?id=8127 |
| - return ANAStats(); |
| + return stats_; |
| } |
| void AudioNetworkAdaptorImpl::DumpNetworkMetrics() { |