Merge "[SettingsLib] Add a metric for time spending in each Settings page"

This commit is contained in:
Jason Chiu
2019-12-25 08:23:47 +00:00
committed by Android (Google) Code Review
5 changed files with 29 additions and 16 deletions

View File

@@ -40,8 +40,12 @@ public class EventLogWriter implements LogWriter {
}
@Override
public void hidden(Context context, int category) {
MetricsLogger.hidden(context, category);
public void hidden(Context context, int category, int visibleTime) {
final LogMaker logMaker = new LogMaker(category)
.setType(MetricsProto.MetricsEvent.TYPE_CLOSE)
.addTaggedData(MetricsProto.MetricsEvent.FIELD_SETTINGS_PREFERENCE_CHANGE_INT_VALUE,
visibleTime);
MetricsLogger.action(logMaker);
}
@Override

View File

@@ -31,7 +31,7 @@ public interface LogWriter {
/**
* Logs a visibility event when view becomes hidden.
*/
void hidden(Context context, int category);
void hidden(Context context, int category, int visibleTime);
/**
* Logs an user action.

View File

@@ -83,9 +83,15 @@ public class MetricsFeatureProvider {
}
}
public void hidden(Context context, int category) {
/**
* Logs an event when target page is hidden.
*
* @param category the target page id
* @param visibleTime the time spending on target page since being visible
*/
public void hidden(Context context, int category, int visibleTime) {
for (LogWriter writer : mLoggerWriters) {
writer.hidden(context, category);
writer.hidden(context, category, visibleTime);
}
}

View File

@@ -40,7 +40,8 @@ public class VisibilityLoggerMixin implements LifecycleObserver, OnAttach {
private MetricsFeatureProvider mMetricsFeature;
private int mSourceMetricsCategory = MetricsProto.MetricsEvent.VIEW_UNKNOWN;
private long mTimestamp;
private long mCreationTimestamp;
private long mVisibleTimestamp;
public VisibilityLoggerMixin(int metricsCategory, MetricsFeatureProvider metricsFeature) {
mMetricsCategory = metricsCategory;
@@ -49,7 +50,7 @@ public class VisibilityLoggerMixin implements LifecycleObserver, OnAttach {
@Override
public void onAttach() {
mTimestamp = SystemClock.elapsedRealtime();
mCreationTimestamp = SystemClock.elapsedRealtime();
}
@OnLifecycleEvent(Event.ON_RESUME)
@@ -57,8 +58,9 @@ public class VisibilityLoggerMixin implements LifecycleObserver, OnAttach {
if (mMetricsFeature == null || mMetricsCategory == METRICS_CATEGORY_UNKNOWN) {
return;
}
if (mTimestamp != 0L) {
final int elapse = (int) (SystemClock.elapsedRealtime() - mTimestamp);
mVisibleTimestamp = SystemClock.elapsedRealtime();
if (mCreationTimestamp != 0L) {
final int elapse = (int) (mVisibleTimestamp - mCreationTimestamp);
mMetricsFeature.visible(null /* context */, mSourceMetricsCategory,
mMetricsCategory, elapse);
} else {
@@ -69,9 +71,10 @@ public class VisibilityLoggerMixin implements LifecycleObserver, OnAttach {
@OnLifecycleEvent(Event.ON_PAUSE)
public void onPause() {
mTimestamp = 0;
mCreationTimestamp = 0;
if (mMetricsFeature != null && mMetricsCategory != METRICS_CATEGORY_UNKNOWN) {
mMetricsFeature.hidden(null /* context */, mMetricsCategory);
final int elapse = (int) (SystemClock.elapsedRealtime() - mVisibleTimestamp);
mMetricsFeature.hidden(null /* context */, mMetricsCategory, elapse);
}
}
@@ -84,7 +87,7 @@ public class VisibilityLoggerMixin implements LifecycleObserver, OnAttach {
if (mMetricsFeature == null || mMetricsCategory == METRICS_CATEGORY_UNKNOWN) {
return;
}
final int elapse = (int) (SystemClock.elapsedRealtime() - mTimestamp);
final int elapse = (int) (SystemClock.elapsedRealtime() - mCreationTimestamp);
mMetricsFeature.action(METRICS_CATEGORY_UNKNOWN, action, mMetricsCategory, key, elapse);
}

View File

@@ -88,7 +88,7 @@ public class VisibilityLoggerMixinTest {
mMixin.onPause();
verify(mMetricsFeature, times(1))
.hidden(nullable(Context.class), eq(TestInstrumentable.TEST_METRIC));
.hidden(nullable(Context.class), eq(TestInstrumentable.TEST_METRIC), anyInt());
}
@Test
@@ -98,7 +98,7 @@ public class VisibilityLoggerMixinTest {
mMixin.onPause();
verify(mMetricsFeature, never())
.hidden(nullable(Context.class), anyInt());
.hidden(nullable(Context.class), anyInt(), anyInt());
}
@Test
@@ -109,7 +109,7 @@ public class VisibilityLoggerMixinTest {
mMixin.onPause();
verify(mMetricsFeature, never())
.hidden(nullable(Context.class), anyInt());
.hidden(nullable(Context.class), anyInt(), anyInt());
}
@Test
@@ -121,7 +121,7 @@ public class VisibilityLoggerMixinTest {
verify(testActivity.mMetricsFeatureProvider, times(1)).visible(any(), anyInt(), anyInt(),
anyInt());
ac.pause().stop().destroy();
verify(testActivity.mMetricsFeatureProvider, times(1)).hidden(any(), anyInt());
verify(testActivity.mMetricsFeatureProvider, times(1)).hidden(any(), anyInt(), anyInt());
}
public static class TestActivity extends FragmentActivity {