Skip to content

Commit

Permalink
OboeTester: Auto Glitch test now handles MMAP properly (#2155)
Browse files Browse the repository at this point in the history
Was not specifying MMAP requirement so all tests
got skipped on devices without MMAP.

Internal bug tracker: b/393194300
  • Loading branch information
philburk authored Feb 27, 2025
1 parent 74144cd commit 0c5d6b8
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 71 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,7 @@
*/
public class AutomatedGlitchActivity extends BaseAutoGlitchActivity {

private Spinner mDurationSpinner;

// Test with these configurations.
private static final int[] PERFORMANCE_MODES = {
StreamConfiguration.PERFORMANCE_MODE_LOW_LATENCY,
StreamConfiguration.PERFORMANCE_MODE_NONE
};
private static final int[] SAMPLE_RATES = { 48000, 44100, 16000 };
private static final int MONO = 1;
private static final int STEREO = 2;
Expand Down Expand Up @@ -63,8 +57,8 @@ protected void inflateActivity() {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

mDurationSpinner = (Spinner) findViewById(R.id.spinner_glitch_duration);
mDurationSpinner.setOnItemSelectedListener(new DurationSpinnerListener());
Spinner durationSpinner = (Spinner) findViewById(R.id.spinner_glitch_duration);
durationSpinner.setOnItemSelectedListener(new DurationSpinnerListener());

setAnalyzerText(getString(R.string.auto_glitch_instructions));
}
Expand All @@ -74,9 +68,7 @@ public String getTestName() {
return "AutoGlitch";
}

private void testConfiguration(int perfMode,
int sharingMode,
int sampleRate,
private void testConfiguration(int sampleRate,
int inChannels,
int outChannels) throws InterruptedException {

Expand All @@ -87,30 +79,18 @@ private void testConfiguration(int perfMode,
requestedInConfig.reset();
requestedOutConfig.reset();

requestedInConfig.setPerformanceMode(perfMode);
requestedOutConfig.setPerformanceMode(perfMode);

requestedInConfig.setSharingMode(sharingMode);
requestedOutConfig.setSharingMode(sharingMode);

requestedInConfig.setSampleRate(sampleRate);
requestedOutConfig.setSampleRate(sampleRate);

requestedInConfig.setChannelCount(inChannels);
requestedOutConfig.setChannelCount(outChannels);

testCurrentConfigurations();
testPerformancePaths();
}

private void testConfiguration(int performanceMode,
int sharingMode,
int sampleRate) throws InterruptedException {
testConfiguration(performanceMode,
sharingMode,
sampleRate, MONO, STEREO);
testConfiguration(performanceMode,
sharingMode,
sampleRate, STEREO, MONO);
private void testConfiguration(int sampleRate) throws InterruptedException {
testConfiguration(sampleRate, MONO, STEREO);
testConfiguration(sampleRate, STEREO, MONO);
}

@Override
Expand All @@ -121,22 +101,11 @@ public void runTest() {
mTestResults.clear();

// Test with STEREO on both input and output.
testConfiguration(StreamConfiguration.PERFORMANCE_MODE_LOW_LATENCY,
StreamConfiguration.SHARING_MODE_EXCLUSIVE,
UNSPECIFIED, STEREO, STEREO);

// Test EXCLUSIVE mode with a configuration most likely to work.
testConfiguration(StreamConfiguration.PERFORMANCE_MODE_LOW_LATENCY,
StreamConfiguration.SHARING_MODE_EXCLUSIVE,
UNSPECIFIED);
testConfiguration(UNSPECIFIED, STEREO, STEREO);

// Test various combinations.
for (int perfMode : PERFORMANCE_MODES) {
for (int sampleRate : SAMPLE_RATES) {
testConfiguration(perfMode,
StreamConfiguration.SHARING_MODE_SHARED,
sampleRate);
}
for (int sampleRate : SAMPLE_RATES) {
testConfiguration(sampleRate);
}

compareFailedTestsWithNearestPassingTest();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -405,6 +405,35 @@ protected TestResult testCurrentConfigurations() throws InterruptedException {
return testResult;
}

void testPerformancePaths() throws InterruptedException {
StreamConfiguration requestedInConfig = mAudioInputTester.requestedConfiguration;
StreamConfiguration requestedOutConfig = mAudioOutTester.requestedConfiguration;

requestedInConfig.setSharingMode(StreamConfiguration.SHARING_MODE_SHARED);
requestedOutConfig.setSharingMode(StreamConfiguration.SHARING_MODE_SHARED);

// Legacy NONE
requestedInConfig.setMMap(false);
requestedOutConfig.setMMap(false);
requestedInConfig.setPerformanceMode(StreamConfiguration.PERFORMANCE_MODE_NONE);
requestedOutConfig.setPerformanceMode(StreamConfiguration.PERFORMANCE_MODE_NONE);
testCurrentConfigurations();

// Legacy LOW_LATENCY
requestedInConfig.setPerformanceMode(StreamConfiguration.PERFORMANCE_MODE_LOW_LATENCY);
requestedOutConfig.setPerformanceMode(StreamConfiguration.PERFORMANCE_MODE_LOW_LATENCY);
testCurrentConfigurations();

// MMAP LowLatency
if (NativeEngine.isMMapSupported()) {
requestedInConfig.setMMap(true);
requestedOutConfig.setMMap(true);
testCurrentConfigurations();
}
requestedInConfig.setMMap(false);
requestedOutConfig.setMMap(false);
}

private void saveRecordingAsWave() {
File recordingDir = getExternalFilesDir(Environment.DIRECTORY_MUSIC);
File waveFile = new File(recordingDir, String.format("glitch_%03d.wav", getTestCount()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -811,36 +811,6 @@ private void testBug_270535408(AudioDeviceInfo inputDeviceInfo,
}
}

private void testPerformancePaths() throws InterruptedException {
StreamConfiguration requestedInConfig = mAudioInputTester.requestedConfiguration;
StreamConfiguration requestedOutConfig = mAudioOutTester.requestedConfiguration;

requestedInConfig.setSharingMode(StreamConfiguration.SHARING_MODE_SHARED);
requestedOutConfig.setSharingMode(StreamConfiguration.SHARING_MODE_SHARED);

// Legacy NONE
requestedInConfig.setMMap(false);
requestedOutConfig.setMMap(false);
requestedInConfig.setPerformanceMode(StreamConfiguration.PERFORMANCE_MODE_NONE);
requestedOutConfig.setPerformanceMode(StreamConfiguration.PERFORMANCE_MODE_NONE);
testCurrentConfigurations();

// Legacy LOW_LATENCY
requestedInConfig.setPerformanceMode(StreamConfiguration.PERFORMANCE_MODE_LOW_LATENCY);
requestedOutConfig.setPerformanceMode(StreamConfiguration.PERFORMANCE_MODE_LOW_LATENCY);
testCurrentConfigurations();

// MMAP LowLatency
if (NativeEngine.isMMapSupported()) {
requestedInConfig.setMMap(true);
requestedOutConfig.setMMap(true);
testCurrentConfigurations();
}
requestedInConfig.setMMap(false);
requestedOutConfig.setMMap(false);

}

private void testOutputDeviceTypes() throws InterruptedException {
// Determine which output device type to test based on priorities.
AudioDeviceInfo info = getDeviceInfoByType(AudioDeviceInfo.TYPE_USB_DEVICE,
Expand Down

0 comments on commit 0c5d6b8

Please sign in to comment.