From 620d6aeccb20994da2fe43149aa3e005f4d2ba26 Mon Sep 17 00:00:00 2001 From: Yi-Ling Chuang Date: Wed, 6 Mar 2019 14:38:23 +0800 Subject: [PATCH] Log latency and timeout occurrence for contextual cards. Fixes: 124492762 Test: rebuild Change-Id: I552adf7e6d76e8576a790e83792d067ed5716dc2 --- .../contextualcards/ContextualCardLoader.java | 1 - .../ContextualCardManager.java | 16 ++++++++-- .../contextualcards/EligibleCardChecker.java | 31 ++++++++++++++++++- 3 files changed, 44 insertions(+), 4 deletions(-) diff --git a/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java b/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java index ff2ee91468e..1f5f7dd5694 100644 --- a/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java +++ b/src/com/android/settings/homepage/contextualcards/ContextualCardLoader.java @@ -187,7 +187,6 @@ public class ContextualCardLoader extends AsyncLoaderCompat // Collect future and eligible cards for (Future 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) { diff --git a/src/com/android/settings/homepage/contextualcards/ContextualCardManager.java b/src/com/android/settings/homepage/contextualcards/ContextualCardManager.java index 8f7e84acd2f..7df322d5211 100644 --- a/src/com/android/settings/homepage/contextualcards/ContextualCardManager.java +++ b/src/com/android/settings/homepage/contextualcards/ContextualCardManager.java @@ -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 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 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; } diff --git a/src/com/android/settings/homepage/contextualcards/EligibleCardChecker.java b/src/com/android/settings/homepage/contextualcards/EligibleCardChecker.java index fe68d028533..811aaa2fa13 100644 --- a/src/com/android/settings/homepage/contextualcards/EligibleCardChecker.java +++ b/src/com/android/settings/homepage/contextualcards/EligibleCardChecker.java @@ -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 { @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