From f1239b5405158e1e1cc9d6cc022b27b4acb2cebf Mon Sep 17 00:00:00 2001 From: henrika Date: Tue, 25 Sep 2018 15:39:22 +0200 Subject: [PATCH] Fixes issue where WebRTC.Audio.RecordSampleRateOffsetInPercent can report 100% (part II) See https://webrtc-review.googlesource.com/c/src/+/100241 for part I. It can happen that recording fail to start but playout works. If that happens, we can log stats like this: 9-25 15:32:02.023 13903 13948 I audio_device_buffer.cc: (line 414): [REC : 10002msec, 48kHz] callbacks: 0, samples: 0, rate: 0, rate diff: 100%, level: 0 09-25 15:32:02.024 13903 13948 I audio_device_buffer.cc: (line 432): [PLAY: 10002msec, 48kHz] callbacks: 1002, samples: 480960, rate: 48086, rate diff: 0%, level: 0 09-25 15:32:12.028 13903 13948 I audio_device_buffer.cc: (line 414): [REC : 10005msec, 48kHz] callbacks: 0, samples: 0, rate: 0, rate diff: 100%, level: 0 09-25 15:32:12.028 13903 13948 I audio_device_buffer.cc: (line 432): [PLAY: 10005msec, 48kHz] callbacks: 1000, samples: 480000, rate: 47976, rate diff: 0%, level: 0 hence, we log invalid UMA stats for a rate offset of 100%. This change fixes the problem, and in the case above, we now instead log: 09-25 15:35:56.141 14116 14161 I audio_device_buffer.cc: (line 432): [PLAY: 10011msec, 48kHz] callbacks: 1002, samples: 480960, rate: 48043, rate diff: 0%, level: 0 09-25 15:36:06.151 14116 14161 I audio_device_buffer.cc: (line 432): [PLAY: 10010msec, 48kHz] callbacks: 1002, samples: 480960, rate: 48048, rate diff: 0%, level: 0 09-25 15:36:16.162 14116 14161 I audio_device_buffer.cc: (line 432): [PLAY: 10011msec, 48kHz] callbacks: 1001, samples: 480480, rate: 47995, rate diff: 0%, level: 0 09-25 15:36:26.173 14116 14161 I audio_device_buffer.cc: (line 432): [PLAY: 10011msec, 48kHz] callbacks: 1001, samples: 480480, rate: 47995, rate diff: 0%, level: 0 Bug: b/113648245 Change-Id: Ic8cb71ca049ef24bf68963a81f95d4e5c2282518 Reviewed-on: https://webrtc-review.googlesource.com/101881 Commit-Queue: Henrik Andreassson Reviewed-by: Ivo Creusen Cr-Commit-Position: refs/heads/master@{#24828} --- modules/audio_device/audio_device_buffer.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/audio_device/audio_device_buffer.cc b/modules/audio_device/audio_device_buffer.cc index 07da695152..5c45780426 100644 --- a/modules/audio_device/audio_device_buffer.cc +++ b/modules/audio_device/audio_device_buffer.cc @@ -405,7 +405,7 @@ void AudioDeviceBuffer::LogStats(LogState state) { uint32_t diff_samples = stats.rec_samples - last_stats_.rec_samples; float rate = diff_samples / (static_cast(time_since_last) / 1000.0); uint32_t abs_diff_rate_in_percent = 0; - if (rec_sample_rate > 0) { + if (rec_sample_rate > 0 && rate > 0) { abs_diff_rate_in_percent = static_cast( 0.5f + ((100.0f * std::abs(rate - rec_sample_rate)) / rec_sample_rate)); @@ -423,7 +423,7 @@ void AudioDeviceBuffer::LogStats(LogState state) { diff_samples = stats.play_samples - last_stats_.play_samples; rate = diff_samples / (static_cast(time_since_last) / 1000.0); abs_diff_rate_in_percent = 0; - if (play_sample_rate > 0) { + if (play_sample_rate > 0 && rate > 0) { abs_diff_rate_in_percent = static_cast( 0.5f + ((100.0f * std::abs(rate - play_sample_rate)) / play_sample_rate));