Commit 4a9701b5 authored by ckitagawa's avatar ckitagawa Committed by Commit Bot

[Paint Preview] Don't record time to TimeToFirstBitmap if backgrounded

If a launch is backgrounded before TimeToFirstBitmap we shouldn't
record it. This CL is a very simple change to enable that and mirror
the behavior of FirstContentfulPaint.

Bug: 1109991
Change-Id: Ic1624516d55ded2eb74fa140d9f0d57865b11a87
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2372722
Commit-Queue: Calder Kitagawa <ckitagawa@chromium.org>
Reviewed-by: default avatarMehran Mahmoudi <mahmoudi@chromium.org>
Cr-Commit-Position: refs/heads/master@{#801010}
parent 69bed021
...@@ -10,6 +10,7 @@ import org.chromium.chrome.browser.app.ChromeActivity; ...@@ -10,6 +10,7 @@ import org.chromium.chrome.browser.app.ChromeActivity;
import org.chromium.chrome.browser.flags.CachedFeatureFlags; import org.chromium.chrome.browser.flags.CachedFeatureFlags;
import org.chromium.chrome.browser.flags.ChromeFeatureList; import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.metrics.PageLoadMetrics; import org.chromium.chrome.browser.metrics.PageLoadMetrics;
import org.chromium.chrome.browser.metrics.UmaUtils;
import org.chromium.chrome.browser.multiwindow.MultiWindowUtils; import org.chromium.chrome.browser.multiwindow.MultiWindowUtils;
import org.chromium.chrome.browser.paint_preview.services.PaintPreviewTabServiceFactory; import org.chromium.chrome.browser.paint_preview.services.PaintPreviewTabServiceFactory;
import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tab.Tab;
...@@ -93,7 +94,7 @@ public class PaintPreviewHelper { ...@@ -93,7 +94,7 @@ public class PaintPreviewHelper {
if (!player.maybeShow(onShown, () -> { if (!player.maybeShow(onShown, () -> {
onDismissed.run(); onDismissed.run();
PageLoadMetrics.removeObserver(observer); PageLoadMetrics.removeObserver(observer);
}, sActivityCreationTimeMs)) { }, sActivityCreationTimeMs, UmaUtils::hasComeToBackground)) {
return false; return false;
} }
......
...@@ -13,6 +13,7 @@ import org.chromium.base.metrics.RecordUserAction; ...@@ -13,6 +13,7 @@ import org.chromium.base.metrics.RecordUserAction;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.concurrent.Callable;
/** Helper class for recording metrics related to TabbedPaintPreview. */ /** Helper class for recording metrics related to TabbedPaintPreview. */
public class TabbedPaintPreviewMetricsHelper { public class TabbedPaintPreviewMetricsHelper {
...@@ -56,11 +57,19 @@ public class TabbedPaintPreviewMetricsHelper { ...@@ -56,11 +57,19 @@ public class TabbedPaintPreviewMetricsHelper {
mShownTime = System.currentTimeMillis(); mShownTime = System.currentTimeMillis();
} }
void onFirstPaint(long activityOnCreateTimestamp) { void onFirstPaint(long activityOnCreateTimestamp, Callable<Boolean> wasBackgrounded) {
mFirstPaintHappened = true; mFirstPaintHappened = true;
RecordHistogram.recordLongTimesHistogram( boolean shouldRecordHistogram = false;
"Browser.PaintPreview.TabbedPlayer.TimeToFirstBitmap", try {
SystemClock.elapsedRealtime() - activityOnCreateTimestamp); shouldRecordHistogram = !wasBackgrounded.call();
} catch (Exception e) {
// no-op just proceed.
}
if (shouldRecordHistogram) {
RecordHistogram.recordLongTimesHistogram(
"Browser.PaintPreview.TabbedPlayer.TimeToFirstBitmap",
SystemClock.elapsedRealtime() - activityOnCreateTimestamp);
}
} }
void onTabLoadFinished() { void onTabLoadFinished() {
......
...@@ -29,6 +29,8 @@ import org.chromium.content_public.browser.NavigationHandle; ...@@ -29,6 +29,8 @@ import org.chromium.content_public.browser.NavigationHandle;
import org.chromium.content_public.browser.WebContents; import org.chromium.content_public.browser.WebContents;
import org.chromium.url.GURL; import org.chromium.url.GURL;
import java.util.concurrent.Callable;
/** /**
* Responsible for checking for and displaying Paint Previews that are associated with a * Responsible for checking for and displaying Paint Previews that are associated with a
* {@link Tab} by overlaying the content view. * {@link Tab} by overlaying the content view.
...@@ -134,12 +136,13 @@ public class TabbedPaintPreviewPlayer implements TabViewProvider, UserData { ...@@ -134,12 +136,13 @@ public class TabbedPaintPreviewPlayer implements TabViewProvider, UserData {
* @param onShown The callback for when the Paint Preview is shown. * @param onShown The callback for when the Paint Preview is shown.
* @param onDismissed The callback for when the Paint Preview is dismissed. * @param onDismissed The callback for when the Paint Preview is dismissed.
* @param activityCreationTimestampMs The hosting activity's creation time in ms from * @param activityCreationTimestampMs The hosting activity's creation time in ms from
* @param wasBackgrounded Callable to determine if the activity was backgrounded.
* {@link SystemClock#elapsedRealtime}. * {@link SystemClock#elapsedRealtime}.
* @return Whether the Paint Preview started to initialize or is already initializating. * @return Whether the Paint Preview started to initialize or is already initializating.
* Note that if the Paint Preview is already showing, this will return false. * Note that if the Paint Preview is already showing, this will return false.
*/ */
public boolean maybeShow(@Nullable Runnable onShown, @Nullable Runnable onDismissed, public boolean maybeShow(@Nullable Runnable onShown, @Nullable Runnable onDismissed,
long activityCreationTimestampMs) { long activityCreationTimestampMs, Callable<Boolean> wasBackgrounded) {
if (mInitializing != null) return mInitializing; if (mInitializing != null) return mInitializing;
// Check if a capture exists. This is a quick check using a cache. // Check if a capture exists. This is a quick check using a cache.
...@@ -155,7 +158,7 @@ public class TabbedPaintPreviewPlayer implements TabViewProvider, UserData { ...@@ -155,7 +158,7 @@ public class TabbedPaintPreviewPlayer implements TabViewProvider, UserData {
onShown.run(); onShown.run();
mMetricsHelper.onShown(); mMetricsHelper.onShown();
}, },
() -> mMetricsHelper.onFirstPaint(activityCreationTimestampMs), () -> mMetricsHelper.onFirstPaint(activityCreationTimestampMs, wasBackgrounded),
() -> mHasUserInteraction = true, () -> mHasUserInteraction = true,
ChromeColors.getPrimaryBackgroundColor(mTab.getContext().getResources(), false), ChromeColors.getPrimaryBackgroundColor(mTab.getContext().getResources(), false),
() -> removePaintPreview(ExitCause.COMPOSITOR_FAILURE), () -> removePaintPreview(ExitCause.COMPOSITOR_FAILURE),
......
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