Commit 00e32133 authored by Tanmoy Mollik's avatar Tanmoy Mollik Committed by Chromium LUCI CQ

[Android] Add a histogram to record number of android accounts on device

Adds a histogram that records number of android accounts present on
device even if the user isn't signed in.

Bug: 1025410
Change-Id: Ide66597ea3da5857e6f7ccd5bec018b54ebc03e6
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2607306Reviewed-by: default avatarAlex Ilin <alexilin@chromium.org>
Reviewed-by: default avatarBoris Sazonov <bsazonov@chromium.org>
Reviewed-by: default avatarAlice Wang <aliceywang@chromium.org>
Commit-Queue: Tanmoy Mollik <triploblastic@chromium.org>
Cr-Commit-Position: refs/heads/master@{#840676}
parent f341fdf0
......@@ -448,6 +448,10 @@ public class AccountManagerFacadeImpl implements AccountManagerFacade {
@Override
protected void onPostExecute(Void v) {
// Records number of Android accounts present on device.
RecordHistogram.recordExactLinearHistogram(
"Signin.AndroidNumberOfDeviceAccounts", tryGetGoogleAccounts().size(), 50);
for (Runnable callback : mCallbacksWaitingForCachePopulation) {
callback.run();
}
......
......@@ -7,6 +7,7 @@ package org.chromium.components.signin.test;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.MockitoAnnotations.initMocks;
import static org.robolectric.Shadows.shadowOf;
import android.accounts.Account;
......@@ -23,11 +24,15 @@ import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import org.chromium.base.metrics.UmaRecorder;
import org.chromium.base.metrics.UmaRecorderHolder;
import org.chromium.base.task.test.CustomShadowAsyncTask;
import org.chromium.base.test.BaseRobolectricTestRunner;
import org.chromium.base.test.util.CallbackHelper;
import org.chromium.components.signin.AccountManagerDelegateException;
import org.chromium.components.signin.AccountManagerFacade;
import org.chromium.components.signin.AccountManagerFacadeImpl;
......@@ -39,6 +44,7 @@ import org.chromium.components.signin.test.util.FakeAccountManagerDelegate;
import org.chromium.testing.local.CustomShadowUserManager;
import java.util.List;
import java.util.concurrent.TimeoutException;
import java.util.concurrent.atomic.AtomicInteger;
/**
......@@ -52,8 +58,13 @@ public class AccountManagerFacadeRobolectricTest {
private FakeAccountManagerDelegate mDelegate;
private AccountManagerFacade mFacade;
@Mock
private UmaRecorder mUmaRecorderMock;
@Before
public void setUp() {
initMocks(this);
UmaRecorderHolder.setNonNativeDelegate(mUmaRecorderMock);
Context context = RuntimeEnvironment.application;
UserManager userManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
mShadowUserManager = (CustomShadowUserManager) shadowOf(userManager);
......@@ -87,6 +98,22 @@ public class AccountManagerFacadeRobolectricTest {
verify(delegate).registerObservers();
}
@Test
@SmallTest
public void testCountOfAccountLoggedAfterAccountsFetched() {
addTestAccount("test@gmail.com");
AccountManagerFacade facade = new AccountManagerFacadeImpl(mDelegate);
CallbackHelper callbackHelper = new CallbackHelper();
facade.runAfterCacheIsPopulated(() -> callbackHelper.notifyCalled());
try {
callbackHelper.waitForFirst();
} catch (TimeoutException e) {
throw new RuntimeException("Timed out waiting for callback", e);
}
verify(mUmaRecorderMock)
.recordLinearHistogram("Signin.AndroidNumberOfDeviceAccounts", 1, 1, 50, 51);
}
@Test
@SmallTest
public void testCanonicalAccount() {
......
......@@ -173,6 +173,15 @@ prefs when the profile is loaded. -->
</summary>
</histogram>
<histogram name="Signin.AndroidNumberOfDeviceAccounts" units="accounts"
expires_after="2021-08-31">
<owner>triploblastic@chromium.org</owner>
<owner>aliceywang@chromium.org</owner>
<summary>
The number of Android accounts present on the device. Recorded on startup.
</summary>
</histogram>
<histogram name="Signin.AndroidPopulateAccountCacheWaitingTime" units="ms"
expires_after="2021-08-16">
<owner>bsazonov@chromium.org</owner>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment