Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Unified Diff: chrome/android/java_staging/src/org/chromium/chrome/browser/customtabs/ChromeBrowserConnection.java

Issue 1155423008: hosted: Add two histograms tracking "mayLaunchUrl" usage. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase + Findbugs fix. Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/android/java_staging/src/org/chromium/chrome/browser/customtabs/CustomTab.java » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/android/java_staging/src/org/chromium/chrome/browser/customtabs/ChromeBrowserConnection.java
diff --git a/chrome/android/java_staging/src/org/chromium/chrome/browser/customtabs/ChromeBrowserConnection.java b/chrome/android/java_staging/src/org/chromium/chrome/browser/customtabs/ChromeBrowserConnection.java
index 4127c04df2c987eb109e3ecc5f64641104a7de3f..153cfdc1eb8e7d3129731a9076b15624e93234e1 100644
--- a/chrome/android/java_staging/src/org/chromium/chrome/browser/customtabs/ChromeBrowserConnection.java
+++ b/chrome/android/java_staging/src/org/chromium/chrome/browser/customtabs/ChromeBrowserConnection.java
@@ -18,6 +18,7 @@ import android.os.Binder;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
+import android.os.SystemClock;
import android.util.LongSparseArray;
import android.util.SparseArray;
@@ -25,6 +26,7 @@ import org.chromium.base.Log;
import org.chromium.base.ThreadUtils;
import org.chromium.base.annotations.SuppressFBWarnings;
import org.chromium.base.library_loader.ProcessInitException;
+import org.chromium.base.metrics.RecordHistogram;
import org.chromium.chrome.browser.ChromiumApplication;
import org.chromium.chrome.browser.WarmupManager;
import org.chromium.content.browser.ChildProcessLauncher;
@@ -34,6 +36,7 @@ import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
/**
@@ -44,6 +47,12 @@ class ChromeBrowserConnection extends IBrowserConnectionService.Stub {
private static final long RESULT_OK = 0;
private static final long RESULT_ERROR = -1;
+ // Values for the "CustomTabs.PredictionStatus" UMA histogram. Append-only.
+ private static final int NO_PREDICTION = 0;
+ private static final int GOOD_PREDICTION = 1;
+ private static final int BAD_PREDICTION = 2;
+ private static final int PREDICTION_STATUS_COUNT = 3;
+
private static final Object sConstructionLock = new Object();
private static ChromeBrowserConnection sInstance;
@@ -54,10 +63,14 @@ class ChromeBrowserConnection extends IBrowserConnectionService.Stub {
private static class SessionParams {
public final int mUid;
private ServiceConnection mServiceConnection;
+ private String mPredictedUrl;
+ private long mLastMayLaunchUrlTimestamp;
public SessionParams(int uid) {
mUid = uid;
mServiceConnection = null;
+ mPredictedUrl = null;
+ mLastMayLaunchUrlTimestamp = 0;
}
public ServiceConnection getServiceConnection() {
@@ -67,6 +80,19 @@ class ChromeBrowserConnection extends IBrowserConnectionService.Stub {
public void setServiceConnection(ServiceConnection serviceConnection) {
mServiceConnection = serviceConnection;
}
+
+ public void setPredictionMetrics(String predictedUrl, long lastMayLaunchUrlTimestamp) {
+ mPredictedUrl = predictedUrl;
+ mLastMayLaunchUrlTimestamp = lastMayLaunchUrlTimestamp;
+ }
+
+ public String getPredictedUrl() {
+ return mPredictedUrl;
+ }
+
+ public long getLastMayLaunchUrlTimestamp() {
+ return mLastMayLaunchUrlTimestamp;
+ }
}
private final Object mLock;
@@ -182,6 +208,7 @@ class ChromeBrowserConnection extends IBrowserConnectionService.Stub {
synchronized (mLock) {
SessionParams sessionParams = mSessionParams.get(sessionId);
if (sessionParams == null || sessionParams.mUid != uid) return RESULT_ERROR;
+ sessionParams.setPredictionMetrics(url, SystemClock.elapsedRealtime());
}
ThreadUtils.postOnUiThread(new Runnable() {
@Override
@@ -195,6 +222,35 @@ class ChromeBrowserConnection extends IBrowserConnectionService.Stub {
}
/**
+ * Registers a launch of a |url| for a given |sessionId|.
+ *
+ * This is used for accounting.
+ */
+ void registerLaunch(long sessionId, String url) {
+ int outcome;
+ long elapsedTimeMs = -1;
+ synchronized (mLock) {
+ SessionParams sessionParams = mSessionParams.get(sessionId);
+ if (sessionParams == null) {
+ outcome = NO_PREDICTION;
+ } else {
+ String predictedUrl = sessionParams.getPredictedUrl();
+ outcome = predictedUrl == null ? NO_PREDICTION
+ : predictedUrl.equals(url) ? GOOD_PREDICTION : BAD_PREDICTION;
+ elapsedTimeMs = SystemClock.elapsedRealtime()
+ - sessionParams.getLastMayLaunchUrlTimestamp();
+ sessionParams.setPredictionMetrics(null, 0);
+ }
+ }
+ RecordHistogram.recordEnumeratedHistogram(
+ "CustomTabs.PredictionStatus", outcome, PREDICTION_STATUS_COUNT);
+ if (outcome == GOOD_PREDICTION) {
+ RecordHistogram.recordCustomTimesHistogram("CustomTabs.PredictionToLaunch",
+ elapsedTimeMs, 1, TimeUnit.MINUTES.toMillis(3), TimeUnit.MILLISECONDS, 100);
+ }
+ }
+
+ /**
* Transfers a prerendered WebContents if one exists.
*
* This resets the internal WebContents; a subsequent call to this method
« no previous file with comments | « no previous file | chrome/android/java_staging/src/org/chromium/chrome/browser/customtabs/CustomTab.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698