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

Commit 620d6aec authored by Yi-Ling Chuang's avatar Yi-Ling Chuang
Browse files

Log latency and timeout occurrence for contextual cards.

Fixes: 124492762
Test: rebuild
Change-Id: I552adf7e6d76e8576a790e83792d067ed5716dc2
parent f669a3bd
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -187,7 +187,6 @@ public class ContextualCardLoader extends AsyncLoaderCompat<List<ContextualCard>
        // Collect future and eligible cards
        for (Future<ContextualCard> cardFuture : eligibleCards) {
            try {
                //TODO(b/124492762): Log latency and timeout occurrence.
                final ContextualCard card = cardFuture.get(ELIGIBILITY_CHECKER_TIMEOUT_MS,
                        TimeUnit.MILLISECONDS);
                if (card != null) {
+14 −2
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import static com.android.settings.intelligence.ContextualCardProto.ContextualCa

import static java.util.stream.Collectors.groupingBy;

import android.app.settings.SettingsEnums;
import android.content.Context;
import android.os.Bundle;
import android.provider.Settings;
@@ -38,6 +39,7 @@ import androidx.loader.content.Loader;

import com.android.settings.homepage.contextualcards.slices.SliceContextualCardRenderer;
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnSaveInstanceState;
@@ -195,8 +197,8 @@ public class ContextualCardManager implements ContextualCardLoader.CardContentLo
    @Override
    public void onFinishCardLoading(List<ContextualCard> cards) {
        final long loadTime = System.currentTimeMillis() - mStartTime;
        //TODO(b/123668403): remove the log here once we do the change with FutureTask
        Log.d(TAG, "Total loading time = " + loadTime);

        final List<ContextualCard> cardsToKeep = getCardsToKeep(cards);

        //navigate back to the homepage, screen rotate or after card dismissal
@@ -206,15 +208,25 @@ public class ContextualCardManager implements ContextualCardLoader.CardContentLo
            return;
        }

        //only log homepage display upon a fresh launch
        final MetricsFeatureProvider metricsFeatureProvider =
                FeatureFactory.getFactory(mContext).getMetricsFeatureProvider();
        final long timeoutLimit = getCardLoaderTimeout(mContext);
        if (loadTime <= timeoutLimit) {
            onContextualCardUpdated(cards.stream()
                    .collect(groupingBy(ContextualCard::getCardType)));
        } else {
            // log timeout occurrence
            metricsFeatureProvider.action(SettingsEnums.PAGE_UNKNOWN,
                    SettingsEnums.ACTION_CONTEXTUAL_CARD_LOAD_TIMEOUT,
                    SettingsEnums.SETTINGS_HOMEPAGE,
                    null /* key */, (int) loadTime /* value */);
        }
        //only log homepage display upon a fresh launch
        final long totalTime = System.currentTimeMillis() - mStartTime;
        FeatureFactory.getFactory(mContext).getContextualCardFeatureProvider(mContext)
                .logHomepageDisplay(totalTime);
        metricsFeatureProvider.action(mContext,
                SettingsEnums.ACTION_CONTEXTUAL_HOME_SHOW, (int) totalTime);

        mIsFirstLaunch = false;
    }
+30 −1
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.settings.homepage.contextualcards;

import static android.app.slice.Slice.HINT_ERROR;

import android.app.settings.SettingsEnums;
import android.content.ContentResolver;
import android.content.Context;
import android.net.Uri;
@@ -27,6 +28,9 @@ import androidx.annotation.VisibleForTesting;
import androidx.slice.Slice;
import androidx.slice.SliceViewManager;

import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;

import java.util.concurrent.Callable;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
@@ -46,7 +50,32 @@ public class EligibleCardChecker implements Callable<ContextualCard> {

    @Override
    public ContextualCard call() throws Exception {
        return isCardEligibleToDisplay(mCard) ? mCard : null;
        final long startTime = System.currentTimeMillis();
        final MetricsFeatureProvider metricsFeatureProvider =
                FeatureFactory.getFactory(mContext).getMetricsFeatureProvider();
        ContextualCard result;

        if (isCardEligibleToDisplay(mCard)) {
            metricsFeatureProvider.action(SettingsEnums.PAGE_UNKNOWN,
                    SettingsEnums.ACTION_CONTEXTUAL_CARD_ELIGIBILITY,
                    SettingsEnums.SETTINGS_HOMEPAGE,
                    mCard.getTextSliceUri() /* key */, 1 /* true */);
            result = mCard;
        } else {
            metricsFeatureProvider.action(SettingsEnums.PAGE_UNKNOWN,
                    SettingsEnums.ACTION_CONTEXTUAL_CARD_ELIGIBILITY,
                    SettingsEnums.SETTINGS_HOMEPAGE,
                    mCard.getTextSliceUri() /* key */, 0 /* false */);
            result = null;
        }
        // Log individual card loading time
        metricsFeatureProvider.action(SettingsEnums.PAGE_UNKNOWN,
                SettingsEnums.ACTION_CONTEXTUAL_CARD_LOAD,
                SettingsEnums.SETTINGS_HOMEPAGE,
                mCard.getTextSliceUri() /* key */,
                (int) (System.currentTimeMillis() - startTime) /* value */);

        return result;
    }

    @VisibleForTesting