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

Commit 8fad04bb authored by Arpan Kaphle's avatar Arpan Kaphle
Browse files

Adding isPrimary to Final Phase Metrics

This captures, for any API flows, if the chosen provider was the primary
provider. It's the first of a few changes that capture these additional
details and smaller API metrics.

Bug: 271135048
Test: Build and Won't Submit without E2E Test
Change-Id: Ib3870fb1f1f0ce870dd05bc1fc3901b5ef9e8200
parent e68cc2f4
Loading
Loading
Loading
Loading
+2 −8
Original line number Diff line number Diff line
@@ -30,8 +30,6 @@ import android.os.RemoteException;
import android.service.credentials.CallingAppInfo;
import android.util.Slog;

import com.android.server.credentials.metrics.ProviderSessionMetric;

import java.util.ArrayList;
import java.util.Set;

@@ -95,12 +93,8 @@ public final class ClearRequestSession extends RequestSession<ClearCredentialSta
    public void onFinalResponseReceived(
            ComponentName componentName,
            Void response) {
        if (mProviders.get(componentName.flattenToString()) != null) {
            ProviderSessionMetric providerSessionMetric =
                    mProviders.get(componentName.flattenToString()).mProviderSessionMetric;
            mRequestSessionMetric.collectChosenMetricViaCandidateTransfer(providerSessionMetric
                    .getCandidatePhasePerProviderMetric());
        }
        mRequestSessionMetric.updateMetricsOnResponseReceived(mProviders, componentName,
                isPrimaryProviderViaProviderInfo(componentName));
        respondToClientWithResponseAndFinish(null);
    }

+2 −7
Original line number Diff line number Diff line
@@ -35,7 +35,6 @@ import android.service.credentials.CallingAppInfo;
import android.service.credentials.PermissionUtils;
import android.util.Slog;

import com.android.server.credentials.metrics.ProviderSessionMetric;
import com.android.server.credentials.metrics.ProviderStatusForMetrics;

import java.util.ArrayList;
@@ -132,12 +131,8 @@ public final class CreateRequestSession extends RequestSession<CreateCredentialR
            @Nullable CreateCredentialResponse response) {
        Slog.i(TAG, "Final credential received from: " + componentName.flattenToString());
        mRequestSessionMetric.collectUiResponseData(/*uiReturned=*/ true, System.nanoTime());
        if (mProviders.get(componentName.flattenToString()) != null) {
            ProviderSessionMetric providerSessionMetric =
                    mProviders.get(componentName.flattenToString()).mProviderSessionMetric;
            mRequestSessionMetric.collectChosenMetricViaCandidateTransfer(providerSessionMetric
                    .getCandidatePhasePerProviderMetric());
        }
        mRequestSessionMetric.updateMetricsOnResponseReceived(mProviders, componentName,
                isPrimaryProviderViaProviderInfo(componentName));
        if (response != null) {
            mRequestSessionMetric.collectChosenProviderStatus(
                    ProviderStatusForMetrics.FINAL_SUCCESS.getMetricCode());
+2 −8
Original line number Diff line number Diff line
@@ -34,7 +34,6 @@ import android.service.credentials.CallingAppInfo;
import android.service.credentials.PermissionUtils;
import android.util.Slog;

import com.android.server.credentials.metrics.ProviderSessionMetric;
import com.android.server.credentials.metrics.ProviderStatusForMetrics;

import java.util.ArrayList;
@@ -134,13 +133,8 @@ public class GetRequestSession extends RequestSession<GetCredentialRequest,
    public void onFinalResponseReceived(ComponentName componentName,
            @Nullable GetCredentialResponse response) {
        Slog.i(TAG, "onFinalResponseReceived from: " + componentName.flattenToString());
        mRequestSessionMetric.collectUiResponseData(/*uiReturned=*/ true, System.nanoTime());
        if (mProviders.get(componentName.flattenToString()) != null) {
            ProviderSessionMetric providerSessionMetric =
                    mProviders.get(componentName.flattenToString()).mProviderSessionMetric;
            mRequestSessionMetric.collectChosenMetricViaCandidateTransfer(providerSessionMetric
                    .getCandidatePhasePerProviderMetric());
        }
        mRequestSessionMetric.updateMetricsOnResponseReceived(mProviders, componentName,
                isPrimaryProviderViaProviderInfo(componentName));
        if (response != null) {
            mRequestSessionMetric.collectChosenProviderStatus(
                    ProviderStatusForMetrics.FINAL_SUCCESS.getMetricCode());
+2 −2
Original line number Diff line number Diff line
@@ -188,7 +188,7 @@ public class MetricUtilities {
                    finalPhaseMetric.getResponseCollective().getUniqueResponseCounts(),
                    /* framework_exception_unique_classtype */
                    finalPhaseMetric.getFrameworkException(),
                    /* primary_indicated */ false
                    /* primary_indicated */ finalPhaseMetric.isPrimary()
            );
        } catch (Exception e) {
            Slog.w(TAG, "Unexpected error during final provider uid emit: " + e);
@@ -565,7 +565,7 @@ public class MetricUtilities {
                    /* clicked_entries */ browsedClickedEntries,
                    /* provider_of_clicked_entry */ browsedProviderUid,
                    /* api_status */ apiStatus,
                    /* primary_indicated */ false
                    /* primary_indicated */ finalPhaseMetric.isPrimary()
            );
        } catch (Exception e) {
            Slog.w(TAG, "Unexpected error during metric logging: " + e);
+12 −0
Original line number Diff line number Diff line
@@ -361,4 +361,16 @@ abstract class RequestSession<T, U, V> implements CredentialManagerUi.Credential
        mRequestSessionMetric.logFailureOrUserCancel(isUserCanceled);
        finishSession(/*propagateCancellation=*/false);
    }

    /**
     * Reveals if a certain provider is primary after ensuring it exists at all in the designated
     * provider info.
     *
     * @param componentName used to identify the provider we want to check primary status for
     */
    protected boolean isPrimaryProviderViaProviderInfo(ComponentName componentName) {
        var chosenProviderSession = mProviders.get(componentName.flattenToString());
        return chosenProviderSession != null && chosenProviderSession.mProviderInfo != null
                && chosenProviderSession.mProviderInfo.isPrimary();
    }
}
Loading