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

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

Issue 1325213002: customtabs: UMA histogram tracking whether clients call warmup(). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 5 years, 3 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 | tools/metrics/histograms/histograms.xml » ('j') | tools/metrics/histograms/histograms.xml » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java
index f3a6d0af9083a8d470f35df3a05ca4fedf19d128..c25117dd114115a97aa802e1eabeffe5e33c086e 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java
@@ -27,6 +27,7 @@ import android.support.customtabs.ICustomTabsCallback;
import android.support.customtabs.ICustomTabsService;
import android.text.TextUtils;
import android.util.SparseArray;
+import android.util.SparseBooleanArray;
import android.view.WindowManager;
import org.chromium.base.FieldTrialList;
@@ -79,6 +80,13 @@ public class CustomTabsConnection extends ICustomTabsService.Stub {
private static final int GOOD_PREDICTION = 1;
private static final int BAD_PREDICTION = 2;
private static final int PREDICTION_STATUS_COUNT = 3;
+ // Values for the "CustomTabs.CalledWarmup" UMA histogram. Append-only.
pasko 2015/09/03 18:02:19 nittynit: empty line above would look nicer
Benoit L 2015/09/29 09:04:23 Ack.
+ private static final int NO_SESSION_NO_WARMUP = 0;
+ private static final int NO_SESSION_WARMUP = 1;
+ private static final int SESSION_NO_WARMUP_ALREADY_CALLED = 2;
+ private static final int SESSION_NO_WARMUP_NOT_CALLED = 3;
+ private static final int SESSION_WARMUP = 4;
+ private static final int SESSION_WARMUP_COUNT = 5;
private static AtomicReference<CustomTabsConnection> sInstance =
new AtomicReference<CustomTabsConnection>();
@@ -196,6 +204,8 @@ public class CustomTabsConnection extends ICustomTabsService.Stub {
// Prediction tracking is done by UID and not by session, since a
// mis-behaving application can create a large number of sessions.
private SparseArray<PredictionStats> mUidToPredictionsStats = new SparseArray<>();
+ // Whether a client application has called warmup() in this instance lifetime.
+ private SparseBooleanArray mUidHasCalledWarmup = new SparseBooleanArray();
/**
* <strong>DO NOT CALL</strong>
@@ -261,6 +271,11 @@ public class CustomTabsConnection extends ICustomTabsService.Stub {
public boolean warmup(long flags) {
// Here and in mayLaunchUrl(), don't do expensive work for background applications.
if (!isCallerForegroundOrSelf()) return false;
+
+ synchronized (mLock) {
+ mUidHasCalledWarmup.put(Binder.getCallingUid(), true);
+ }
+
if (!mWarmupHasBeenCalled.compareAndSet(false, true)) return true;
// The call is non-blocking and this must execute on the UI thread, post a task.
ThreadUtils.postOnUiThread(new Runnable() {
@@ -384,11 +399,16 @@ public class CustomTabsConnection extends ICustomTabsService.Stub {
void registerLaunch(IBinder session, String url) {
int outcome;
long elapsedTimeMs = -1;
+ boolean hasValidSession = false;
+ boolean hasUidCalledWarmup = false;
synchronized (mLock) {
SessionParams sessionParams = mSessionParams.get(session);
if (sessionParams == null) {
outcome = NO_PREDICTION;
} else {
+ hasValidSession = true;
+ hasUidCalledWarmup = mUidHasCalledWarmup.get(sessionParams.mUid);
+
String predictedUrl = sessionParams.getPredictedUrl();
outcome = predictedUrl == null ? NO_PREDICTION
: predictedUrl.equals(url) ? GOOD_PREDICTION : BAD_PREDICTION;
@@ -408,6 +428,19 @@ public class CustomTabsConnection extends ICustomTabsService.Stub {
RecordHistogram.recordCustomTimesHistogram("CustomTabs.PredictionToLaunch",
elapsedTimeMs, 1, TimeUnit.MINUTES.toMillis(3), TimeUnit.MILLISECONDS, 100);
}
+ // CustomTabs.CalledWarmup histogram.
+ boolean warmupCalled = mWarmupHasBeenCalled.get();
+ int warmupKind = warmupCalled ? NO_SESSION_WARMUP : NO_SESSION_NO_WARMUP;
+ if (hasValidSession) {
+ if (hasUidCalledWarmup) {
+ warmupKind = SESSION_WARMUP;
+ } else {
+ warmupKind = warmupCalled ? SESSION_NO_WARMUP_ALREADY_CALLED
+ : SESSION_NO_WARMUP_NOT_CALLED;
+ }
+ }
+ RecordHistogram.recordEnumeratedHistogram(
+ "CustomTabs.CalledWarmup", warmupKind, SESSION_WARMUP_COUNT);
}
/**
@@ -637,6 +670,7 @@ public class CustomTabsConnection extends ICustomTabsService.Stub {
SessionParams params = mSessionParams.get(session);
if (params == null) return;
mSessionParams.remove(session);
+ mUidHasCalledWarmup.delete(params.mUid);
IBinder binder = params.mCallback.asBinder();
binder.unlinkToDeath(params.mDeathRecipient, 0);
if (mPrerender != null && session.equals(mPrerender.mSession)) {
« no previous file with comments | « no previous file | tools/metrics/histograms/histograms.xml » ('j') | tools/metrics/histograms/histograms.xml » ('J')

Powered by Google App Engine
This is Rietveld 408576698