Merge "[SettingsLib] Add a metric for time spending in each Settings page"
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user