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;
import org.chromium.chrome.browser.flags.CachedFeatureFlags;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
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.paint_preview.services.PaintPreviewTabServiceFactory;
import org.chromium.chrome.browser.tab.Tab;
......@@ -93,7 +94,7 @@ public class PaintPreviewHelper {
if (!player.maybeShow(onShown, () -> {
onDismissed.run();
PageLoadMetrics.removeObserver(observer);
}, sActivityCreationTimeMs)) {
}, sActivityCreationTimeMs, UmaUtils::hasComeToBackground)) {
return false;
}
......
......@@ -13,6 +13,7 @@ import org.chromium.base.metrics.RecordUserAction;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.Callable;
/** Helper class for recording metrics related to TabbedPaintPreview. */
public class TabbedPaintPreviewMetricsHelper {
......@@ -56,12 +57,20 @@ public class TabbedPaintPreviewMetricsHelper {
mShownTime = System.currentTimeMillis();
}
void onFirstPaint(long activityOnCreateTimestamp) {
void onFirstPaint(long activityOnCreateTimestamp, Callable<Boolean> wasBackgrounded) {
mFirstPaintHappened = true;
boolean shouldRecordHistogram = false;
try {
shouldRecordHistogram = !wasBackgrounded.call();
} catch (Exception e) {
// no-op just proceed.
}
if (shouldRecordHistogram) {
RecordHistogram.recordLongTimesHistogram(
"Browser.PaintPreview.TabbedPlayer.TimeToFirstBitmap",
SystemClock.elapsedRealtime() - activityOnCreateTimestamp);
}
}
void onTabLoadFinished() {
RecordHistogram.recordBooleanHistogram(
......
......@@ -29,6 +29,8 @@ import org.chromium.content_public.browser.NavigationHandle;
import org.chromium.content_public.browser.WebContents;
import org.chromium.url.GURL;
import java.util.concurrent.Callable;
/**
* Responsible for checking for and displaying Paint Previews that are associated with a
* {@link Tab} by overlaying the content view.
......@@ -134,12 +136,13 @@ public class TabbedPaintPreviewPlayer implements TabViewProvider, UserData {
* @param onShown The callback for when the Paint Preview is shown.
* @param onDismissed The callback for when the Paint Preview is dismissed.
* @param activityCreationTimestampMs The hosting activity's creation time in ms from
* @param wasBackgrounded Callable to determine if the activity was backgrounded.
* {@link SystemClock#elapsedRealtime}.
* @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.
*/
public boolean maybeShow(@Nullable Runnable onShown, @Nullable Runnable onDismissed,
long activityCreationTimestampMs) {
long activityCreationTimestampMs, Callable<Boolean> wasBackgrounded) {
if (mInitializing != null) return mInitializing;
// Check if a capture exists. This is a quick check using a cache.
......@@ -155,7 +158,7 @@ public class TabbedPaintPreviewPlayer implements TabViewProvider, UserData {
onShown.run();
mMetricsHelper.onShown();
},
() -> mMetricsHelper.onFirstPaint(activityCreationTimestampMs),
() -> mMetricsHelper.onFirstPaint(activityCreationTimestampMs, wasBackgrounded),
() -> mHasUserInteraction = true,
ChromeColors.getPrimaryBackgroundColor(mTab.getContext().getResources(), false),
() -> 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