aaudio: use xruns detected in the service
The service knows when an actual xrun occurs so we pass
that value to the client.
Bug: 38512417
Test: write_sine_callback -pl -n1 -s20 -c2 -u
Change-Id: I9e5ff1edd2e9378957309280162d7cda855f5adb
diff --git a/services/oboeservice/AAudioServiceEndpointCapture.cpp b/services/oboeservice/AAudioServiceEndpointCapture.cpp
index f902bef..efac788 100644
--- a/services/oboeservice/AAudioServiceEndpointCapture.cpp
+++ b/services/oboeservice/AAudioServiceEndpointCapture.cpp
@@ -58,7 +58,6 @@
// Read data from the shared MMAP stream and then distribute it to the client streams.
void *AAudioServiceEndpointCapture::callbackLoop() {
ALOGD("callbackLoop() entering");
- int32_t underflowCount = 0;
aaudio_result_t result = AAUDIO_OK;
int64_t timeoutNanos = getStreamInternal()->calculateReasonableTimeout();
@@ -102,9 +101,10 @@
int64_t positionOffset = mmapFramesRead - clientFramesWritten;
streamShared->setTimestampPositionOffset(positionOffset);
+ // Is the buffer too full to write a burst?
if (fifo->getFifoControllerBase()->getEmptyFramesAvailable() <
- getFramesPerBurst()) {
- underflowCount++;
+ getFramesPerBurst()) {
+ streamShared->incrementXRunCount();
} else {
fifo->write(mDistributionBuffer, getFramesPerBurst());
}
@@ -125,6 +125,6 @@
}
}
- ALOGD("callbackLoop() exiting, %d underflows", underflowCount);
+ ALOGD("callbackLoop() exiting");
return NULL; // TODO review
}