Avoids update of WebRTC.Audio.SourceMatchesRecordingSession for Android < N
Before this change we always logged false in WebRTC.Audio.SourceMatchesRecordingSession
even when a test had not been executed (happens e.g. for Android < N).
This issue is now fixed and we only update WebRTC.Audio.SourceMatchesRecordingSession
if a valid test has been performed.
No-Try: True
TBR: glaznev
Bug: webrtc:10971
Change-Id: I907197476f00b812c67bb71e8fdcd6f297cfbdee
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/154563
Commit-Queue: Henrik Andreassson <henrika@webrtc.org>
Reviewed-by: Henrik Andreassson <henrika@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#29324}
diff --git a/sdk/android/src/java/org/webrtc/audio/WebRtcAudioRecord.java b/sdk/android/src/java/org/webrtc/audio/WebRtcAudioRecord.java
index 8136bca..42570d8 100644
--- a/sdk/android/src/java/org/webrtc/audio/WebRtcAudioRecord.java
+++ b/sdk/android/src/java/org/webrtc/audio/WebRtcAudioRecord.java
@@ -93,7 +93,7 @@
private volatile boolean microphoneMute;
private boolean audioSourceMatchesRecordingSession;
- private boolean audioConfigHasBeenVerified;
+ private boolean isAudioConfigVerified;
private byte[] emptyBytes;
private final @Nullable AudioRecordErrorCallback errorCallback;
@@ -221,13 +221,20 @@
return isNoiseSuppressorSupported;
}
+ // Returns true if a valid call to verifyAudioConfig() has been done. Should always be
+ // checked before using the returned value of isAudioSourceMatchingRecordingSession().
@CalledByNative
+ boolean isAudioConfigVerified() {
+ return isAudioConfigVerified;
+ }
+
// Returns true if verifyAudioConfig() succeeds. This value is set after a specific delay when
// startRecording() has been called. Hence, should preferably be called in combination with
- // stopRecording() to ensure that it has been set properly. |audioConfigHasBeenChecked| is
+ // stopRecording() to ensure that it has been set properly. |isAudioConfigVerified| is
// enabled in WebRtcAudioRecord to ensure that the returned value is valid.
+ @CalledByNative
boolean isAudioSourceMatchingRecordingSession() {
- if (!audioConfigHasBeenVerified) {
+ if (!isAudioConfigVerified) {
Logging.w(TAG, "Audio configuration has not yet been verified");
return false;
}
@@ -434,7 +441,7 @@
audioSourceMatchesRecordingSession =
verifyAudioConfig(audioRecord.getAudioSource(), audioRecord.getAudioSessionId(),
audioRecord.getFormat(), audioRecord.getRoutedDevice(), configs);
- audioConfigHasBeenVerified = true;
+ isAudioConfigVerified = true;
}
}
return numActiveRecordingSessions;
diff --git a/sdk/android/src/jni/audio_device/audio_record_jni.cc b/sdk/android/src/jni/audio_device/audio_record_jni.cc
index 5e39be9..15c290c 100644
--- a/sdk/android/src/jni/audio_device/audio_record_jni.cc
+++ b/sdk/android/src/jni/audio_device/audio_record_jni.cc
@@ -158,13 +158,17 @@
if (!initialized_ || !recording_) {
return 0;
}
- const bool session_was_ok =
- Java_WebRtcAudioRecord_isAudioSourceMatchingRecordingSession(
- env_, j_audio_record_);
- RTC_HISTOGRAM_BOOLEAN("WebRTC.Audio.SourceMatchesRecordingSession",
- session_was_ok);
- RTC_LOG(INFO) << "HISTOGRAM(WebRTC.Audio.SourceMatchesRecordingSession): "
- << session_was_ok;
+ // Check if the audio source matched the activated recording session but only
+ // if a valid results exists to avoid invalid statistics.
+ if (Java_WebRtcAudioRecord_isAudioConfigVerified(env_, j_audio_record_)) {
+ const bool session_was_ok =
+ Java_WebRtcAudioRecord_isAudioSourceMatchingRecordingSession(
+ env_, j_audio_record_);
+ RTC_HISTOGRAM_BOOLEAN("WebRTC.Audio.SourceMatchesRecordingSession",
+ session_was_ok);
+ RTC_LOG(INFO) << "HISTOGRAM(WebRTC.Audio.SourceMatchesRecordingSession): "
+ << session_was_ok;
+ }
if (!Java_WebRtcAudioRecord_stopRecording(env_, j_audio_record_)) {
RTC_LOG(LS_ERROR) << "StopRecording failed";
return -1;