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

Commit 0b7c2c41 authored by Joanne Chung's avatar Joanne Chung
Browse files

Log the error of TCS, TCMS and SysTC.

TextClassifierService passes the error message to onFailure() when it fails
to process the task. But the error message was dropped at TextClassifierService
right away which makes debugging hard. Log the error at the place where the
error happens to help debugging.

Bug: 139114128
Test: Manual. Use DefaultTCService to pass error message and make sure
the error log is printed.

Change-Id: I7c848a6e96db85d6e5b4f90ee9677dfe5b703149
parent 3cd1e48e
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -460,6 +460,7 @@ public abstract class TextClassifierService extends Service {
                return;
            }
            try {
                Slog.w(LOG_TAG, "Request fail: " + error);
                callback.onFailure();
            } catch (RemoteException e) {
                Slog.d(LOG_TAG, "Error calling callback");
+1 −1
Original line number Diff line number Diff line
@@ -309,7 +309,7 @@ public final class SystemTextClassifier implements TextClassifier {
        }

        public void onFailure() {
            Log.e(LOG_TAG, "Request failed.", null);
            Log.e(LOG_TAG, "Request failed at " + mName, null);
            mLatch.countDown();
        }

+23 −12
Original line number Diff line number Diff line
@@ -142,11 +142,12 @@ public final class TextClassificationManagerService extends ITextClassifierServi
        synchronized (mLock) {
            UserState userState = getUserStateLocked(userId);
            if (!userState.bindLocked()) {
                Slog.d(LOG_TAG, "Unable to bind TextClassifierService at suggestSelection.");
                callback.onFailure();
            } else if (userState.isBoundLocked()) {
                userState.mService.onSuggestSelection(sessionId, request, callback);
            } else {
                userState.mPendingRequests.add(new PendingRequest(
                userState.mPendingRequests.add(new PendingRequest("suggestSelection",
                        () -> onSuggestSelection(sessionId, request, callback),
                        callback::onFailure, callback.asBinder(), this, userState));
            }
@@ -166,11 +167,12 @@ public final class TextClassificationManagerService extends ITextClassifierServi
        synchronized (mLock) {
            UserState userState = getUserStateLocked(userId);
            if (!userState.bindLocked()) {
                Slog.d(LOG_TAG, "Unable to bind TextClassifierService at classifyText.");
                callback.onFailure();
            } else if (userState.isBoundLocked()) {
                userState.mService.onClassifyText(sessionId, request, callback);
            } else {
                userState.mPendingRequests.add(new PendingRequest(
                userState.mPendingRequests.add(new PendingRequest("classifyText",
                        () -> onClassifyText(sessionId, request, callback),
                        callback::onFailure, callback.asBinder(), this, userState));
            }
@@ -190,11 +192,12 @@ public final class TextClassificationManagerService extends ITextClassifierServi
        synchronized (mLock) {
            UserState userState = getUserStateLocked(userId);
            if (!userState.bindLocked()) {
                Slog.d(LOG_TAG, "Unable to bind TextClassifierService at generateLinks.");
                callback.onFailure();
            } else if (userState.isBoundLocked()) {
                userState.mService.onGenerateLinks(sessionId, request, callback);
            } else {
                userState.mPendingRequests.add(new PendingRequest(
                userState.mPendingRequests.add(new PendingRequest("generateLinks",
                        () -> onGenerateLinks(sessionId, request, callback),
                        callback::onFailure, callback.asBinder(), this, userState));
            }
@@ -214,7 +217,7 @@ public final class TextClassificationManagerService extends ITextClassifierServi
            if (userState.isBoundLocked()) {
                userState.mService.onSelectionEvent(sessionId, event);
            } else {
                userState.mPendingRequests.add(new PendingRequest(
                userState.mPendingRequests.add(new PendingRequest("selectionEvent",
                        () -> onSelectionEvent(sessionId, event),
                        null /* onServiceFailure */, null /* binder */, this, userState));
            }
@@ -238,7 +241,7 @@ public final class TextClassificationManagerService extends ITextClassifierServi
            if (userState.isBoundLocked()) {
                userState.mService.onTextClassifierEvent(sessionId, event);
            } else {
                userState.mPendingRequests.add(new PendingRequest(
                userState.mPendingRequests.add(new PendingRequest("textClassifierEvent",
                        () -> onTextClassifierEvent(sessionId, event),
                        null /* onServiceFailure */, null /* binder */, this, userState));
            }
@@ -258,11 +261,12 @@ public final class TextClassificationManagerService extends ITextClassifierServi
        synchronized (mLock) {
            UserState userState = getUserStateLocked(userId);
            if (!userState.bindLocked()) {
                Slog.d(LOG_TAG, "Unable to bind TextClassifierService at detectLanguage.");
                callback.onFailure();
            } else if (userState.isBoundLocked()) {
                userState.mService.onDetectLanguage(sessionId, request, callback);
            } else {
                userState.mPendingRequests.add(new PendingRequest(
                userState.mPendingRequests.add(new PendingRequest("detectLanguage",
                        () -> onDetectLanguage(sessionId, request, callback),
                        callback::onFailure, callback.asBinder(), this, userState));
            }
@@ -282,11 +286,13 @@ public final class TextClassificationManagerService extends ITextClassifierServi
        synchronized (mLock) {
            UserState userState = getUserStateLocked(userId);
            if (!userState.bindLocked()) {
                Slog.d(LOG_TAG,
                        "Unable to bind TextClassifierService at suggestConversationActions.");
                callback.onFailure();
            } else if (userState.isBoundLocked()) {
                userState.mService.onSuggestConversationActions(sessionId, request, callback);
            } else {
                userState.mPendingRequests.add(new PendingRequest(
                userState.mPendingRequests.add(new PendingRequest("suggestConversationActions",
                        () -> onSuggestConversationActions(sessionId, request, callback),
                        callback::onFailure, callback.asBinder(), this, userState));
            }
@@ -309,7 +315,7 @@ public final class TextClassificationManagerService extends ITextClassifierServi
                        classificationContext, sessionId);
                mSessionUserIds.put(sessionId, userId);
            } else {
                userState.mPendingRequests.add(new PendingRequest(
                userState.mPendingRequests.add(new PendingRequest("createTextClassificationSession",
                        () -> onCreateTextClassificationSession(classificationContext, sessionId),
                        null /* onServiceFailure */, null /* binder */, this, userState));
            }
@@ -332,7 +338,8 @@ public final class TextClassificationManagerService extends ITextClassifierServi
                userState.mService.onDestroyTextClassificationSession(sessionId);
                mSessionUserIds.remove(sessionId);
            } else {
                userState.mPendingRequests.add(new PendingRequest(
                userState.mPendingRequests.add(
                        new PendingRequest("destroyTextClassificationSession",
                                () -> onDestroyTextClassificationSession(sessionId),
                                null /* onServiceFailure */, null /* binder */, this, userState));
            }
@@ -379,6 +386,7 @@ public final class TextClassificationManagerService extends ITextClassifierServi

    private static final class PendingRequest implements IBinder.DeathRecipient {

        @Nullable private final String mName;
        @Nullable private final IBinder mBinder;
        @NonNull private final Runnable mRequest;
        @Nullable private final Runnable mOnServiceFailure;
@@ -394,11 +402,12 @@ public final class TextClassificationManagerService extends ITextClassifierServi
         * @param service
         * @param owningUser
         */
        PendingRequest(
        PendingRequest(@Nullable String name,
                @NonNull ThrowingRunnable request, @Nullable ThrowingRunnable onServiceFailure,
                @Nullable IBinder binder,
                TextClassificationManagerService service,
                UserState owningUser) {
            mName = name;
            mRequest =
                    logOnFailure(Preconditions.checkNotNull(request), "handling pending request");
            mOnServiceFailure =
@@ -499,6 +508,8 @@ public final class TextClassificationManagerService extends ITextClassifierServi
                    request.mRequest.run();
                } else {
                    if (request.mOnServiceFailure != null) {
                        Slog.d(LOG_TAG, "Unable to bind TextClassifierService for PendingRequest "
                                + request.mName);
                        request.mOnServiceFailure.run();
                    }
                }