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

Commit 7db6b977 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add metrics to log performance of different ranker services in ChooserActivity."

parents 7f1e7ef4 2c571891
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
  }