[Start] Fix ReturnToChromeUtil.shouldShowTabSwitcher().
In ReturnToChromeUtil.shouldShowTabSwitcher(), we should compare
System.currentTimeMillis() - lastBackgroundTime with the on-return
time, rather than using "+" which may cause potential value overflow.
Besides, add a new metrics
"Startup.Android.DurationSinceLastBackgroundTime" to track this
duration.
(cherry picked from commit 6ed9439bcb4a88e3df517f923ec65b0f670cdbc1)
Bug: 1339069
Change-Id: If9013370e1036683fa5176cbfc36355fdf172f91
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3721803
Reviewed-by: Hao Dong <spdonghao@chromium.org>
Reviewed-by: Yaron Friedman <yfriedman@chromium.org>
Commit-Queue: Xi Han <hanxi@chromium.org>
Cr-Original-Commit-Position: refs/heads/main@{#1017783}
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3748598
Reviewed-by: David Trainor <dtrainor@chromium.org>
Cr-Commit-Position: refs/branch-heads/5112@{#700}
Cr-Branched-From: b13d3fe7b3c47a56354ef54b221008afa754412e-refs/heads/main@{#1012729}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeInactivityTracker.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeInactivityTracker.java
index 96b4e1ed..9c36203 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeInactivityTracker.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeInactivityTracker.java
@@ -6,6 +6,7 @@
import androidx.annotation.VisibleForTesting;
+import org.chromium.base.metrics.RecordHistogram;
import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher;
import org.chromium.chrome.browser.lifecycle.DestroyObserver;
import org.chromium.chrome.browser.lifecycle.PauseResumeWithNativeObserver;
@@ -19,6 +20,8 @@
public class ChromeInactivityTracker
implements StartStopWithNativeObserver, PauseResumeWithNativeObserver, DestroyObserver {
private static final String TAG = "InactivityTracker";
+ private static final String UMA_DURATION_SINCE_LAST_BACKGROUND_TIME =
+ "Startup.Android.DurationSinceLastBackgroundTime";
private static final long UNKNOWN_LAST_BACKGROUNDED_TIME = -1;
@@ -81,7 +84,14 @@
// handlers the chance to respond to inactivity during any onStartWithNative handler
// regardless of ordering. onResume is always called after onStart, and it should be fine to
// consider Chrome active if it reaches onResume.
+ long lastBackgroundTime = SharedPreferencesManager.getInstance().readLong(
+ mPrefName, UNKNOWN_LAST_BACKGROUNDED_TIME);
setLastBackgroundedTimeInPrefs(UNKNOWN_LAST_BACKGROUNDED_TIME);
+
+ if (lastBackgroundTime != UNKNOWN_LAST_BACKGROUNDED_TIME) {
+ RecordHistogram.recordLongTimesHistogram100(UMA_DURATION_SINCE_LAST_BACKGROUND_TIME,
+ System.currentTimeMillis() - lastBackgroundTime);
+ }
}
@Override
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtil.java b/chrome/android/java/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtil.java
index 577fec7..9cfd6f7 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtil.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/tasks/ReturnToChromeUtil.java
@@ -255,9 +255,7 @@
return false;
}
- long expirationTime = lastBackgroundedTimeMillis + tabSwitcherAfterMillis;
-
- return System.currentTimeMillis() > expirationTime;
+ return System.currentTimeMillis() - lastBackgroundedTimeMillis > tabSwitcherAfterMillis;
}
/**
diff --git a/tools/metrics/histograms/metadata/startup/histograms.xml b/tools/metrics/histograms/metadata/startup/histograms.xml
index 94e581c..0397a9a 100644
--- a/tools/metrics/histograms/metadata/startup/histograms.xml
+++ b/tools/metrics/histograms/metadata/startup/histograms.xml
@@ -205,6 +205,17 @@
</summary>
</histogram>
+<histogram name="Startup.Android.DurationSinceLastBackgroundTime" units="ms"
+ expires_after="2022-12-31">
+ <owner>hanxi@chromium.org</owner>
+ <owner>spdonghao@chromium.org</owner>
+ <summary>
+ Android: The elapsed time from the last time when Chrome goes to background
+ till it becomes foreground again. The histogram is recorded when
+ onResumeWithNative() is called.
+ </summary>
+</histogram>
+
<histogram base="true" name="Startup.Android.FeedContentFirstLoadedTime"
units="ms" expires_after="2022-10-23">
<!-- Name completed by histogram_suffixes name="JavaStartMode" -->