[go: up one dir, main page]

[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" -->