Commit 1c6180f7 authored by David Maunder's avatar David Maunder Committed by Chromium LUCI CQ

Batch TabUmaTest

Speedup: 14397ms -> 5191ms (64% improvement)

Bug: 1168647
Change-Id: Idbf3a3e10cd4e4b04e5f34d0d997ca4bd8b05f3b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2640919
Commit-Queue: David Maunder <davidjm@chromium.org>
Reviewed-by: default avatarMichael Thiessen <mthiesse@chromium.org>
Cr-Commit-Position: refs/heads/master@{#845745}
parent 8008bd8e
...@@ -4,13 +4,11 @@ ...@@ -4,13 +4,11 @@
package org.chromium.chrome.browser.tab; package org.chromium.chrome.browser.tab;
import android.support.test.InstrumentationRegistry;
import androidx.test.filters.MediumTest; import androidx.test.filters.MediumTest;
import org.junit.After;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Before; import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Rule; import org.junit.Rule;
import org.junit.Test; import org.junit.Test;
import org.junit.rules.TemporaryFolder; import org.junit.rules.TemporaryFolder;
...@@ -19,6 +17,7 @@ import org.junit.runner.RunWith; ...@@ -19,6 +17,7 @@ import org.junit.runner.RunWith;
import org.chromium.base.StrictModeContext; import org.chromium.base.StrictModeContext;
import org.chromium.base.metrics.RecordHistogram; import org.chromium.base.metrics.RecordHistogram;
import org.chromium.base.supplier.ObservableSupplierImpl; import org.chromium.base.supplier.ObservableSupplierImpl;
import org.chromium.base.test.util.Batch;
import org.chromium.base.test.util.CommandLineFlags; import org.chromium.base.test.util.CommandLineFlags;
import org.chromium.base.test.util.Feature; import org.chromium.base.test.util.Feature;
import org.chromium.base.test.util.MetricsUtils.HistogramDelta; import org.chromium.base.test.util.MetricsUtils.HistogramDelta;
...@@ -28,6 +27,7 @@ import org.chromium.chrome.browser.flags.ChromeSwitches; ...@@ -28,6 +27,7 @@ import org.chromium.chrome.browser.flags.ChromeSwitches;
import org.chromium.chrome.browser.share.ShareDelegate; import org.chromium.chrome.browser.share.ShareDelegate;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
import org.chromium.chrome.test.ChromeTabbedActivityTestRule; import org.chromium.chrome.test.ChromeTabbedActivityTestRule;
import org.chromium.chrome.test.batch.BlankCTATabInitialStateRule;
import org.chromium.chrome.test.util.ChromeTabUtils; import org.chromium.chrome.test.util.ChromeTabUtils;
import org.chromium.components.browser_ui.util.BrowserControlsVisibilityDelegate; import org.chromium.components.browser_ui.util.BrowserControlsVisibilityDelegate;
import org.chromium.content_public.browser.LoadUrlParams; import org.chromium.content_public.browser.LoadUrlParams;
...@@ -46,9 +46,15 @@ import java.util.concurrent.ExecutionException; ...@@ -46,9 +46,15 @@ import java.util.concurrent.ExecutionException;
*/ */
@RunWith(ChromeJUnit4ClassRunner.class) @RunWith(ChromeJUnit4ClassRunner.class)
@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE})
@Batch(Batch.PER_CLASS)
public class TabUmaTest { public class TabUmaTest {
@ClassRule
public static ChromeTabbedActivityTestRule sActivityTestRule =
new ChromeTabbedActivityTestRule();
@Rule @Rule
public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); public BlankCTATabInitialStateRule mInitialStateRule =
new BlankCTATabInitialStateRule(sActivityTestRule, false);
@Rule @Rule
public TemporaryFolder mTemporaryFolder = new TemporaryFolder(); public TemporaryFolder mTemporaryFolder = new TemporaryFolder();
...@@ -59,23 +65,17 @@ public class TabUmaTest { ...@@ -59,23 +65,17 @@ public class TabUmaTest {
@Before @Before
public void setUp() throws Exception { public void setUp() throws Exception {
mActivityTestRule.startMainActivityOnBlankPage(); mTestServer = sActivityTestRule.getTestServer();
mTestServer = EmbeddedTestServer.createAndStartServer(InstrumentationRegistry.getContext());
mTestUrl = mTestServer.getURL(TEST_PATH); mTestUrl = mTestServer.getURL(TEST_PATH);
} }
@After
public void tearDown() {
mTestServer.stopAndDestroyServer();
}
private TabbedModeTabDelegateFactory createTabDelegateFactory() { private TabbedModeTabDelegateFactory createTabDelegateFactory() {
BrowserControlsVisibilityDelegate visibilityDelegate = BrowserControlsVisibilityDelegate visibilityDelegate =
new BrowserControlsVisibilityDelegate(BrowserControlsState.BOTH) {}; new BrowserControlsVisibilityDelegate(BrowserControlsState.BOTH) {};
// clang-format off // clang-format off
return new TabbedModeTabDelegateFactory(mActivityTestRule.getActivity(), visibilityDelegate, return new TabbedModeTabDelegateFactory(sActivityTestRule.getActivity(), visibilityDelegate,
new ObservableSupplierImpl<ShareDelegate>(), null, new ObservableSupplierImpl<ShareDelegate>(), null,
() -> {}, mActivityTestRule.getActivity() () -> {}, sActivityTestRule.getActivity()
.getRootUiCoordinatorForTesting() .getRootUiCoordinatorForTesting()
.getBottomSheetController()); .getBottomSheetController());
// clang-format on // clang-format on
...@@ -84,7 +84,7 @@ public class TabUmaTest { ...@@ -84,7 +84,7 @@ public class TabUmaTest {
private Tab createLazilyLoadedTab(boolean show) throws ExecutionException { private Tab createLazilyLoadedTab(boolean show) throws ExecutionException {
return TestThreadUtils.runOnUiThreadBlocking(() -> { return TestThreadUtils.runOnUiThreadBlocking(() -> {
Tab bgTab = TabBuilder.createForLazyLoad(new LoadUrlParams(mTestUrl)) Tab bgTab = TabBuilder.createForLazyLoad(new LoadUrlParams(mTestUrl))
.setWindow(mActivityTestRule.getActivity().getWindowAndroid()) .setWindow(sActivityTestRule.getActivity().getWindowAndroid())
.setLaunchType(TabLaunchType.FROM_LONGPRESS_BACKGROUND) .setLaunchType(TabLaunchType.FROM_LONGPRESS_BACKGROUND)
.setDelegateFactory(createTabDelegateFactory()) .setDelegateFactory(createTabDelegateFactory())
.setInitiallyHidden(true) .setInitiallyHidden(true)
...@@ -97,7 +97,7 @@ public class TabUmaTest { ...@@ -97,7 +97,7 @@ public class TabUmaTest {
private Tab createLiveTab(boolean foreground, boolean kill) throws ExecutionException { private Tab createLiveTab(boolean foreground, boolean kill) throws ExecutionException {
return TestThreadUtils.runOnUiThreadBlocking(() -> { return TestThreadUtils.runOnUiThreadBlocking(() -> {
Tab tab = TabBuilder.createLiveTab(!foreground) Tab tab = TabBuilder.createLiveTab(!foreground)
.setWindow(mActivityTestRule.getActivity().getWindowAndroid()) .setWindow(sActivityTestRule.getActivity().getWindowAndroid())
.setLaunchType(TabLaunchType.FROM_LONGPRESS_BACKGROUND) .setLaunchType(TabLaunchType.FROM_LONGPRESS_BACKGROUND)
.setDelegateFactory(createTabDelegateFactory()) .setDelegateFactory(createTabDelegateFactory())
.setInitiallyHidden(!foreground) .setInitiallyHidden(!foreground)
...@@ -124,15 +124,15 @@ public class TabUmaTest { ...@@ -124,15 +124,15 @@ public class TabUmaTest {
String histogram = "Tab.StatusWhenSwitchedBackToForeground"; String histogram = "Tab.StatusWhenSwitchedBackToForeground";
HistogramDelta lazyLoadCount = HistogramDelta lazyLoadCount =
new HistogramDelta(histogram, TabUma.TAB_STATUS_LAZY_LOAD_FOR_BG_TAB); new HistogramDelta(histogram, TabUma.TAB_STATUS_LAZY_LOAD_FOR_BG_TAB);
Assert.assertEquals(0, lazyLoadCount.getDelta()); // Sanity check. int offset = lazyLoadCount.getDelta();
// Show the tab and verify that one sample was recorded in the lazy load bucket. // Show the tab and verify that one sample was recorded in the lazy load bucket.
TestThreadUtils.runOnUiThreadBlocking(() -> { tab.show(TabSelectionType.FROM_USER); }); TestThreadUtils.runOnUiThreadBlocking(() -> { tab.show(TabSelectionType.FROM_USER); });
Assert.assertEquals(1, lazyLoadCount.getDelta()); Assert.assertEquals(offset + 1, lazyLoadCount.getDelta());
// Show the tab again and verify that we didn't record another sample. // Show the tab again and verify that we didn't record another sample.
TestThreadUtils.runOnUiThreadBlocking(() -> { tab.show(TabSelectionType.FROM_USER); }); TestThreadUtils.runOnUiThreadBlocking(() -> { tab.show(TabSelectionType.FROM_USER); });
Assert.assertEquals(1, lazyLoadCount.getDelta()); Assert.assertEquals(offset + 1, lazyLoadCount.getDelta());
} }
/** /**
...@@ -146,15 +146,14 @@ public class TabUmaTest { ...@@ -146,15 +146,14 @@ public class TabUmaTest {
String ageStartup = "Tabs.ForegroundTabAgeAtStartup"; String ageStartup = "Tabs.ForegroundTabAgeAtStartup";
String ageRestore = "Tab.AgeUponRestoreFromColdStart"; String ageRestore = "Tab.AgeUponRestoreFromColdStart";
int switchFgStatusOffset = getHistogram(switchFgStatus);
Assert.assertEquals(0, getHistogram(switchFgStatus)); int ageStartupOffset = getHistogram(ageStartup);
Assert.assertEquals(1, getHistogram(ageStartup)); int ageRestoreOffset = getHistogram(ageRestore);
Assert.assertEquals(0, getHistogram(ageRestore));
// Test a normal tab without an explicit creation state. UMA task doesn't start. // Test a normal tab without an explicit creation state. UMA task doesn't start.
Tab tab = TestThreadUtils.runOnUiThreadBlocking(() -> { Tab tab = TestThreadUtils.runOnUiThreadBlocking(() -> {
return new TabBuilder() return new TabBuilder()
.setWindow(mActivityTestRule.getActivity().getWindowAndroid()) .setWindow(sActivityTestRule.getActivity().getWindowAndroid())
.setDelegateFactory(createTabDelegateFactory()) .setDelegateFactory(createTabDelegateFactory())
.setLaunchType(TabLaunchType.FROM_LONGPRESS_BACKGROUND) .setLaunchType(TabLaunchType.FROM_LONGPRESS_BACKGROUND)
.setTabState(createTabState()) .setTabState(createTabState())
...@@ -164,9 +163,9 @@ public class TabUmaTest { ...@@ -164,9 +163,9 @@ public class TabUmaTest {
TestThreadUtils.runOnUiThreadBlocking(() -> tab.show(TabSelectionType.FROM_USER)); TestThreadUtils.runOnUiThreadBlocking(() -> tab.show(TabSelectionType.FROM_USER));
// There should be no histogram changes. // There should be no histogram changes.
Assert.assertEquals(0, getHistogram(switchFgStatus)); Assert.assertEquals(switchFgStatusOffset, getHistogram(switchFgStatus));
Assert.assertEquals(1, getHistogram(ageStartup)); Assert.assertEquals(ageStartupOffset, getHistogram(ageStartup));
Assert.assertEquals(0, getHistogram(ageRestore)); Assert.assertEquals(ageRestoreOffset, getHistogram(ageRestore));
} }
/** /**
...@@ -215,7 +214,7 @@ public class TabUmaTest { ...@@ -215,7 +214,7 @@ public class TabUmaTest {
// at Tab#show(), so created anew. // at Tab#show(), so created anew.
TestThreadUtils.runOnUiThreadBlocking(() -> { TestThreadUtils.runOnUiThreadBlocking(() -> {
Tab tab = TabBuilder.createFromFrozenState() Tab tab = TabBuilder.createFromFrozenState()
.setWindow(mActivityTestRule.getActivity().getWindowAndroid()) .setWindow(sActivityTestRule.getActivity().getWindowAndroid())
.setDelegateFactory(createTabDelegateFactory()) .setDelegateFactory(createTabDelegateFactory())
.setTabState(createTabState()) .setTabState(createTabState())
.build(); .build();
......
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