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

Commit 2c571891 authored by Kang Li's avatar Kang Li
Browse files

Add metrics to log performance of different ranker services in

ChooserActivity.

bug: 63353389

Test: tested by GmsCore debug logs.

Change-Id: Iacfef00531953344af190d3bd381c0ea38c37fe2
parent cd2d38d6
Loading
Loading
Loading
Loading
+33 −2
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.ResolveInfo;
import android.content.SharedPreferences;
import android.content.ServiceConnection;
import android.metrics.LogMaker;
import android.os.Environment;
import android.os.Handler;
import android.os.IBinder;
@@ -46,6 +47,8 @@ import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.Log;
import com.android.internal.app.ResolverActivity.ResolvedComponentInfo;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;

import java.io.File;
import java.lang.InterruptedException;
@@ -99,6 +102,8 @@ class ResolverComparator implements Comparator<ResolvedComponentInfo> {
    private String mContentType;
    private String[] mAnnotations;
    private String mAction;
    private ComponentName mResolvedRankerName;
    private ComponentName mRankerServiceName;
    private IResolverRankerService mRanker;
    private ResolverRankerServiceConnection mConnection;
    private AfterCompute mAfterCompute;
@@ -119,9 +124,17 @@ class ResolverComparator implements Comparator<ResolvedComponentInfo> {
                            if (receivedTargets != null && mTargets != null
                                    && receivedTargets.size() == mTargets.size()) {
                                final int size = mTargets.size();
                                boolean isUpdated = false;
                                for (int i = 0; i < size; ++i) {
                                    mTargets.get(i).setSelectProbability(
                                            receivedTargets.get(i).getSelectProbability());
                                    final float predictedProb =
                                            receivedTargets.get(i).getSelectProbability();
                                    if (predictedProb != mTargets.get(i).getSelectProbability()) {
                                        mTargets.get(i).setSelectProbability(predictedProb);
                                        isUpdated = true;
                                    }
                                }
                                if (isUpdated) {
                                    mRankerServiceName = mResolvedRankerName;
                                }
                            } else {
                                Log.e(TAG, "Sizes of sent and received ResolverTargets diff.");
@@ -170,6 +183,7 @@ class ResolverComparator implements Comparator<ResolvedComponentInfo> {
        mContentType = intent.getType();
        getContentAnnotations(intent);
        mAction = intent.getAction();
        mRankerServiceName = new ComponentName(mContext, this.getClass());
    }

    // get annotations of content from intent.
@@ -361,6 +375,7 @@ class ResolverComparator implements Comparator<ResolvedComponentInfo> {
                try {
                    int selectedPos = new ArrayList<ComponentName>(mTargetsDict.keySet())
                            .indexOf(componentName);
                    logMetrics(selectedPos);
                    if (selectedPos > 0) {
                        mRanker.train(mTargets, selectedPos);
                    } else {
@@ -392,6 +407,19 @@ class ResolverComparator implements Comparator<ResolvedComponentInfo> {
        }
    }

    // records metrics for evaluation.
    private void logMetrics(int selectedPos) {
        if (mRankerServiceName != null) {
            MetricsLogger metricsLogger = new MetricsLogger();
            LogMaker log = new LogMaker(MetricsEvent.ACTION_TARGET_SELECTED);
            log.setComponentName(mRankerServiceName);
            int isCategoryUsed = (mAnnotations == null) ? 0 : 1;
            log.addTaggedData(MetricsEvent.FIELD_IS_CATEGORY_USED, isCategoryUsed);
            log.addTaggedData(MetricsEvent.FIELD_RANKED_POSITION, selectedPos);
            metricsLogger.write(log);
        }
    }

    // connect to a ranking service.
    private void initRanker(Context context) {
        synchronized (mLock) {
@@ -454,6 +482,7 @@ class ResolverComparator implements Comparator<ResolvedComponentInfo> {
            if (DEBUG) {
                Log.d(TAG, "Succeeded to retrieve a ranker: " + componentName);
            }
            mResolvedRankerName = componentName;
            intent.setComponent(componentName);
            return intent;
        }
@@ -523,6 +552,8 @@ class ResolverComparator implements Comparator<ResolvedComponentInfo> {
    private void reset() {
        mTargetsDict.clear();
        mTargets = null;
        mRankerServiceName = new ComponentName(mContext, this.getClass());
        mResolvedRankerName = null;
        startWatchDog(WATCHDOG_TIMEOUT_MILLIS);
        initRanker(mContext);
    }
+16 −0
Original line number Diff line number Diff line
@@ -4218,6 +4218,22 @@ message MetricsEvent {
    // OS: O MR
    ACTION_SETTINGS_SMS_MIRRORING = 1084;

    // ACTION: Chooser picked a ranked target.
    // CATEGORY: GLOBAL_SYSTEM_UI
    // OS: O MR
    ACTION_TARGET_SELECTED = 1085;

    // FIELD - is category used in Chooser: 1.
    // Type: int encoded boolean
    // CATEGORY: GLOBAL_SYSTEM_UI
    // OS: O MR
    FIELD_IS_CATEGORY_USED = 1086;

    // FIELD - ranked position of selected target for Chooser.
    // CATEGORY: GLOBAL_SYSTEM_UI
    // OS: O MR
    FIELD_RANKED_POSITION = 1087;

    // Add new aosp constants above this line.
    // END OF AOSP CONSTANTS
  }