Merge "Hotword: Add uid into the original metrics" into tm-qpr-dev am: aff32206e9
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/20717790 Change-Id: I02b53f84b891c565a5119669247c11b85863649d Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -268,7 +268,8 @@ final class HotwordDetectionConnection {
|
||||
synchronized (mLock) {
|
||||
restartProcessLocked();
|
||||
HotwordMetricsLogger.writeServiceRestartEvent(mDetectorType,
|
||||
HOTWORD_DETECTION_SERVICE_RESTARTED__REASON__SCHEDULE);
|
||||
HOTWORD_DETECTION_SERVICE_RESTARTED__REASON__SCHEDULE,
|
||||
mVoiceInteractionServiceUid);
|
||||
}
|
||||
}, mReStartPeriodSeconds, mReStartPeriodSeconds, TimeUnit.SECONDS);
|
||||
}
|
||||
@@ -303,7 +304,8 @@ final class HotwordDetectionConnection {
|
||||
// conditions with audio reading in the service.
|
||||
restartProcessLocked();
|
||||
HotwordMetricsLogger.writeServiceRestartEvent(mDetectorType,
|
||||
HOTWORD_DETECTION_SERVICE_RESTARTED__REASON__AUDIO_SERVICE_DIED);
|
||||
HOTWORD_DETECTION_SERVICE_RESTARTED__REASON__AUDIO_SERVICE_DIED,
|
||||
mVoiceInteractionServiceUid);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -334,13 +336,14 @@ final class HotwordDetectionConnection {
|
||||
try {
|
||||
mCallback.onStatusReported(status);
|
||||
HotwordMetricsLogger.writeServiceInitResultEvent(mDetectorType,
|
||||
initResultMetricsResult);
|
||||
initResultMetricsResult, mVoiceInteractionServiceUid);
|
||||
} catch (RemoteException e) {
|
||||
// TODO: Add a new atom for RemoteException case, the error doesn't very
|
||||
// correct here
|
||||
Slog.w(TAG, "Failed to report initialization status: " + e);
|
||||
HotwordMetricsLogger.writeServiceInitResultEvent(mDetectorType,
|
||||
METRICS_INIT_CALLBACK_STATE_ERROR);
|
||||
METRICS_INIT_CALLBACK_STATE_ERROR,
|
||||
mVoiceInteractionServiceUid);
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -363,11 +366,12 @@ final class HotwordDetectionConnection {
|
||||
try {
|
||||
mCallback.onStatusReported(INITIALIZATION_STATUS_UNKNOWN);
|
||||
HotwordMetricsLogger.writeServiceInitResultEvent(mDetectorType,
|
||||
METRICS_INIT_UNKNOWN_TIMEOUT);
|
||||
METRICS_INIT_UNKNOWN_TIMEOUT, mVoiceInteractionServiceUid);
|
||||
} catch (RemoteException e) {
|
||||
Slog.w(TAG, "Failed to report initialization status UNKNOWN", e);
|
||||
HotwordMetricsLogger.writeServiceInitResultEvent(mDetectorType,
|
||||
METRICS_INIT_CALLBACK_STATE_ERROR);
|
||||
METRICS_INIT_CALLBACK_STATE_ERROR,
|
||||
mVoiceInteractionServiceUid);
|
||||
}
|
||||
} else if (err != null) {
|
||||
Slog.w(TAG, "Failed to update state: " + err);
|
||||
@@ -470,12 +474,14 @@ final class HotwordDetectionConnection {
|
||||
synchronized (mLock) {
|
||||
HotwordMetricsLogger.writeKeyphraseTriggerEvent(
|
||||
mDetectorType,
|
||||
HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__DETECTED);
|
||||
HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__DETECTED,
|
||||
mVoiceInteractionServiceUid);
|
||||
if (!mPerformingSoftwareHotwordDetection) {
|
||||
Slog.i(TAG, "Hotword detection has already completed");
|
||||
HotwordMetricsLogger.writeKeyphraseTriggerEvent(
|
||||
mDetectorType,
|
||||
METRICS_KEYPHRASE_TRIGGERED_DETECT_UNEXPECTED_CALLBACK);
|
||||
METRICS_KEYPHRASE_TRIGGERED_DETECT_UNEXPECTED_CALLBACK,
|
||||
mVoiceInteractionServiceUid);
|
||||
return;
|
||||
}
|
||||
mPerformingSoftwareHotwordDetection = false;
|
||||
@@ -484,7 +490,8 @@ final class HotwordDetectionConnection {
|
||||
} catch (SecurityException e) {
|
||||
HotwordMetricsLogger.writeKeyphraseTriggerEvent(
|
||||
mDetectorType,
|
||||
METRICS_KEYPHRASE_TRIGGERED_DETECT_SECURITY_EXCEPTION);
|
||||
METRICS_KEYPHRASE_TRIGGERED_DETECT_SECURITY_EXCEPTION,
|
||||
mVoiceInteractionServiceUid);
|
||||
mSoftwareCallback.onError();
|
||||
return;
|
||||
}
|
||||
@@ -513,7 +520,8 @@ final class HotwordDetectionConnection {
|
||||
}
|
||||
HotwordMetricsLogger.writeKeyphraseTriggerEvent(
|
||||
mDetectorType,
|
||||
HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__REJECTED);
|
||||
HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__REJECTED,
|
||||
mVoiceInteractionServiceUid);
|
||||
// onRejected isn't allowed here, and we are not expecting it.
|
||||
}
|
||||
};
|
||||
@@ -661,12 +669,14 @@ final class HotwordDetectionConnection {
|
||||
}
|
||||
HotwordMetricsLogger.writeKeyphraseTriggerEvent(
|
||||
mDetectorType,
|
||||
HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__DETECTED);
|
||||
HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__DETECTED,
|
||||
mVoiceInteractionServiceUid);
|
||||
if (!mValidatingDspTrigger) {
|
||||
Slog.i(TAG, "Ignoring #onDetected due to a process restart");
|
||||
HotwordMetricsLogger.writeKeyphraseTriggerEvent(
|
||||
mDetectorType,
|
||||
METRICS_KEYPHRASE_TRIGGERED_DETECT_UNEXPECTED_CALLBACK);
|
||||
METRICS_KEYPHRASE_TRIGGERED_DETECT_UNEXPECTED_CALLBACK,
|
||||
mVoiceInteractionServiceUid);
|
||||
return;
|
||||
}
|
||||
mValidatingDspTrigger = false;
|
||||
@@ -676,7 +686,8 @@ final class HotwordDetectionConnection {
|
||||
Slog.i(TAG, "Ignoring #onDetected due to a SecurityException", e);
|
||||
HotwordMetricsLogger.writeKeyphraseTriggerEvent(
|
||||
mDetectorType,
|
||||
METRICS_KEYPHRASE_TRIGGERED_DETECT_SECURITY_EXCEPTION);
|
||||
METRICS_KEYPHRASE_TRIGGERED_DETECT_SECURITY_EXCEPTION,
|
||||
mVoiceInteractionServiceUid);
|
||||
externalCallback.onError(CALLBACK_ONDETECTED_GOT_SECURITY_EXCEPTION);
|
||||
return;
|
||||
}
|
||||
@@ -709,12 +720,14 @@ final class HotwordDetectionConnection {
|
||||
}
|
||||
HotwordMetricsLogger.writeKeyphraseTriggerEvent(
|
||||
mDetectorType,
|
||||
HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__REJECTED);
|
||||
HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__REJECTED,
|
||||
mVoiceInteractionServiceUid);
|
||||
if (!mValidatingDspTrigger) {
|
||||
Slog.i(TAG, "Ignoring #onRejected due to a process restart");
|
||||
HotwordMetricsLogger.writeKeyphraseTriggerEvent(
|
||||
mDetectorType,
|
||||
METRICS_KEYPHRASE_TRIGGERED_REJECT_UNEXPECTED_CALLBACK);
|
||||
METRICS_KEYPHRASE_TRIGGERED_REJECT_UNEXPECTED_CALLBACK,
|
||||
mVoiceInteractionServiceUid);
|
||||
return;
|
||||
}
|
||||
mValidatingDspTrigger = false;
|
||||
@@ -728,21 +741,20 @@ final class HotwordDetectionConnection {
|
||||
|
||||
synchronized (mLock) {
|
||||
mValidatingDspTrigger = true;
|
||||
mRemoteHotwordDetectionService.run(
|
||||
service -> {
|
||||
// TODO: avoid allocate every time
|
||||
mCancellationKeyPhraseDetectionFuture = mScheduledExecutorService.schedule(
|
||||
() -> HotwordMetricsLogger
|
||||
.writeKeyphraseTriggerEvent(mDetectorType,
|
||||
HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__DETECT_TIMEOUT),
|
||||
VALIDATION_TIMEOUT_MILLIS,
|
||||
TimeUnit.MILLISECONDS);
|
||||
service.detectFromDspSource(
|
||||
recognitionEvent,
|
||||
recognitionEvent.getCaptureFormat(),
|
||||
VALIDATION_TIMEOUT_MILLIS,
|
||||
internalCallback);
|
||||
});
|
||||
mRemoteHotwordDetectionService.run(service -> {
|
||||
// TODO: avoid allocate every time
|
||||
mCancellationKeyPhraseDetectionFuture = mScheduledExecutorService.schedule(
|
||||
() -> HotwordMetricsLogger.writeKeyphraseTriggerEvent(mDetectorType,
|
||||
HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__DETECT_TIMEOUT,
|
||||
mVoiceInteractionServiceUid),
|
||||
VALIDATION_TIMEOUT_MILLIS,
|
||||
TimeUnit.MILLISECONDS);
|
||||
service.detectFromDspSource(
|
||||
recognitionEvent,
|
||||
recognitionEvent.getCaptureFormat(),
|
||||
VALIDATION_TIMEOUT_MILLIS,
|
||||
internalCallback);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -790,7 +802,8 @@ final class HotwordDetectionConnection {
|
||||
mCallback.onRejected(new HotwordRejectedResult.Builder().build());
|
||||
HotwordMetricsLogger.writeKeyphraseTriggerEvent(
|
||||
mDetectorType,
|
||||
HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__REJECTED_FROM_RESTART);
|
||||
HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__REJECTED_FROM_RESTART,
|
||||
mVoiceInteractionServiceUid);
|
||||
} catch (RemoteException e) {
|
||||
Slog.w(TAG, "Failed to call #rejected");
|
||||
}
|
||||
@@ -836,11 +849,13 @@ final class HotwordDetectionConnection {
|
||||
private SoundTrigger.KeyphraseRecognitionEvent mRecognitionEvent;
|
||||
private final HotwordDetectionConnection mHotwordDetectionConnection;
|
||||
private final IHotwordRecognitionStatusCallback mExternalCallback;
|
||||
private final int mVoiceInteractionServiceUid;
|
||||
|
||||
SoundTriggerCallback(IHotwordRecognitionStatusCallback callback,
|
||||
HotwordDetectionConnection connection) {
|
||||
HotwordDetectionConnection connection, int uid) {
|
||||
mHotwordDetectionConnection = connection;
|
||||
mExternalCallback = callback;
|
||||
mVoiceInteractionServiceUid = uid;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -853,14 +868,16 @@ final class HotwordDetectionConnection {
|
||||
if (useHotwordDetectionService) {
|
||||
HotwordMetricsLogger.writeKeyphraseTriggerEvent(
|
||||
HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__DETECTOR_TYPE__TRUSTED_DETECTOR_DSP,
|
||||
HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__KEYPHRASE_TRIGGER);
|
||||
HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__KEYPHRASE_TRIGGER,
|
||||
mVoiceInteractionServiceUid);
|
||||
mRecognitionEvent = recognitionEvent;
|
||||
mHotwordDetectionConnection.detectFromDspSource(
|
||||
recognitionEvent, mExternalCallback);
|
||||
} else {
|
||||
HotwordMetricsLogger.writeKeyphraseTriggerEvent(
|
||||
HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__DETECTOR_TYPE__NORMAL_DETECTOR,
|
||||
HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__KEYPHRASE_TRIGGER);
|
||||
HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__KEYPHRASE_TRIGGER,
|
||||
mVoiceInteractionServiceUid);
|
||||
mExternalCallback.onKeyphraseDetected(recognitionEvent, null);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -64,28 +64,28 @@ public final class HotwordMetricsLogger {
|
||||
/**
|
||||
* Logs information related to hotword detection service init result.
|
||||
*/
|
||||
public static void writeServiceInitResultEvent(int detectorType, int result) {
|
||||
public static void writeServiceInitResultEvent(int detectorType, int result, int uid) {
|
||||
int metricsDetectorType = getInitMetricsDetectorType(detectorType);
|
||||
FrameworkStatsLog.write(FrameworkStatsLog.HOTWORD_DETECTION_SERVICE_INIT_RESULT_REPORTED,
|
||||
metricsDetectorType, result);
|
||||
metricsDetectorType, result, uid);
|
||||
}
|
||||
|
||||
/**
|
||||
* Logs information related to hotword detection service restarting.
|
||||
*/
|
||||
public static void writeServiceRestartEvent(int detectorType, int reason) {
|
||||
public static void writeServiceRestartEvent(int detectorType, int reason, int uid) {
|
||||
int metricsDetectorType = getRestartMetricsDetectorType(detectorType);
|
||||
FrameworkStatsLog.write(FrameworkStatsLog.HOTWORD_DETECTION_SERVICE_RESTARTED,
|
||||
metricsDetectorType, reason);
|
||||
metricsDetectorType, reason, uid);
|
||||
}
|
||||
|
||||
/**
|
||||
* Logs information related to keyphrase trigger.
|
||||
*/
|
||||
public static void writeKeyphraseTriggerEvent(int detectorType, int result) {
|
||||
public static void writeKeyphraseTriggerEvent(int detectorType, int result, int uid) {
|
||||
int metricsDetectorType = getKeyphraseMetricsDetectorType(detectorType);
|
||||
FrameworkStatsLog.write(FrameworkStatsLog.HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED,
|
||||
metricsDetectorType, result);
|
||||
metricsDetectorType, result, uid);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -711,7 +711,7 @@ class VoiceInteractionManagerServiceImpl implements VoiceInteractionSessionConne
|
||||
Slog.d(TAG, "createSoundTriggerCallbackLocked");
|
||||
}
|
||||
return new HotwordDetectionConnection.SoundTriggerCallback(callback,
|
||||
mHotwordDetectionConnection);
|
||||
mHotwordDetectionConnection, mInfo.getServiceInfo().applicationInfo.uid);
|
||||
}
|
||||
|
||||
private static ServiceInfo getServiceInfoLocked(@NonNull ComponentName componentName,
|
||||
|
||||
Reference in New Issue
Block a user