[Android] Add a cold start metric for NTP

Chromium change:
https://chromium.googlesource.com/chromium/src/+/4cefe9fea9bfad8d1f4066460a5da16019812b32

[NTP Startup] Add a cold start metric for NTP loads on Clank

Current start metrics work with webpage or FDT launches. With Clank Home
Frequency being increased, the current startup guardian metric's volume
has been diluted.

This CL adds a cold start metric to capture load times for NTP launches.

The metric is recorded when FeedSurfaceProvider's view (root NTP view)
calls onDraw. Specifically, the metric measures the time from activity
creation to the time when the first draw pass occurs on the root view.
This is similar to a previous NTP startup metric
(NewTabPage.TimeToFirstDraw2) that has been deprecated, but utilizing
new cold-start heuristics and recording the time from activity start
instead of the start of NTP construction.

Bug: 369109839
This commit is contained in:
Artem Samoilenko
2025-03-18 20:02:03 -04:00
committed by Max Karolinskiy
parent bf234d308f
commit 81d960dfc6
3 changed files with 12 additions and 5 deletions
@@ -21,6 +21,7 @@ import org.chromium.chrome.browser.feed.FeedSurfaceProvider;
import org.chromium.chrome.browser.feed.FeedSwipeRefreshLayout;
import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher;
import org.chromium.chrome.browser.magic_stack.ModuleRegistry;
import org.chromium.chrome.browser.metrics.StartupMetricsTracker;
import org.chromium.chrome.browser.privacy.settings.PrivacyPreferencesManagerImpl;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.search_engines.TemplateUrlServiceFactory;
@@ -74,7 +75,8 @@ public class BraveNewTabPage extends NewTabPage {
ObservableSupplier<TabContentManager> tabContentManagerSupplier,
ObservableSupplier<Integer> tabStripHeightSupplier,
OneshotSupplier<ModuleRegistry> moduleRegistrySupplier,
ObservableSupplier<EdgeToEdgeController> edgeToEdgeControllerSupplier) {
ObservableSupplier<EdgeToEdgeController> edgeToEdgeControllerSupplier,
StartupMetricsTracker startupMetricsTracker) {
super(
activity,
browserControlsStateProvider,
@@ -97,7 +99,8 @@ public class BraveNewTabPage extends NewTabPage {
tabContentManagerSupplier,
tabStripHeightSupplier,
moduleRegistrySupplier,
edgeToEdgeControllerSupplier);
edgeToEdgeControllerSupplier,
startupMetricsTracker);
mJankTracker = jankTracker;
@@ -134,7 +137,8 @@ public class BraveNewTabPage extends NewTabPage {
boolean isInNightMode,
Supplier<ShareDelegate> shareDelegateSupplier,
String url,
ObservableSupplier<EdgeToEdgeController> edgeToEdgeControllerSupplier) {
ObservableSupplier<EdgeToEdgeController> edgeToEdgeControllerSupplier,
StartupMetricsTracker startupMetricsTracker) {
// Override surface provider
Profile profile = Profile.fromWebContents(mTab.getWebContents());
@@ -81,7 +81,8 @@ public class BraveSwipeRefreshHandlerTest {
null,
rootUiCoordinator.getToolbarManager().getTabStripHeightSupplier(),
new OneshotSupplierImpl<ModuleRegistry>(),
new ObservableSupplierImpl<EdgeToEdgeController>());
new ObservableSupplierImpl<EdgeToEdgeController>(),
cta.getStartupMetricsTracker());
}
@Test
@@ -83,6 +83,7 @@ import org.chromium.chrome.browser.layouts.LayoutManager;
import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher;
import org.chromium.chrome.browser.logo.CachedTintedBitmap;
import org.chromium.chrome.browser.logo.LogoCoordinator;
import org.chromium.chrome.browser.metrics.StartupMetricsTracker;
import org.chromium.chrome.browser.multiwindow.MultiInstanceManager;
import org.chromium.chrome.browser.multiwindow.MultiWindowModeStateDispatcher;
import org.chromium.chrome.browser.new_tab_url.DseNewTabUrlManager;
@@ -1256,7 +1257,8 @@ public class BytecodeTest {
ObservableSupplier.class,
ObservableSupplier.class,
OneshotSupplier.class,
ObservableSupplier.class));
ObservableSupplier.class,
StartupMetricsTracker.class));
Assert.assertTrue(
constructorsMatch(
"org/chromium/chrome/browser/toolbar/top/TopToolbarCoordinator",