Commit df4a4725 authored by Xi Han's avatar Xi Han Committed by Commit Bot

[Instant Start] Track first draw time on UMA

Record Startup.Android.FirstDrawCompletedTime.{Instant,NoInstant}.

Bug: 1092931
Change-Id: I2d589ddc7f880cd7ccfc3c3fe45c46409896a035
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2355590Reviewed-by: default avatarAlexei Svitkine <asvitkine@chromium.org>
Reviewed-by: default avatarYaron Friedman <yfriedman@chromium.org>
Reviewed-by: default avatarWei-Yin Chen (陳威尹) <wychen@chromium.org>
Commit-Queue: Xi Han <hanxi@chromium.org>
Cr-Commit-Position: refs/heads/master@{#799728}
parent 58363bc3
......@@ -79,6 +79,7 @@ import org.chromium.chrome.browser.feed.FeedSurfaceMediator;
import org.chromium.chrome.browser.flags.CachedFeatureFlags;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.flags.ChromeSwitches;
import org.chromium.chrome.browser.init.AsyncInitializationActivity;
import org.chromium.chrome.browser.ntp.NewTabPage;
import org.chromium.chrome.browser.tasks.ReturnToChromeExperimentsUtil;
import org.chromium.chrome.browser.tasks.SingleTabSwitcherMediator;
......@@ -986,6 +987,11 @@ public class StartSurfaceTest {
CriteriaHelper.DEFAULT_POLLING_INTERVAL);
boolean isInstantStart = TabUiFeatureUtilities.supportInstantStart(false);
Assert.assertEquals(1,
RecordHistogram.getHistogramTotalCountForTesting(
StartSurfaceConfiguration.getHistogramName(
AsyncInitializationActivity.FIRST_DRAW_COMPLETED_TIME_MS_UMA,
isInstantStart)));
int expectedRecordCount = mImmediateReturn ? 1 : 0;
// Histograms should be only recorded when StartSurface is shown immediately after
// launch.
......
......@@ -45,6 +45,7 @@ import org.chromium.chrome.browser.multiwindow.MultiWindowModeStateDispatcher;
import org.chromium.chrome.browser.multiwindow.MultiWindowModeStateDispatcherImpl;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.tasks.tab_management.TabUiFeatureUtilities;
import org.chromium.chrome.features.start_surface.StartSurfaceConfiguration;
import org.chromium.ui.base.ActivityWindowAndroid;
import org.chromium.ui.base.DeviceFormFactor;
import org.chromium.ui.base.WindowAndroid;
......@@ -60,6 +61,8 @@ import java.lang.reflect.Field;
*/
public abstract class AsyncInitializationActivity extends ChromeBaseAppCompatActivity
implements ChromeActivityNativeDelegate, BrowserParts, ModalDialogManagerHolder {
@VisibleForTesting
public static final String FIRST_DRAW_COMPLETED_TIME_MS_UMA = "FirstDrawCompletedTime";
private static final String TAG = "AsyncInitActivity";
protected final Handler mHandler;
......@@ -74,9 +77,6 @@ public abstract class AsyncInitializationActivity extends ChromeBaseAppCompatAct
/** Time at which onCreate is called. This is realtime, counted in ms since device boot. */
private long mOnCreateTimestampMs;
/** Time at which onCreate is called. This is uptime, to be sent to native code. */
private long mOnCreateTimestampUptimeMs;
private ActivityWindowAndroid mWindowAndroid;
private final ObservableSupplierImpl<ModalDialogManager> mModalDialogManagerSupplier =
new ObservableSupplierImpl<>();
......@@ -216,6 +216,9 @@ public abstract class AsyncInitializationActivity extends ChromeBaseAppCompatAct
assert firstDrawView != null;
FirstDrawDetector.waitForFirstDraw(firstDrawView, () -> {
mFirstDrawComplete = true;
StartSurfaceConfiguration.recordHistogram(FIRST_DRAW_COMPLETED_TIME_MS_UMA,
SystemClock.elapsedRealtime() - getOnCreateTimestampMs(),
TabUiFeatureUtilities.supportInstantStart(isTablet()));
if (!mStartupDelayed) {
onFirstDrawComplete();
}
......@@ -332,7 +335,6 @@ public abstract class AsyncInitializationActivity extends ChromeBaseAppCompatAct
super.onCreate(transformSavedInstanceStateForOnCreate(savedInstanceState));
}
mOnCreateTimestampMs = SystemClock.elapsedRealtime();
mOnCreateTimestampUptimeMs = SystemClock.uptimeMillis();
mSavedInstanceState = savedInstanceState;
mWindowAndroid = createWindowAndroid();
......@@ -449,13 +451,6 @@ public abstract class AsyncInitializationActivity extends ChromeBaseAppCompatAct
return intent;
}
/**
* @return The elapsed real time for the activity creation in ms.
*/
protected long getOnCreateTimestampUptimeMs() {
return mOnCreateTimestampUptimeMs;
}
/**
* @return The uptime for the activity creation in ms.
*/
......
......@@ -171160,6 +171160,18 @@ should be kept until we use this API. -->
</summary>
</histogram>
<histogram base="true" name="Startup.Android.FirstDrawCompletedTime" units="ms"
expires_after="2021-06-10">
<!-- Name completed by histogram_suffixes name="JavaStartMode" -->
<owner>hanxi@chromium.org</owner>
<owner>spdonghao@chromium.org</owner>
<owner>wychen@chromium.org</owner>
<summary>
Records the time duration from a cold start till the first draw completes.
</summary>
</histogram>
<histogram name="Startup.Android.GURLEnsureMainDexInitialized" units="ms"
expires_after="2021-01-31">
<owner>mthiesse@chromium.org</owner>
......@@ -205877,6 +205889,7 @@ regressions. -->
<suffix name="NoInstant" label=""/>
<affected-histogram name="Startup.Android.FeedContentFirstLoadedTime"/>
<affected-histogram name="Startup.Android.FeedStreamCreatedTime"/>
<affected-histogram name="Startup.Android.FirstDrawCompletedTime"/>
<affected-histogram name="Startup.Android.SingleTabTitleAvailableTime"/>
</histogram_suffixes>
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