Log latency and timeout occurrence for contextual cards.
Fixes: 124492762 Test: rebuild Change-Id: I552adf7e6d76e8576a790e83792d067ed5716dc2
This commit is contained in:
@@ -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) {
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user