Skip to content

Commit

Permalink
OboeTester: Auto GLitch test now handles MMAP properly
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 committed Feb 6, 2025
1 parent d256e32 commit 8db5098
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 @@ -401,6 +401,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 8db5098

Please sign in to comment.