Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5f8309a0 authored by Joanne Chung's avatar Joanne Chung Committed by Automerger Merge Worker
Browse files

Merge "Hotword: Add uid into the original metrics" into tm-qpr-dev am: aff32206

parents b95226c0 aff32206
Loading
Loading
Loading
Loading
+51 −34
Original line number Diff line number Diff line
@@ -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,13 +741,12 @@ final class HotwordDetectionConnection {

        synchronized (mLock) {
            mValidatingDspTrigger = true;
            mRemoteHotwordDetectionService.run(
                    service -> {
            mRemoteHotwordDetectionService.run(service -> {
                // TODO: avoid allocate every time
                mCancellationKeyPhraseDetectionFuture = mScheduledExecutorService.schedule(
                                () -> HotwordMetricsLogger
                                        .writeKeyphraseTriggerEvent(mDetectorType,
                                        HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__DETECT_TIMEOUT),
                        () -> HotwordMetricsLogger.writeKeyphraseTriggerEvent(mDetectorType,
                                HOTWORD_DETECTOR_KEYPHRASE_TRIGGERED__RESULT__DETECT_TIMEOUT,
                                mVoiceInteractionServiceUid),
                        VALIDATION_TIMEOUT_MILLIS,
                        TimeUnit.MILLISECONDS);
                service.detectFromDspSource(
@@ -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);
            }
        }
+6 −6
Original line number Diff line number Diff line
@@ -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);
    }

    /**
+1 −1
Original line number Diff line number Diff line
@@ -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,