From 81d960dfc6b8d6eb66220c21efdbb48942ac9692 Mon Sep 17 00:00:00 2001 From: Artem Samoilenko Date: Fri, 7 Feb 2025 15:36:35 -0500 Subject: [PATCH] [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 --- .../chromium/chrome/browser/ntp/BraveNewTabPage.java | 10 +++++++--- .../chrome/browser/BraveSwipeRefreshHandlerTest.java | 3 ++- .../org/chromium/chrome/browser/BytecodeTest.java | 4 +++- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/android/java/org/chromium/chrome/browser/ntp/BraveNewTabPage.java b/android/java/org/chromium/chrome/browser/ntp/BraveNewTabPage.java index feb346a336a..4c632e56e80 100644 --- a/android/java/org/chromium/chrome/browser/ntp/BraveNewTabPage.java +++ b/android/java/org/chromium/chrome/browser/ntp/BraveNewTabPage.java @@ -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 tabContentManagerSupplier, ObservableSupplier tabStripHeightSupplier, OneshotSupplier moduleRegistrySupplier, - ObservableSupplier edgeToEdgeControllerSupplier) { + ObservableSupplier 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 shareDelegateSupplier, String url, - ObservableSupplier edgeToEdgeControllerSupplier) { + ObservableSupplier edgeToEdgeControllerSupplier, + StartupMetricsTracker startupMetricsTracker) { // Override surface provider Profile profile = Profile.fromWebContents(mTab.getWebContents()); diff --git a/android/javatests/org/chromium/chrome/browser/BraveSwipeRefreshHandlerTest.java b/android/javatests/org/chromium/chrome/browser/BraveSwipeRefreshHandlerTest.java index 4488574d531..8c5aba97ca7 100644 --- a/android/javatests/org/chromium/chrome/browser/BraveSwipeRefreshHandlerTest.java +++ b/android/javatests/org/chromium/chrome/browser/BraveSwipeRefreshHandlerTest.java @@ -81,7 +81,8 @@ public class BraveSwipeRefreshHandlerTest { null, rootUiCoordinator.getToolbarManager().getTabStripHeightSupplier(), new OneshotSupplierImpl(), - new ObservableSupplierImpl()); + new ObservableSupplierImpl(), + cta.getStartupMetricsTracker()); } @Test diff --git a/android/javatests/org/chromium/chrome/browser/BytecodeTest.java b/android/javatests/org/chromium/chrome/browser/BytecodeTest.java index dea85d5a9bb..919e8309ea0 100644 --- a/android/javatests/org/chromium/chrome/browser/BytecodeTest.java +++ b/android/javatests/org/chromium/chrome/browser/BytecodeTest.java @@ -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",