From 563bb5a3be0e9d93df143273f572204cfdcccbca Mon Sep 17 00:00:00 2001 From: zachh Date: Fri, 2 Mar 2018 17:48:19 -0800 Subject: Added impression logging for AnnotatedCallLog rebuild operations. Bug: 70989667 Test: unit PiperOrigin-RevId: 187694255 Change-Id: Ie6ec70a70a4c59cbdfe25c34003d21fa2f751564 --- .../calllog/RefreshAnnotatedCallLogReceiver.java | 54 +++++++++++++++++++--- 1 file changed, 47 insertions(+), 7 deletions(-) (limited to 'java/com/android/dialer/calllog') diff --git a/java/com/android/dialer/calllog/RefreshAnnotatedCallLogReceiver.java b/java/com/android/dialer/calllog/RefreshAnnotatedCallLogReceiver.java index 3019f5e3a..4a7ce0bac 100644 --- a/java/com/android/dialer/calllog/RefreshAnnotatedCallLogReceiver.java +++ b/java/com/android/dialer/calllog/RefreshAnnotatedCallLogReceiver.java @@ -24,12 +24,15 @@ import android.support.annotation.Nullable; import com.android.dialer.calllog.RefreshAnnotatedCallLogWorker.RefreshResult; import com.android.dialer.calllog.constants.IntentNames; import com.android.dialer.common.LogUtil; -import com.android.dialer.common.concurrent.DefaultFutureCallback; import com.android.dialer.common.concurrent.ThreadUtil; +import com.android.dialer.logging.DialerImpression; +import com.android.dialer.logging.Logger; +import com.android.dialer.logging.LoggingBindings; import com.android.dialer.metrics.FutureTimer; import com.android.dialer.metrics.Metrics; import com.android.dialer.metrics.MetricsComponent; import com.google.common.base.Function; +import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.MoreExecutors; @@ -49,6 +52,7 @@ public final class RefreshAnnotatedCallLogReceiver extends BroadcastReceiver { private final RefreshAnnotatedCallLogWorker refreshAnnotatedCallLogWorker; private final FutureTimer futureTimer; + private final LoggingBindings logger; @Nullable private Runnable refreshAnnotatedCallLogRunnable; @@ -64,6 +68,7 @@ public final class RefreshAnnotatedCallLogReceiver extends BroadcastReceiver { refreshAnnotatedCallLogWorker = CallLogComponent.get(context).getRefreshAnnotatedCallLogWorker(); futureTimer = MetricsComponent.get(context).futureTimer(); + logger = Logger.get(context); } @Override @@ -109,9 +114,24 @@ public final class RefreshAnnotatedCallLogReceiver extends BroadcastReceiver { ? refreshAnnotatedCallLogWorker.refreshWithDirtyCheck() : refreshAnnotatedCallLogWorker.refreshWithoutDirtyCheck(); Futures.addCallback( - future, new DefaultFutureCallback<>(), MoreExecutors.directExecutor()); + future, + new FutureCallback() { + @Override + public void onSuccess(RefreshResult refreshResult) { + logger.logImpression(getImpressionType(checkDirty, refreshResult)); + } + + @Override + public void onFailure(Throwable throwable) { + ThreadUtil.getUiThreadHandler() + .post( + () -> { + throw new RuntimeException(throwable); + }); + } + }, + MoreExecutors.directExecutor()); futureTimer.applyTiming(future, new EventNameFromResultFunction(checkDirty)); - // TODO(zachh): Should also log impression counts of RefreshResults. }; ThreadUtil.getUiThreadHandler() @@ -140,16 +160,36 @@ public final class RefreshAnnotatedCallLogReceiver extends BroadcastReceiver { public String apply(RefreshResult refreshResult) { switch (refreshResult) { case NOT_DIRTY: - return Metrics.REFRESH_NOT_DIRTY; // NOT_DIRTY implies forceRefresh is false + return Metrics.ANNOTATED_CALL_LOG_NOT_DIRTY; // NOT_DIRTY implies forceRefresh is false case REBUILT_BUT_NO_CHANGES_NEEDED: return checkDirty - ? Metrics.REFRESH_NO_CHANGES_NEEDED - : Metrics.FORCE_REFRESH_NO_CHANGES_NEEDED; + ? Metrics.ANNOTATED_LOG_NO_CHANGES_NEEDED + : Metrics.NEW_CALL_LOG_FORCE_REFRESH_NO_CHANGES_NEEDED; case REBUILT_AND_CHANGES_NEEDED: - return checkDirty ? Metrics.REFRESH_CHANGES_NEEDED : Metrics.FORCE_REFRESH_CHANGES_NEEDED; + return checkDirty + ? Metrics.ANNOTATED_CALL_LOG_CHANGES_NEEDED + : Metrics.ANNOTATED_CALL_LOG_FORCE_REFRESH_CHANGES_NEEDED; default: throw new IllegalStateException("Unsupported result: " + refreshResult); } } } + + private static DialerImpression.Type getImpressionType( + boolean checkDirty, RefreshResult refreshResult) { + switch (refreshResult) { + case NOT_DIRTY: + return DialerImpression.Type.ANNOTATED_CALL_LOG_NOT_DIRTY; + case REBUILT_BUT_NO_CHANGES_NEEDED: + return checkDirty + ? DialerImpression.Type.ANNOTATED_CALL_LOG_NO_CHANGES_NEEDED + : DialerImpression.Type.ANNOTATED_CALL_LOG_FORCE_REFRESH_NO_CHANGES_NEEDED; + case REBUILT_AND_CHANGES_NEEDED: + return checkDirty + ? DialerImpression.Type.ANNOTATED_CALL_LOG_CHANGES_NEEDED + : DialerImpression.Type.ANNOTATED_CALL_LOG_FORCE_REFRESH_CHANGES_NEEDED; + default: + throw new IllegalStateException("Unsupported result: " + refreshResult); + } + } } -- cgit v1.2.3