| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package org.chromium.chrome.browser.metrics; | 5 package org.chromium.base.metrics; |
| 6 | 6 |
| 7 import android.util.Pair; | |
| 8 | |
| 9 import org.chromium.base.annotations.JNINamespace; | |
| 10 import org.chromium.base.library_loader.LibraryLoader; | 7 import org.chromium.base.library_loader.LibraryLoader; |
| 11 import org.chromium.base.metrics.RecordHistogram; | |
| 12 import org.chromium.base.metrics.RecordUserAction; | |
| 13 import org.chromium.content_public.browser.WebContents; | |
| 14 | 8 |
| 15 import java.util.ArrayList; | 9 import java.util.ArrayList; |
| 16 import java.util.List; | 10 import java.util.List; |
| 17 import java.util.concurrent.TimeUnit; | 11 import java.util.concurrent.TimeUnit; |
| 18 | 12 |
| 19 /** | 13 /** |
| 20 * Used for recording metrics about Chrome launches that need to be recorded bef
ore the native | 14 * Utility classes for recording UMA metrics before the native library |
| 21 * library may have been loaded. Metrics are cached until the library is known
to be loaded, then | 15 * may have been loaded. Metrics are cached until the library is known |
| 22 * committed to the MetricsService all at once. | 16 * to be loaded, then committed to the MetricsService all at once. |
| 23 */ | 17 */ |
| 24 @JNINamespace("metrics") | 18 public class CachedMetrics { |
| 25 public class LaunchMetrics { | |
| 26 | |
| 27 /** | 19 /** |
| 28 * Creating an instance of a subclass of this class automatically adds it to
a list of objects | 20 * Creating an instance of a subclass of this class automatically adds it to
a list of objects |
| 29 * that are committed when the native library is available. | 21 * that are committed when the native library is available. |
| 30 */ | 22 */ |
| 31 private abstract static class CachedHistogram { | 23 private abstract static class CachedHistogram { |
| 32 private static final List<CachedHistogram> sEvents = new ArrayList<Cache
dHistogram>(); | 24 private static final List<CachedHistogram> sEvents = new ArrayList<Cache
dHistogram>(); |
| 33 | 25 |
| 34 protected final String mHistogramName; | 26 protected final String mHistogramName; |
| 35 | 27 |
| 36 /** | 28 /** |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 160 | 152 |
| 161 @Override | 153 @Override |
| 162 protected void commitAndClear() { | 154 protected void commitAndClear() { |
| 163 for (Long sample : mSamples) { | 155 for (Long sample : mSamples) { |
| 164 recordWithNative(sample); | 156 recordWithNative(sample); |
| 165 } | 157 } |
| 166 mSamples.clear(); | 158 mSamples.clear(); |
| 167 } | 159 } |
| 168 } | 160 } |
| 169 | 161 |
| 170 // Each list item is a pair of the url and where it was added from e.g. from
the add to | |
| 171 // homescreen menu item, an app banner, or unknown. The mapping of int sourc
e values to | |
| 172 // their string names is found in the C++ ShortcutInfo struct. | |
| 173 private static final List<Pair<String, Integer>> sActivityUrls = | |
| 174 new ArrayList<Pair<String, Integer>>(); | |
| 175 private static final List<Pair<String, Integer>> sTabUrls = | |
| 176 new ArrayList<Pair<String, Integer>>(); | |
| 177 | |
| 178 private static final List<Long> sWebappHistogramTimes = new ArrayList<Long>(
); | |
| 179 | |
| 180 /** | 162 /** |
| 181 * Records the launch of a standalone Activity for a URL (i.e. a WebappActiv
ity) | 163 * Calls out to native code to commit any cached histograms and events. |
| 182 * added from a specific source. | 164 * Should be called once the native library has been loaded. |
| 183 * @param url URL that kicked off the Activity's creation. | |
| 184 * @param source integer id of the source from where the URL was added. | |
| 185 */ | 165 */ |
| 186 public static void recordHomeScreenLaunchIntoStandaloneActivity(String url,
int source) { | 166 public static void commitCachedMetrics() { |
| 187 sActivityUrls.add(new Pair<String, Integer>(url, source)); | |
| 188 } | |
| 189 | |
| 190 /** | |
| 191 * Records the launch of a Tab for a URL (i.e. a Home screen shortcut). | |
| 192 * @param url URL that kicked off the Tab's creation. | |
| 193 * @param source integer id of the source from where the URL was added. | |
| 194 */ | |
| 195 public static void recordHomeScreenLaunchIntoTab(String url, int source) { | |
| 196 sTabUrls.add(new Pair<String, Integer>(url, source)); | |
| 197 } | |
| 198 | |
| 199 /** | |
| 200 * Records the time it took to look up from disk whether a MAC is valid duri
ng webapp startup. | |
| 201 * @param time the number of milliseconds it took to finish. | |
| 202 */ | |
| 203 public static void recordWebappHistogramTimes(long time) { | |
| 204 sWebappHistogramTimes.add(time); | |
| 205 } | |
| 206 | |
| 207 /** | |
| 208 * Calls out to native code to record URLs that have been launched via the H
ome screen. | |
| 209 * This intermediate step is necessary because Activity.onCreate() may be ca
lled when | |
| 210 * the native library has not yet been loaded. | |
| 211 * @param webContents WebContents for the current Tab. | |
| 212 */ | |
| 213 public static void commitLaunchMetrics(WebContents webContents) { | |
| 214 for (Pair<String, Integer> item : sActivityUrls) { | |
| 215 nativeRecordLaunch(true, item.first, item.second, webContents); | |
| 216 } | |
| 217 sActivityUrls.clear(); | |
| 218 | |
| 219 for (Pair<String, Integer> item : sTabUrls) { | |
| 220 nativeRecordLaunch(false, item.first, item.second, webContents); | |
| 221 } | |
| 222 sTabUrls.clear(); | |
| 223 | |
| 224 // Record generic cached events. | |
| 225 for (CachedHistogram event : CachedHistogram.sEvents) event.commitAndCle
ar(); | 167 for (CachedHistogram event : CachedHistogram.sEvents) event.commitAndCle
ar(); |
| 226 } | 168 } |
| 227 | |
| 228 /** | |
| 229 * Records metrics about the state of the homepage on launch. | |
| 230 * @param showHomeButton Whether the home button is shown. | |
| 231 * @param homepageIsNtp Whether the homepage is set to the NTP. | |
| 232 * @param homepageUrl The value of the homepage URL. | |
| 233 */ | |
| 234 public static void recordHomePageLaunchMetrics( | |
| 235 boolean showHomeButton, boolean homepageIsNtp, String homepageUrl) { | |
| 236 if (homepageUrl == null) { | |
| 237 homepageUrl = ""; | |
| 238 assert !showHomeButton : "Homepage should be disabled for a null URL
"; | |
| 239 } | |
| 240 nativeRecordHomePageLaunchMetrics(showHomeButton, homepageIsNtp, homepag
eUrl); | |
| 241 } | |
| 242 | |
| 243 private static native void nativeRecordLaunch( | |
| 244 boolean standalone, String url, int source, WebContents webContents)
; | |
| 245 private static native void nativeRecordHomePageLaunchMetrics( | |
| 246 boolean showHomeButton, boolean homepageIsNtp, String homepageUrl); | |
| 247 } | 169 } |
| OLD | NEW |