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

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

Issue 1032513003: Upstream TabUma. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: dtrainor's comments Created 5 years, 9 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/src/org/chromium/chrome/browser/TabUma.java » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/android/java/src/org/chromium/chrome/browser/Tab.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/Tab.java b/chrome/android/java/src/org/chromium/chrome/browser/Tab.java
index 210119e5b7e51c010a19befbdfc93746d3929bde..f759426a11af568cfec60cac1fdeabcde75c0e15 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/Tab.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/Tab.java
@@ -27,6 +27,7 @@ import org.chromium.base.VisibleForTesting;
import org.chromium.base.metrics.RecordHistogram;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.TabState.WebContentsState;
+import org.chromium.chrome.browser.TabUma.TabCreationState;
import org.chromium.chrome.browser.banners.AppBannerManager;
import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager;
import org.chromium.chrome.browser.contextmenu.ChromeContextMenuItemDelegate;
@@ -46,6 +47,7 @@ import org.chromium.chrome.browser.tab.SadTabViewFactory;
import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType;
import org.chromium.chrome.browser.tabmodel.TabModel.TabSelectionType;
import org.chromium.chrome.browser.tabmodel.TabModelBase;
+import org.chromium.chrome.browser.tabmodel.TabModelSelector;
import org.chromium.chrome.browser.toolbar.ToolbarModel;
import org.chromium.chrome.browser.ui.toolbar.ToolbarModelSecurityLevel;
import org.chromium.components.navigation_interception.InterceptNavigationDelegate;
@@ -297,6 +299,12 @@ public class Tab implements ViewGroup.OnHierarchyChangeListener,
private int mFullscreenHungRendererToken = FullscreenManager.INVALID_TOKEN;
/**
+ * The UMA object used to report stats for this tab. Note that this may be null under certain
+ * conditions, such as incognito mode.
+ */
+ private TabUma mTabUma;
+
+ /**
* Reference to the current sadTabView if one is defined.
*/
private View mSadTabView;
@@ -727,6 +735,14 @@ public class Tab implements ViewGroup.OnHierarchyChangeListener,
}
/**
+ * Sets the mTabUma object for stats reporting.
+ * @param tabUma TabUma object to use to report UMA stats.
+ */
+ protected void setTabUma(TabUma tabUma) {
+ mTabUma = tabUma;
+ }
+
+ /**
* Restores member fields from the given TabState.
* @param state TabState containing information about this Tab.
*/
@@ -1206,6 +1222,8 @@ public class Tab implements ViewGroup.OnHierarchyChangeListener,
if (mContentViewCore != null) mContentViewCore.onShow();
+ if (mTabUma != null) mTabUma.onShow(type, getTimestampMillis());
+
showInternal(type);
// If the page is still loading, update the progress bar (otherwise it would not show
@@ -1459,6 +1477,8 @@ public class Tab implements ViewGroup.OnHierarchyChangeListener,
"Navigation.IsMobileOptimized", mContentViewCore.getIsMobileOptimizedHint());
}
+ if (mTabUma != null) mTabUma.onLoadFinished();
+
for (TabObserver observer : mObservers) observer.onPageLoadFinished(this);
}
@@ -1469,6 +1489,7 @@ public class Tab implements ViewGroup.OnHierarchyChangeListener,
protected void didFailPageLoad(int errorCode) {
mIsLoading = false;
mIsBeingRestored = false;
+ if (mTabUma != null) mTabUma.onLoadFailed(errorCode);
for (TabObserver observer : mObservers) observer.onPageLoadFailed(this, errorCode);
}
@@ -1838,6 +1859,7 @@ public class Tab implements ViewGroup.OnHierarchyChangeListener,
*/
protected void restoreIfNeededInternal() {
mIsBeingRestored = true;
+ if (mTabUma != null) mTabUma.onRestoreStarted();
}
/**
@@ -2395,6 +2417,7 @@ public class Tab implements ViewGroup.OnHierarchyChangeListener,
* Performs any subclass-specific tasks when the Tab crashes.
*/
protected void handleTabCrash() {
+ if (mTabUma != null) mTabUma.onRendererCrashed();
}
/**
@@ -2634,6 +2657,50 @@ public class Tab implements ViewGroup.OnHierarchyChangeListener,
sIdCounter.addAndGet(diff);
}
+ /**
+ * @return the UMA object for the tab. Note that this may be null in some
+ * cases.
+ */
+ public TabUma getTabUma() {
+ return mTabUma;
+ }
+
+ /**
+ * Creates a new tab to be loaded lazily. This can be used for tabs opened in the background
+ * that should be loaded when switched to. initialize() needs to be called afterwards to
+ * complete the second level initialization.
+ */
+ @VisibleForTesting
+ static Tab createTabForLazyLoad(Context context, boolean incognito, WindowAndroid nativeWindow,
+ TabLaunchType type, int parentId, LoadUrlParams loadUrlParams,
+ TabModelSelector tabModelSelector) {
+ Tab tab = new Tab(INVALID_TAB_ID, parentId, incognito, context, nativeWindow, type, null);
+ if (context != null) {
+ tab.setTabUma(new TabUma(tab, TabCreationState.FROZEN_FOR_LAZY_LOAD,
+ tabModelSelector.getModel(incognito)));
+ }
+ tab.setPendingLoadParams(loadUrlParams);
+ return tab;
+ }
+
+ /**
+ * Creates a fresh tab. initialize() needs to be called afterwards to complete the second level
+ * initialization.
+ * @param initiallyHidden true iff the tab being created is initially in background
+ */
+ @VisibleForTesting
+ static Tab createLiveTab(int id, Context context, boolean incognito, WindowAndroid nativeWindow,
+ TabLaunchType type, int parentId, boolean initiallyHidden,
+ TabModelSelector tabModelSelector) {
+ Tab tab = new Tab(id, parentId, incognito, context, nativeWindow, type, null);
+ if (context != null) {
+ tab.setTabUma(new TabUma(tab, initiallyHidden ? TabCreationState.LIVE_IN_BACKGROUND
+ : TabCreationState.LIVE_IN_FOREGROUND,
+ tabModelSelector.getModel(incognito)));
+ }
+ return tab;
+ }
+
private native void nativeInit();
private native void nativeDestroy(long nativeTabAndroid);
private native void nativeInitWebContents(long nativeTabAndroid, boolean incognito,
« no previous file with comments | « no previous file | chrome/android/java/src/org/chromium/chrome/browser/TabUma.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698