Log latency and timeout occurrence for contextual cards.

Fixes: 124492762
Test: rebuild
Change-Id: I552adf7e6d76e8576a790e83792d067ed5716dc2
This commit is contained in:
Yi-Ling Chuang
2019-03-06 14:38:23 +08:00
parent f669a3bd70
commit 620d6aeccb
3 changed files with 44 additions and 4 deletions

View File

@@ -187,7 +187,6 @@ public class ContextualCardLoader extends AsyncLoaderCompat<List<ContextualCard>
// Collect future and eligible cards // Collect future and eligible cards
for (Future<ContextualCard> cardFuture : eligibleCards) { for (Future<ContextualCard> cardFuture : eligibleCards) {
try { try {
//TODO(b/124492762): Log latency and timeout occurrence.
final ContextualCard card = cardFuture.get(ELIGIBILITY_CHECKER_TIMEOUT_MS, final ContextualCard card = cardFuture.get(ELIGIBILITY_CHECKER_TIMEOUT_MS,
TimeUnit.MILLISECONDS); TimeUnit.MILLISECONDS);
if (card != null) { if (card != null) {

View File

@@ -22,6 +22,7 @@ import static com.android.settings.intelligence.ContextualCardProto.ContextualCa
import static java.util.stream.Collectors.groupingBy; import static java.util.stream.Collectors.groupingBy;
import android.app.settings.SettingsEnums;
import android.content.Context; import android.content.Context;
import android.os.Bundle; import android.os.Bundle;
import android.provider.Settings; 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.homepage.contextualcards.slices.SliceContextualCardRenderer;
import com.android.settings.overlay.FeatureFactory; 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.Lifecycle;
import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnSaveInstanceState; import com.android.settingslib.core.lifecycle.events.OnSaveInstanceState;
@@ -195,8 +197,8 @@ public class ContextualCardManager implements ContextualCardLoader.CardContentLo
@Override @Override
public void onFinishCardLoading(List<ContextualCard> cards) { public void onFinishCardLoading(List<ContextualCard> cards) {
final long loadTime = System.currentTimeMillis() - mStartTime; 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); Log.d(TAG, "Total loading time = " + loadTime);
final List<ContextualCard> cardsToKeep = getCardsToKeep(cards); final List<ContextualCard> cardsToKeep = getCardsToKeep(cards);
//navigate back to the homepage, screen rotate or after card dismissal //navigate back to the homepage, screen rotate or after card dismissal
@@ -206,15 +208,25 @@ public class ContextualCardManager implements ContextualCardLoader.CardContentLo
return; return;
} }
//only log homepage display upon a fresh launch final MetricsFeatureProvider metricsFeatureProvider =
FeatureFactory.getFactory(mContext).getMetricsFeatureProvider();
final long timeoutLimit = getCardLoaderTimeout(mContext); final long timeoutLimit = getCardLoaderTimeout(mContext);
if (loadTime <= timeoutLimit) { if (loadTime <= timeoutLimit) {
onContextualCardUpdated(cards.stream() onContextualCardUpdated(cards.stream()
.collect(groupingBy(ContextualCard::getCardType))); .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; final long totalTime = System.currentTimeMillis() - mStartTime;
FeatureFactory.getFactory(mContext).getContextualCardFeatureProvider(mContext) FeatureFactory.getFactory(mContext).getContextualCardFeatureProvider(mContext)
.logHomepageDisplay(totalTime); .logHomepageDisplay(totalTime);
metricsFeatureProvider.action(mContext,
SettingsEnums.ACTION_CONTEXTUAL_HOME_SHOW, (int) totalTime);
mIsFirstLaunch = false; mIsFirstLaunch = false;
} }

View File

@@ -18,6 +18,7 @@ package com.android.settings.homepage.contextualcards;
import static android.app.slice.Slice.HINT_ERROR; import static android.app.slice.Slice.HINT_ERROR;
import android.app.settings.SettingsEnums;
import android.content.ContentResolver; import android.content.ContentResolver;
import android.content.Context; import android.content.Context;
import android.net.Uri; import android.net.Uri;
@@ -27,6 +28,9 @@ import androidx.annotation.VisibleForTesting;
import androidx.slice.Slice; import androidx.slice.Slice;
import androidx.slice.SliceViewManager; 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.Callable;
import java.util.concurrent.CountDownLatch; import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@@ -46,7 +50,32 @@ public class EligibleCardChecker implements Callable<ContextualCard> {
@Override @Override
public ContextualCard call() throws Exception { 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 @VisibleForTesting