Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(307)

Side by Side Diff: webrtc/modules/audio_processing/audio_processing_impl.cc

Issue 1229443003: audio_processing: Adds two UMA histograms logging delay jumps in AEC (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Changed to use ENUMERATION Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 fwd_proc_format_(kSampleRate16kHz), 170 fwd_proc_format_(kSampleRate16kHz),
171 fwd_out_format_(kSampleRate16kHz, 1), 171 fwd_out_format_(kSampleRate16kHz, 1),
172 rev_in_format_(kSampleRate16kHz, 1), 172 rev_in_format_(kSampleRate16kHz, 1),
173 rev_proc_format_(kSampleRate16kHz, 1), 173 rev_proc_format_(kSampleRate16kHz, 1),
174 split_rate_(kSampleRate16kHz), 174 split_rate_(kSampleRate16kHz),
175 stream_delay_ms_(0), 175 stream_delay_ms_(0),
176 delay_offset_ms_(0), 176 delay_offset_ms_(0),
177 was_stream_delay_set_(false), 177 was_stream_delay_set_(false),
178 last_stream_delay_ms_(0), 178 last_stream_delay_ms_(0),
179 last_aec_system_delay_ms_(0), 179 last_aec_system_delay_ms_(0),
180 stream_delay_jumps_(-1),
181 aec_system_delay_jumps_(-1),
180 output_will_be_muted_(false), 182 output_will_be_muted_(false),
181 key_pressed_(false), 183 key_pressed_(false),
182 #if defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS) 184 #if defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS)
183 use_new_agc_(false), 185 use_new_agc_(false),
184 #else 186 #else
185 use_new_agc_(config.Get<ExperimentalAgc>().enabled), 187 use_new_agc_(config.Get<ExperimentalAgc>().enabled),
186 #endif 188 #endif
187 agc_startup_min_volume_(config.Get<ExperimentalAgc>().startup_min_volume), 189 agc_startup_min_volume_(config.Get<ExperimentalAgc>().startup_min_volume),
188 #if defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS) 190 #if defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS)
189 transient_suppressor_enabled_(false), 191 transient_suppressor_enabled_(false),
(...skipping 806 matching lines...) Expand 10 before | Expand all | Expand 10 after
996 beamformer_.reset(new NonlinearBeamformer(array_geometry_)); 998 beamformer_.reset(new NonlinearBeamformer(array_geometry_));
997 } 999 }
998 beamformer_->Initialize(kChunkSizeMs, split_rate_); 1000 beamformer_->Initialize(kChunkSizeMs, split_rate_);
999 } 1001 }
1000 } 1002 }
1001 1003
1002 void AudioProcessingImpl::MaybeUpdateHistograms() { 1004 void AudioProcessingImpl::MaybeUpdateHistograms() {
1003 static const int kMinDiffDelayMs = 60; 1005 static const int kMinDiffDelayMs = 60;
1004 1006
1005 if (echo_cancellation()->is_enabled()) { 1007 if (echo_cancellation()->is_enabled()) {
1008 // Activate delay_jumps_ counters if we know echo_cancellation is runnning.
1009 // If a stream has echo we know that the echo_cancellation is in process.
1010 if (stream_delay_jumps_ == -1 && echo_cancellation()->stream_has_echo()) {
1011 stream_delay_jumps_ = 0;
1012 }
1013 if (aec_system_delay_jumps_ == -1 &&
1014 echo_cancellation()->stream_has_echo()) {
1015 aec_system_delay_jumps_ = 0;
1016 }
1017
1006 // Detect a jump in platform reported system delay and log the difference. 1018 // Detect a jump in platform reported system delay and log the difference.
1007 const int diff_stream_delay_ms = stream_delay_ms_ - last_stream_delay_ms_; 1019 const int diff_stream_delay_ms = stream_delay_ms_ - last_stream_delay_ms_;
1008 if (diff_stream_delay_ms > kMinDiffDelayMs && last_stream_delay_ms_ != 0) { 1020 if (diff_stream_delay_ms > kMinDiffDelayMs && last_stream_delay_ms_ != 0) {
1009 RTC_HISTOGRAM_COUNTS("WebRTC.Audio.PlatformReportedStreamDelayJump", 1021 RTC_HISTOGRAM_COUNTS("WebRTC.Audio.PlatformReportedStreamDelayJump",
1010 diff_stream_delay_ms, kMinDiffDelayMs, 1000, 100); 1022 diff_stream_delay_ms, kMinDiffDelayMs, 1000, 100);
1023 if (stream_delay_jumps_ == -1) {
1024 stream_delay_jumps_ = 0; // Activate counter if needed.
1025 }
1026 stream_delay_jumps_++;
1011 } 1027 }
1012 last_stream_delay_ms_ = stream_delay_ms_; 1028 last_stream_delay_ms_ = stream_delay_ms_;
1013 1029
1014 // Detect a jump in AEC system delay and log the difference. 1030 // Detect a jump in AEC system delay and log the difference.
1015 const int frames_per_ms = rtc::CheckedDivExact(split_rate_, 1000); 1031 const int frames_per_ms = rtc::CheckedDivExact(split_rate_, 1000);
1016 const int aec_system_delay_ms = 1032 const int aec_system_delay_ms =
1017 WebRtcAec_system_delay(echo_cancellation()->aec_core()) / frames_per_ms; 1033 WebRtcAec_system_delay(echo_cancellation()->aec_core()) / frames_per_ms;
1018 const int diff_aec_system_delay_ms = aec_system_delay_ms - 1034 const int diff_aec_system_delay_ms = aec_system_delay_ms -
1019 last_aec_system_delay_ms_; 1035 last_aec_system_delay_ms_;
1020 if (diff_aec_system_delay_ms > kMinDiffDelayMs && 1036 if (diff_aec_system_delay_ms > kMinDiffDelayMs &&
1021 last_aec_system_delay_ms_ != 0) { 1037 last_aec_system_delay_ms_ != 0) {
1022 RTC_HISTOGRAM_COUNTS("WebRTC.Audio.AecSystemDelayJump", 1038 RTC_HISTOGRAM_COUNTS("WebRTC.Audio.AecSystemDelayJump",
1023 diff_aec_system_delay_ms, kMinDiffDelayMs, 1000, 1039 diff_aec_system_delay_ms, kMinDiffDelayMs, 1000,
1024 100); 1040 100);
1041 if (aec_system_delay_jumps_ == -1) {
1042 aec_system_delay_jumps_ = 0; // Activate counter if needed.
1043 }
1044 aec_system_delay_jumps_++;
1025 } 1045 }
1026 last_aec_system_delay_ms_ = aec_system_delay_ms; 1046 last_aec_system_delay_ms_ = aec_system_delay_ms;
1027 // TODO(bjornv): Consider also logging amount of jumps. This gives a better
1028 // indication of how frequent jumps are.
1029 } 1047 }
1030 } 1048 }
1031 1049
1050 void AudioProcessingImpl::UpdateHistogramsOnCallEnd() {
1051 CriticalSectionScoped crit_scoped(crit_);
1052 if (stream_delay_jumps_ > -1) {
1053 RTC_HISTOGRAM_ENUMERATION(
1054 "WebRTC.Audio.NumOfPlatformReportedStreamDelayJumps",
1055 stream_delay_jumps_, 51);
1056 }
1057 stream_delay_jumps_ = -1;
1058 last_stream_delay_ms_ = 0;
1059
1060 if (aec_system_delay_jumps_ > -1) {
1061 RTC_HISTOGRAM_ENUMERATION("WebRTC.Audio.NumOfAecSystemDelayJumps",
1062 aec_system_delay_jumps_, 51);
1063 }
1064 aec_system_delay_jumps_ = -1;
1065 last_aec_system_delay_ms_ = 0;
1066 }
1067
1032 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP 1068 #ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP
1033 int AudioProcessingImpl::WriteMessageToDebugFile() { 1069 int AudioProcessingImpl::WriteMessageToDebugFile() {
1034 int32_t size = event_msg_->ByteSize(); 1070 int32_t size = event_msg_->ByteSize();
1035 if (size <= 0) { 1071 if (size <= 0) {
1036 return kUnspecifiedError; 1072 return kUnspecifiedError;
1037 } 1073 }
1038 #if defined(WEBRTC_ARCH_BIG_ENDIAN) 1074 #if defined(WEBRTC_ARCH_BIG_ENDIAN)
1039 // TODO(ajm): Use little-endian "on the wire". For the moment, we can be 1075 // TODO(ajm): Use little-endian "on the wire". For the moment, we can be
1040 // pretty safe in assuming little-endian. 1076 // pretty safe in assuming little-endian.
1041 #endif 1077 #endif
(...skipping 28 matching lines...) Expand all
1070 int err = WriteMessageToDebugFile(); 1106 int err = WriteMessageToDebugFile();
1071 if (err != kNoError) { 1107 if (err != kNoError) {
1072 return err; 1108 return err;
1073 } 1109 }
1074 1110
1075 return kNoError; 1111 return kNoError;
1076 } 1112 }
1077 #endif // WEBRTC_AUDIOPROC_DEBUG_DUMP 1113 #endif // WEBRTC_AUDIOPROC_DEBUG_DUMP
1078 1114
1079 } // namespace webrtc 1115 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/audio_processing/audio_processing_impl.h ('k') | webrtc/modules/audio_processing/include/audio_processing.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698