Merge changes I48279bba,I3baf29a5 into tm-qpr-dev am: 9f999d0920

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/20751890

Change-Id: I707e68e8d51cc5c5b1fffc6063c86017b2ce0551
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Ivan Chiang
2022-12-16 13:29:12 +00:00
committed by Automerger Merge Worker

View File

@@ -108,6 +108,7 @@ final class HotwordAudioStreamCopier {
final int audioStreamCount = audioStreams.size(); final int audioStreamCount = audioStreams.size();
List<HotwordAudioStream> newAudioStreams = new ArrayList<>(audioStreams.size()); List<HotwordAudioStream> newAudioStreams = new ArrayList<>(audioStreams.size());
List<CopyTaskInfo> copyTaskInfos = new ArrayList<>(audioStreams.size()); List<CopyTaskInfo> copyTaskInfos = new ArrayList<>(audioStreams.size());
int totalMetadataBundleSizeBytes = 0;
for (HotwordAudioStream audioStream : audioStreams) { for (HotwordAudioStream audioStream : audioStreams) {
ParcelFileDescriptor[] clientPipe = ParcelFileDescriptor.createReliablePipe(); ParcelFileDescriptor[] clientPipe = ParcelFileDescriptor.createReliablePipe();
ParcelFileDescriptor clientAudioSource = clientPipe[0]; ParcelFileDescriptor clientAudioSource = clientPipe[0];
@@ -119,6 +120,7 @@ final class HotwordAudioStreamCopier {
int copyBufferLength = DEFAULT_COPY_BUFFER_LENGTH_BYTES; int copyBufferLength = DEFAULT_COPY_BUFFER_LENGTH_BYTES;
PersistableBundle metadata = audioStream.getMetadata(); PersistableBundle metadata = audioStream.getMetadata();
totalMetadataBundleSizeBytes += HotwordDetectedResult.getParcelableSize(metadata);
if (metadata.containsKey(KEY_AUDIO_STREAM_COPY_BUFFER_LENGTH_BYTES)) { if (metadata.containsKey(KEY_AUDIO_STREAM_COPY_BUFFER_LENGTH_BYTES)) {
copyBufferLength = metadata.getInt(KEY_AUDIO_STREAM_COPY_BUFFER_LENGTH_BYTES, -1); copyBufferLength = metadata.getInt(KEY_AUDIO_STREAM_COPY_BUFFER_LENGTH_BYTES, -1);
if (copyBufferLength < 1 || copyBufferLength > MAX_COPY_BUFFER_LENGTH_BYTES) { if (copyBufferLength < 1 || copyBufferLength > MAX_COPY_BUFFER_LENGTH_BYTES) {
@@ -142,7 +144,9 @@ final class HotwordAudioStreamCopier {
} }
String resultTaskId = TASK_ID_PREFIX + System.identityHashCode(result); String resultTaskId = TASK_ID_PREFIX + System.identityHashCode(result);
mExecutorService.execute(new HotwordDetectedResultCopyTask(resultTaskId, copyTaskInfos)); mExecutorService.execute(
new HotwordDetectedResultCopyTask(resultTaskId, copyTaskInfos,
totalMetadataBundleSizeBytes));
return result.buildUpon().setAudioStreams(newAudioStreams).build(); return result.buildUpon().setAudioStreams(newAudioStreams).build();
} }
@@ -162,11 +166,14 @@ final class HotwordAudioStreamCopier {
private class HotwordDetectedResultCopyTask implements Runnable { private class HotwordDetectedResultCopyTask implements Runnable {
private final String mResultTaskId; private final String mResultTaskId;
private final List<CopyTaskInfo> mCopyTaskInfos; private final List<CopyTaskInfo> mCopyTaskInfos;
private final int mTotalMetadataSizeBytes;
private final ExecutorService mExecutorService = Executors.newCachedThreadPool(); private final ExecutorService mExecutorService = Executors.newCachedThreadPool();
HotwordDetectedResultCopyTask(String resultTaskId, List<CopyTaskInfo> copyTaskInfos) { HotwordDetectedResultCopyTask(String resultTaskId, List<CopyTaskInfo> copyTaskInfos,
int totalMetadataSizeBytes) {
mResultTaskId = resultTaskId; mResultTaskId = resultTaskId;
mCopyTaskInfos = copyTaskInfos; mCopyTaskInfos = copyTaskInfos;
mTotalMetadataSizeBytes = totalMetadataSizeBytes;
} }
@Override @Override
@@ -188,20 +195,36 @@ final class HotwordAudioStreamCopier {
try { try {
HotwordMetricsLogger.writeAudioEgressEvent(mDetectorType, HotwordMetricsLogger.writeAudioEgressEvent(mDetectorType,
HOTWORD_AUDIO_EGRESS_EVENT_REPORTED__EVENT__STARTED, HOTWORD_AUDIO_EGRESS_EVENT_REPORTED__EVENT__STARTED,
mVoiceInteractorUid, /* streamSizeBytes= */ 0, /* bundleSizeBytes= */ 0, mVoiceInteractorUid, /* streamSizeBytes= */ 0, mTotalMetadataSizeBytes,
size); size);
// TODO(b/244599891): Set timeout, close after inactivity // TODO(b/244599891): Set timeout, close after inactivity
mExecutorService.invokeAll(tasks); mExecutorService.invokeAll(tasks);
int totalStreamSizeBytes = 0;
for (SingleAudioStreamCopyTask task : tasks) {
totalStreamSizeBytes += task.mTotalCopiedBytes;
}
Slog.i(TAG, mResultTaskId + ": Task was completed. Total bytes streamed: "
+ totalStreamSizeBytes + ", total metadata bundle size bytes: "
+ mTotalMetadataSizeBytes);
HotwordMetricsLogger.writeAudioEgressEvent(mDetectorType, HotwordMetricsLogger.writeAudioEgressEvent(mDetectorType,
HOTWORD_AUDIO_EGRESS_EVENT_REPORTED__EVENT__ENDED, HOTWORD_AUDIO_EGRESS_EVENT_REPORTED__EVENT__ENDED,
mVoiceInteractorUid, /* streamSizeBytes= */ 0, /* bundleSizeBytes= */ 0, mVoiceInteractorUid, totalStreamSizeBytes, mTotalMetadataSizeBytes,
size); size);
} catch (InterruptedException e) { } catch (InterruptedException e) {
int totalStreamSizeBytes = 0;
for (SingleAudioStreamCopyTask task : tasks) {
totalStreamSizeBytes += task.mTotalCopiedBytes;
}
HotwordMetricsLogger.writeAudioEgressEvent(mDetectorType, HotwordMetricsLogger.writeAudioEgressEvent(mDetectorType,
HOTWORD_AUDIO_EGRESS_EVENT_REPORTED__EVENT__INTERRUPTED_EXCEPTION, HOTWORD_AUDIO_EGRESS_EVENT_REPORTED__EVENT__INTERRUPTED_EXCEPTION,
mVoiceInteractorUid, /* streamSizeBytes= */ 0, /* bundleSizeBytes= */ 0, mVoiceInteractorUid, totalStreamSizeBytes, mTotalMetadataSizeBytes,
size); size);
Slog.e(TAG, mResultTaskId + ": Task was interrupted", e); Slog.e(TAG, mResultTaskId + ": Task was interrupted. Total bytes streamed: "
+ totalStreamSizeBytes + ", total metadata bundle size bytes: "
+ mTotalMetadataSizeBytes);
bestEffortPropagateError(e.getMessage()); bestEffortPropagateError(e.getMessage());
} finally { } finally {
mAppOpsManager.finishOp(AppOpsManager.OPSTR_RECORD_AUDIO_HOTWORD, mAppOpsManager.finishOp(AppOpsManager.OPSTR_RECORD_AUDIO_HOTWORD,
@@ -245,6 +268,8 @@ final class HotwordAudioStreamCopier {
private final int mDetectorType; private final int mDetectorType;
private final int mUid; private final int mUid;
private volatile int mTotalCopiedBytes = 0;
SingleAudioStreamCopyTask(String streamTaskId, ParcelFileDescriptor audioSource, SingleAudioStreamCopyTask(String streamTaskId, ParcelFileDescriptor audioSource,
ParcelFileDescriptor audioSink, int copyBufferLength, int detectorType, int uid) { ParcelFileDescriptor audioSink, int copyBufferLength, int detectorType, int uid) {
mStreamTaskId = streamTaskId; mStreamTaskId = streamTaskId;
@@ -289,6 +314,7 @@ final class HotwordAudioStreamCopier {
Arrays.copyOfRange(buffer, 0, 20))); Arrays.copyOfRange(buffer, 0, 20)));
} }
fos.write(buffer, 0, bytesRead); fos.write(buffer, 0, bytesRead);
mTotalCopiedBytes += bytesRead;
} }
// TODO(b/244599891): Close PFDs after inactivity // TODO(b/244599891): Close PFDs after inactivity
} }