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

Commit edd7b274 authored by Haoran Zhang's avatar Haoran Zhang Committed by Automerger Merge Worker
Browse files

Merge "Session Memory Leak - Weak Ref in FieldClassificationRequest" into udc-dev am: 9bc348cf

parents 840ad3be 9bc348cf
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@ import com.android.internal.util.ArrayUtils;
import com.android.server.utils.Slogf;

import java.io.PrintWriter;
import java.lang.ref.WeakReference;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Arrays;
@@ -319,6 +320,13 @@ public final class Helper {
        return context.createDisplayContext(display);
    }

    static <T> @Nullable T weakDeref(WeakReference<T> weakRef, String tag, String prefix) {
        T deref = weakRef.get();
        if (deref == null) {
            Slog.wtf(tag, prefix + "fail to deref " + weakRef);
        }
        return deref;
    }

    private interface ViewNodeFilter {
        boolean matches(ViewNode node);
+22 −1
Original line number Diff line number Diff line
@@ -44,6 +44,8 @@ import android.util.Slog;
import com.android.internal.infra.AbstractRemoteService;
import com.android.internal.infra.ServiceConnector;

import java.lang.ref.WeakReference;

/**
 * Class responsible for connection with the Remote {@link FieldClassificationService}.
 * This class is instantiated when {@link AutofillManagerServiceImpl} is established.
@@ -133,7 +135,8 @@ final class RemoteFieldClassificationService
    }

    public void onFieldClassificationRequest(@NonNull FieldClassificationRequest request,
            FieldClassificationServiceCallbacks fieldClassificationServiceCallbacks) {
            WeakReference<FieldClassificationServiceCallbacks>
                fieldClassificationServiceCallbacksWeakRef) {
        final long startTime = SystemClock.elapsedRealtime();
        if (sVerbose) {
            Slog.v(TAG, "onFieldClassificationRequest request:" + request);
@@ -170,6 +173,15 @@ final class RemoteFieldClassificationService
                                                Slog.d(TAG, "onSuccess " + msg);
                                            }
                                        }
                                        FieldClassificationServiceCallbacks
                                                fieldClassificationServiceCallbacks =
                                                        Helper.weakDeref(
                                                                fieldClassificationServiceCallbacksWeakRef,
                                                                TAG, "onSuccess "
                                                        );
                                        if (fieldClassificationServiceCallbacks == null) {
                                            return;
                                        }
                                        fieldClassificationServiceCallbacks
                                                .onClassificationRequestSuccess(response);
                                    }
@@ -180,6 +192,15 @@ final class RemoteFieldClassificationService
                                        if (sDebug) {
                                            Slog.d(TAG, "onFailure");
                                        }
                                        FieldClassificationServiceCallbacks
                                                fieldClassificationServiceCallbacks =
                                                        Helper.weakDeref(
                                                                fieldClassificationServiceCallbacksWeakRef,
                                                                TAG, "onFailure "
                                                        );
                                        if (fieldClassificationServiceCallbacks == null) {
                                            return;
                                        }
                                        fieldClassificationServiceCallbacks
                                                .onClassificationRequestFailure(0, null);
                                    }
+5 −1
Original line number Diff line number Diff line
@@ -850,8 +850,12 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
            RemoteFieldClassificationService remoteFieldClassificationService =
                    mService.getRemoteFieldClassificationServiceLocked();
            if (remoteFieldClassificationService != null) {
                WeakReference<RemoteFieldClassificationService.FieldClassificationServiceCallbacks>
                        fieldClassificationServiceCallbacksWeakRef =
                                new WeakReference<>(Session.this);
                remoteFieldClassificationService.onFieldClassificationRequest(
                        mClassificationState.mPendingFieldClassificationRequest, Session.this);
                        mClassificationState.mPendingFieldClassificationRequest,
                                fieldClassificationServiceCallbacksWeakRef);
            }
            mClassificationState.onFieldClassificationRequestSent();
        }