OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 #include "chrome/browser/prerender/prerender_histograms.h" | 5 #include "chrome/browser/prerender/prerender_histograms.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/format_macros.h" | 9 #include "base/format_macros.h" |
10 #include "base/metrics/field_trial.h" | 10 #include "base/metrics/field_trial.h" |
11 #include "base/metrics/histogram.h" | 11 #include "base/metrics/histogram.h" |
12 #include "base/stringprintf.h" | 12 #include "base/stringprintf.h" |
13 #include "chrome/browser/predictors/autocomplete_action_predictor.h" | 13 #include "chrome/browser/predictors/autocomplete_action_predictor.h" |
14 #include "chrome/browser/prerender/prerender_field_trial.h" | 14 #include "chrome/browser/prerender/prerender_field_trial.h" |
15 #include "chrome/browser/prerender/prerender_manager.h" | 15 #include "chrome/browser/prerender/prerender_manager.h" |
16 #include "chrome/browser/prerender/prerender_util.h" | 16 #include "chrome/browser/prerender/prerender_util.h" |
17 | 17 |
18 using predictors::AutocompleteActionPredictor; | 18 using predictors::AutocompleteActionPredictor; |
19 | 19 |
20 namespace prerender { | 20 namespace prerender { |
21 | 21 |
22 namespace { | 22 namespace { |
23 | 23 |
24 // Time window for which we will record windowed PLT's from the last | |
25 // observed link rel=prefetch tag. | |
26 const int kWindowDurationSeconds = 30; | |
27 | |
28 std::string ComposeHistogramName(const std::string& prefix_type, | 24 std::string ComposeHistogramName(const std::string& prefix_type, |
29 const std::string& name) { | 25 const std::string& name) { |
30 if (prefix_type.empty()) | 26 if (prefix_type.empty()) |
31 return std::string("Prerender.") + name; | 27 return std::string("Prerender.") + name; |
32 return std::string("Prerender.") + prefix_type + std::string("_") + name; | 28 return std::string("Prerender.") + prefix_type + std::string("_") + name; |
33 } | 29 } |
34 | 30 |
35 std::string GetHistogramName(Origin origin, uint8 experiment_id, | 31 std::string GetHistogramName(Origin origin, uint8 experiment_id, |
36 bool is_wash, const std::string& name) { | 32 bool is_wash, const std::string& name) { |
37 if (is_wash) | 33 if (is_wash) |
38 return ComposeHistogramName("wash", name); | 34 return ComposeHistogramName("wash", name); |
39 | 35 |
40 if (origin == ORIGIN_GWS_PRERENDER) { | 36 if (origin == ORIGIN_GWS_PRERENDER) { |
41 if (experiment_id == kNoExperiment) | 37 if (experiment_id == kNoExperiment) |
42 return ComposeHistogramName("gws", name); | 38 return ComposeHistogramName("gws", name); |
43 return ComposeHistogramName("exp" + std::string(1, experiment_id + '0'), | 39 return ComposeHistogramName("exp" + std::string(1, experiment_id + '0'), |
44 name); | 40 name); |
45 } | 41 } |
46 | 42 |
47 if (experiment_id != kNoExperiment) | 43 if (experiment_id != kNoExperiment) |
48 return ComposeHistogramName("wash", name); | 44 return ComposeHistogramName("wash", name); |
49 | 45 |
50 switch (origin) { | 46 switch (origin) { |
51 case ORIGIN_OMNIBOX: | 47 case ORIGIN_OMNIBOX: |
52 return ComposeHistogramName("omnibox", name); | 48 return ComposeHistogramName("omnibox", name); |
53 case ORIGIN_LINK_REL_PRERENDER: | 49 case ORIGIN_LINK_REL_PRERENDER: |
54 return ComposeHistogramName("web", name); | 50 return ComposeHistogramName("web", name); |
51 case ORIGIN_LOCAL_PREDICTOR: | |
52 return ComposeHistogramName("local", name); | |
53 case ORIGIN_NONE: | |
54 return ComposeHistogramName("none", name); | |
55 case ORIGIN_GWS_PRERENDER: // Handled above. | 55 case ORIGIN_GWS_PRERENDER: // Handled above. |
56 default: | 56 default: |
57 NOTREACHED(); | 57 NOTREACHED(); |
58 break; | 58 break; |
59 }; | 59 }; |
60 | 60 |
61 // Dummy return value to make the compiler happy. | 61 // Dummy return value to make the compiler happy. |
62 NOTREACHED(); | 62 NOTREACHED(); |
63 return ComposeHistogramName("wash", name); | 63 return ComposeHistogramName("wash", name); |
64 } | 64 } |
65 | 65 |
66 bool OriginIsOmnibox(Origin origin) { | 66 bool OriginIsOmnibox(Origin origin) { |
67 return origin == ORIGIN_OMNIBOX; | 67 return origin == ORIGIN_OMNIBOX; |
68 } | 68 } |
69 | 69 |
70 } // namespace | 70 } // namespace |
71 | 71 |
72 // Helper macros for experiment-based and origin-based histogram reporting. | 72 // Helper macros for experiment-based and origin-based histogram reporting. |
73 // All HISTOGRAM arguments must be UMA_HISTOGRAM... macros that contain an | 73 // All HISTOGRAM arguments must be UMA_HISTOGRAM... macros that contain an |
74 // argument "name" which these macros will eventually substitute for the | 74 // argument "name" which these macros will eventually substitute for the |
75 // actual name used. | 75 // actual name used. |
76 #define PREFIXED_HISTOGRAM(histogram_name, HISTOGRAM) \ | 76 #define PREFIXED_HISTOGRAM(histogram_name, origin, HISTOGRAM) \ |
77 PREFIXED_HISTOGRAM_INTERNAL(GetCurrentOrigin(), GetCurrentExperimentId(), \ | 77 PREFIXED_HISTOGRAM_INTERNAL(origin, GetCurrentExperimentId(), \ |
78 IsOriginExperimentWash(), HISTOGRAM, \ | 78 IsOriginExperimentWash(), HISTOGRAM, \ |
79 histogram_name) | 79 histogram_name) |
80 | 80 |
81 #define PREFIXED_HISTOGRAM_ORIGIN_EXPERIMENT(histogram_name, origin, \ | 81 #define PREFIXED_HISTOGRAM_ORIGIN_EXPERIMENT(histogram_name, origin, \ |
82 experiment, HISTOGRAM) \ | 82 experiment, HISTOGRAM) \ |
83 PREFIXED_HISTOGRAM_INTERNAL(origin, experiment, false, HISTOGRAM, \ | 83 PREFIXED_HISTOGRAM_INTERNAL(origin, experiment, false, HISTOGRAM, \ |
84 histogram_name) | 84 histogram_name) |
85 | 85 |
86 #define PREFIXED_HISTOGRAM_INTERNAL(origin, experiment, wash, HISTOGRAM, \ | 86 #define PREFIXED_HISTOGRAM_INTERNAL(origin, experiment, wash, HISTOGRAM, \ |
87 histogram_name) { \ | 87 histogram_name) { \ |
(...skipping 17 matching lines...) Expand all Loading... | |
105 HISTOGRAM; \ | 105 HISTOGRAM; \ |
106 } else if (origin == ORIGIN_OMNIBOX) { \ | 106 } else if (origin == ORIGIN_OMNIBOX) { \ |
107 HISTOGRAM; \ | 107 HISTOGRAM; \ |
108 } else if (experiment != kNoExperiment) { \ | 108 } else if (experiment != kNoExperiment) { \ |
109 HISTOGRAM; \ | 109 HISTOGRAM; \ |
110 } else { \ | 110 } else { \ |
111 HISTOGRAM; \ | 111 HISTOGRAM; \ |
112 } \ | 112 } \ |
113 } | 113 } |
114 | 114 |
115 PrerenderHistograms::PrerenderHistograms() | 115 PrerenderHistograms::PrerenderHistograms(base::TimeDelta prerender_ttl) |
116 : last_experiment_id_(kNoExperiment), | 116 : last_experiment_id_(kNoExperiment), |
117 last_origin_(ORIGIN_LINK_REL_PRERENDER), | 117 last_origin_(ORIGIN_LINK_REL_PRERENDER), |
118 origin_experiment_wash_(false), | 118 origin_experiment_wash_(false), |
119 prerender_ttl_(prerender_ttl), | |
119 seen_any_pageload_(true), | 120 seen_any_pageload_(true), |
120 seen_pageload_started_after_prerender_(true) { | 121 seen_pageload_started_after_prerender_(true) { |
121 } | 122 } |
122 | 123 |
123 void PrerenderHistograms::RecordPrerender(Origin origin, const GURL& url) { | 124 void PrerenderHistograms::RecordPrerender(Origin origin, const GURL& url) { |
124 // Check if we are doing an experiment. | 125 // Check if we are doing an experiment. |
125 uint8 experiment = GetQueryStringBasedExperiment(url); | 126 uint8 experiment = GetQueryStringBasedExperiment(url); |
126 | 127 |
127 // We need to update last_experiment_id_, last_origin_, and | 128 // We need to update last_experiment_id_, last_origin_, and |
128 // origin_experiment_wash_. | 129 // origin_experiment_wash_. |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
171 | 172 |
172 void PrerenderHistograms::RecordUsedPrerender(Origin origin) const { | 173 void PrerenderHistograms::RecordUsedPrerender(Origin origin) const { |
173 if (OriginIsOmnibox(origin)) { | 174 if (OriginIsOmnibox(origin)) { |
174 UMA_HISTOGRAM_ENUMERATION( | 175 UMA_HISTOGRAM_ENUMERATION( |
175 StringPrintf("Prerender.OmniboxNavigationsUsedPrerenderCount%s", | 176 StringPrintf("Prerender.OmniboxNavigationsUsedPrerenderCount%s", |
176 PrerenderManager::GetModeString()), 1, 2); | 177 PrerenderManager::GetModeString()), 1, 2); |
177 } | 178 } |
178 } | 179 } |
179 | 180 |
180 void PrerenderHistograms::RecordTimeSinceLastRecentVisit( | 181 void PrerenderHistograms::RecordTimeSinceLastRecentVisit( |
182 Origin origin, | |
181 base::TimeDelta delta) const { | 183 base::TimeDelta delta) const { |
182 PREFIXED_HISTOGRAM( | 184 PREFIXED_HISTOGRAM( |
183 "TimeSinceLastRecentVisit", | 185 "TimeSinceLastRecentVisit", origin, |
184 UMA_HISTOGRAM_TIMES(name, delta)); | 186 UMA_HISTOGRAM_TIMES(name, delta)); |
185 } | 187 } |
186 | 188 |
187 void PrerenderHistograms::RecordFractionPixelsFinalAtSwapin( | 189 void PrerenderHistograms::RecordFractionPixelsFinalAtSwapin( |
190 Origin origin, | |
188 double fraction) const { | 191 double fraction) const { |
189 if (fraction < 0.0 || fraction > 1.0) | 192 if (fraction < 0.0 || fraction > 1.0) |
190 return; | 193 return; |
191 int percentage = static_cast<int>(fraction * 100); | 194 int percentage = static_cast<int>(fraction * 100); |
192 if (percentage < 0 || percentage > 100) | 195 if (percentage < 0 || percentage > 100) |
193 return; | 196 return; |
194 PREFIXED_HISTOGRAM( | 197 PREFIXED_HISTOGRAM( |
195 base::FieldTrial::MakeName("FractionPixelsFinalAtSwapin", "Prerender"), | 198 base::FieldTrial::MakeName("FractionPixelsFinalAtSwapin", "Prerender"), |
196 UMA_HISTOGRAM_PERCENTAGE(name, percentage)); | 199 origin, UMA_HISTOGRAM_PERCENTAGE(name, percentage)); |
197 } | 200 } |
198 | 201 |
199 base::TimeTicks PrerenderHistograms::GetCurrentTimeTicks() const { | 202 base::TimeTicks PrerenderHistograms::GetCurrentTimeTicks() const { |
200 return base::TimeTicks::Now(); | 203 return base::TimeTicks::Now(); |
201 } | 204 } |
202 | 205 |
203 // Helper macro for histograms. | 206 // Helper macro for histograms. |
204 #define RECORD_PLT(tag, perceived_page_load_time) { \ | 207 #define RECORD_PLT(tag, perceived_page_load_time) { \ |
205 PREFIXED_HISTOGRAM( \ | 208 PREFIXED_HISTOGRAM( \ |
206 base::FieldTrial::MakeName(tag, "Prerender"), \ | 209 base::FieldTrial::MakeName(tag, "Prerender"), origin, \ |
207 UMA_HISTOGRAM_CUSTOM_TIMES( \ | 210 UMA_HISTOGRAM_CUSTOM_TIMES( \ |
208 name, \ | 211 name, \ |
209 perceived_page_load_time, \ | 212 perceived_page_load_time, \ |
210 base::TimeDelta::FromMilliseconds(10), \ | 213 base::TimeDelta::FromMilliseconds(10), \ |
211 base::TimeDelta::FromSeconds(60), \ | 214 base::TimeDelta::FromSeconds(60), \ |
212 100)); \ | 215 100)); \ |
213 } | 216 } |
214 | 217 |
215 // Summary of all histograms Perceived PLT histograms: | 218 // Summary of all histograms Perceived PLT histograms: |
216 // (all prefixed PerceivedPLT) | 219 // (all prefixed PerceivedPLT) |
(...skipping 12 matching lines...) Expand all Loading... | |
229 // triggering for the first page to finish after the prerender that also started | 232 // triggering for the first page to finish after the prerender that also started |
230 // after the prerender started. | 233 // after the prerender started. |
231 // ...FirstAfterMissBoth -- pages meeting | 234 // ...FirstAfterMissBoth -- pages meeting |
232 // FirstAfterMiss AND FirstAfterMissNonOverlapping | 235 // FirstAfterMiss AND FirstAfterMissNonOverlapping |
233 // ...FirstAfterMissAnyOnly -- pages meeting | 236 // ...FirstAfterMissAnyOnly -- pages meeting |
234 // FirstAfterMiss but NOT FirstAfterMissNonOverlapping | 237 // FirstAfterMiss but NOT FirstAfterMissNonOverlapping |
235 // ..FirstAfterMissNonOverlappingOnly -- pages meeting | 238 // ..FirstAfterMissNonOverlappingOnly -- pages meeting |
236 // FirstAfterMissNonOverlapping but NOT FirstAfterMiss | 239 // FirstAfterMissNonOverlapping but NOT FirstAfterMiss |
237 | 240 |
238 void PrerenderHistograms::RecordPerceivedPageLoadTime( | 241 void PrerenderHistograms::RecordPerceivedPageLoadTime( |
239 base::TimeDelta perceived_page_load_time, bool was_prerender, | 242 Origin origin, |
243 base::TimeDelta perceived_page_load_time, | |
244 bool was_prerender, | |
240 bool was_complete_prerender, const GURL& url) { | 245 bool was_complete_prerender, const GURL& url) { |
241 if (!IsWebURL(url)) | 246 if (!IsWebURL(url)) |
242 return; | 247 return; |
243 bool within_window = WithinWindow(); | 248 bool within_window = WithinWindow(); |
244 bool is_google_url = IsGoogleDomain(url); | 249 bool is_google_url = IsGoogleDomain(url); |
245 RECORD_PLT("PerceivedPLT", perceived_page_load_time); | 250 RECORD_PLT("PerceivedPLT", perceived_page_load_time); |
246 if (within_window) | 251 if (within_window) |
247 RECORD_PLT("PerceivedPLTWindowed", perceived_page_load_time); | 252 RECORD_PLT("PerceivedPLTWindowed", perceived_page_load_time); |
248 if (was_prerender || was_complete_prerender) { | 253 if (was_prerender || was_complete_prerender) { |
249 if (was_prerender) | 254 if (was_prerender) |
(...skipping 29 matching lines...) Expand all Loading... | |
279 } else if (recorded_non_overlapping) { | 284 } else if (recorded_non_overlapping) { |
280 RECORD_PLT("PerceivedPLTFirstAfterMissNonOverlappingOnly", | 285 RECORD_PLT("PerceivedPLTFirstAfterMissNonOverlappingOnly", |
281 perceived_page_load_time); | 286 perceived_page_load_time); |
282 } | 287 } |
283 } | 288 } |
284 } | 289 } |
285 } | 290 } |
286 } | 291 } |
287 | 292 |
288 void PrerenderHistograms::RecordPageLoadTimeNotSwappedIn( | 293 void PrerenderHistograms::RecordPageLoadTimeNotSwappedIn( |
289 base::TimeDelta page_load_time, const GURL& url) const { | 294 Origin origin, |
295 base::TimeDelta page_load_time, | |
296 const GURL& url) const { | |
290 // If the URL to be prerendered is not a http[s] URL, or is a Google URL, | 297 // If the URL to be prerendered is not a http[s] URL, or is a Google URL, |
291 // do not record. | 298 // do not record. |
292 if (!IsWebURL(url) || IsGoogleDomain(url)) | 299 if (!IsWebURL(url) || IsGoogleDomain(url)) |
293 return; | 300 return; |
294 RECORD_PLT("PrerenderNotSwappedInPLT", page_load_time); | 301 RECORD_PLT("PrerenderNotSwappedInPLT", page_load_time); |
295 } | 302 } |
296 | 303 |
297 void PrerenderHistograms::RecordSimulatedLocalBrowsingBaselinePLT( | 304 void PrerenderHistograms::RecordSimulatedLocalBrowsingBaselinePLT( |
298 base::TimeDelta page_load_time, const GURL& url) const { | 305 Origin origin, |
306 base::TimeDelta page_load_time, | |
307 const GURL& url) const { | |
299 // If the URL to be prerendered is not a http[s] URL do not record. | 308 // If the URL to be prerendered is not a http[s] URL do not record. |
300 if (!IsWebURL(url)) | 309 if (!IsWebURL(url)) |
301 return; | 310 return; |
302 RECORD_PLT("SimulatedLocalBrowsingBaselinePLT", page_load_time); | 311 RECORD_PLT("SimulatedLocalBrowsingBaselinePLT", page_load_time); |
303 } | 312 } |
304 | 313 |
305 void PrerenderHistograms::RecordSimulatedLocalBrowsingPLT( | 314 void PrerenderHistograms::RecordSimulatedLocalBrowsingPLT( |
306 base::TimeDelta page_load_time, const GURL& url) const { | 315 Origin origin, |
316 base::TimeDelta page_load_time, | |
317 const GURL& url) const { | |
307 // If the URL to be prerendered is not a http[s] URL do not record. | 318 // If the URL to be prerendered is not a http[s] URL do not record. |
308 if (!IsWebURL(url)) | 319 if (!IsWebURL(url)) |
309 return; | 320 return; |
310 RECORD_PLT("SimulatedLocalBrowsingPLT", page_load_time); | 321 RECORD_PLT("SimulatedLocalBrowsingPLT", page_load_time); |
311 } | 322 } |
312 | 323 |
313 void PrerenderHistograms::RecordPercentLoadDoneAtSwapin(double fraction) | 324 void PrerenderHistograms::RecordPercentLoadDoneAtSwapin(Origin origin, |
314 const { | 325 double fraction) const { |
315 if (fraction < 0.0 || fraction > 1.0) | 326 if (fraction < 0.0 || fraction > 1.0) |
316 return; | 327 return; |
317 int percentage = static_cast<int>(fraction * 100); | 328 int percentage = static_cast<int>(fraction * 100); |
318 if (percentage < 0 || percentage > 100) | 329 if (percentage < 0 || percentage > 100) |
319 return; | 330 return; |
320 PREFIXED_HISTOGRAM( | 331 PREFIXED_HISTOGRAM( |
321 base::FieldTrial::MakeName("PercentLoadDoneAtSwapin", "Prerender"), | 332 base::FieldTrial::MakeName("PercentLoadDoneAtSwapin", "Prerender"), |
322 UMA_HISTOGRAM_PERCENTAGE(name, percentage)); | 333 origin, UMA_HISTOGRAM_PERCENTAGE(name, percentage)); |
323 } | 334 } |
324 | 335 |
325 base::TimeDelta PrerenderHistograms::GetTimeSinceLastPrerender() const { | 336 base::TimeDelta PrerenderHistograms::GetTimeSinceLastPrerender() const { |
326 return base::TimeTicks::Now() - last_prerender_seen_time_; | 337 return base::TimeTicks::Now() - last_prerender_seen_time_; |
327 } | 338 } |
328 | 339 |
329 bool PrerenderHistograms::WithinWindow() const { | 340 bool PrerenderHistograms::WithinWindow() const { |
330 if (last_prerender_seen_time_.is_null()) | 341 if (last_prerender_seen_time_.is_null()) |
331 return false; | 342 return false; |
332 return GetTimeSinceLastPrerender() <= | 343 return GetTimeSinceLastPrerender() <= prerender_ttl_; |
333 base::TimeDelta::FromSeconds(kWindowDurationSeconds); | |
334 } | 344 } |
335 | 345 |
336 void PrerenderHistograms::RecordTimeUntilUsed( | 346 void PrerenderHistograms::RecordTimeUntilUsed( |
347 Origin origin, | |
337 base::TimeDelta time_until_used, | 348 base::TimeDelta time_until_used, |
338 base::TimeDelta time_to_live) const { | 349 base::TimeDelta time_to_live) const { |
339 PREFIXED_HISTOGRAM( | 350 PREFIXED_HISTOGRAM( |
340 "TimeUntilUsed", | 351 "TimeUntilUsed", origin, |
341 UMA_HISTOGRAM_CUSTOM_TIMES( | 352 UMA_HISTOGRAM_CUSTOM_TIMES( |
342 name, | 353 name, |
343 time_until_used, | 354 time_until_used, |
344 base::TimeDelta::FromMilliseconds(10), | 355 base::TimeDelta::FromMilliseconds(10), |
345 time_to_live, | 356 time_to_live, |
346 50)); | 357 50)); |
347 } | 358 } |
348 | 359 |
349 void PrerenderHistograms::RecordPerSessionCount(int count) const { | 360 void PrerenderHistograms::RecordPerSessionCount(Origin origin, |
361 int count) const { | |
350 PREFIXED_HISTOGRAM( | 362 PREFIXED_HISTOGRAM( |
351 "PrerendersPerSessionCount", | 363 "PrerendersPerSessionCount", origin, |
352 UMA_HISTOGRAM_COUNTS(name, count)); | 364 UMA_HISTOGRAM_COUNTS(name, count)); |
353 } | 365 } |
354 | 366 |
355 void PrerenderHistograms::RecordTimeBetweenPrerenderRequests( | 367 void PrerenderHistograms::RecordTimeBetweenPrerenderRequests( |
356 base::TimeDelta time) const { | 368 Origin origin, base::TimeDelta time) const { |
357 PREFIXED_HISTOGRAM( | 369 PREFIXED_HISTOGRAM( |
358 "TimeBetweenPrerenderRequests", | 370 "TimeBetweenPrerenderRequests", origin, |
359 UMA_HISTOGRAM_TIMES(name, time)); | 371 UMA_HISTOGRAM_TIMES(name, time)); |
360 } | 372 } |
361 | 373 |
362 void PrerenderHistograms::RecordFinalStatus( | 374 void PrerenderHistograms::RecordFinalStatus( |
363 Origin origin, | 375 Origin origin, |
364 uint8 experiment_id, | 376 uint8 experiment_id, |
365 PrerenderContents::MatchCompleteStatus mc_status, | 377 PrerenderContents::MatchCompleteStatus mc_status, |
366 FinalStatus final_status) const { | 378 FinalStatus final_status) const { |
367 DCHECK(final_status != FINAL_STATUS_MAX); | 379 DCHECK(final_status != FINAL_STATUS_MAX); |
368 | 380 |
(...skipping 13 matching lines...) Expand all Loading... | |
382 UMA_HISTOGRAM_ENUMERATION(name, final_status, FINAL_STATUS_MAX)); | 394 UMA_HISTOGRAM_ENUMERATION(name, final_status, FINAL_STATUS_MAX)); |
383 } | 395 } |
384 } | 396 } |
385 | 397 |
386 uint8 PrerenderHistograms::GetCurrentExperimentId() const { | 398 uint8 PrerenderHistograms::GetCurrentExperimentId() const { |
387 if (!WithinWindow()) | 399 if (!WithinWindow()) |
388 return kNoExperiment; | 400 return kNoExperiment; |
389 return last_experiment_id_; | 401 return last_experiment_id_; |
390 } | 402 } |
391 | 403 |
392 Origin PrerenderHistograms::GetCurrentOrigin() const { | |
393 if (!WithinWindow()) | |
394 return ORIGIN_LINK_REL_PRERENDER; | |
395 return last_origin_; | |
396 } | |
397 | |
398 bool PrerenderHistograms::IsOriginExperimentWash() const { | 404 bool PrerenderHistograms::IsOriginExperimentWash() const { |
399 if (!WithinWindow()) | 405 if (!WithinWindow()) |
400 return false; | 406 return false; |
401 return origin_experiment_wash_; | 407 return origin_experiment_wash_; |
402 } | 408 } |
403 | 409 |
404 void PrerenderHistograms::RecordLocalPredictorEvent( | 410 void PrerenderHistograms::RecordLocalPredictorEvent( |
405 PrerenderLocalPredictor::Event event) const { | 411 PrerenderLocalPredictor::Event event) const { |
406 UMA_HISTOGRAM_ENUMERATION( | 412 UMA_HISTOGRAM_ENUMERATION( |
407 ComposeHistogramName("", base::FieldTrial::MakeName( | 413 ComposeHistogramName("", base::FieldTrial::MakeName( |
408 "LocalPredictorEvent", "Prerender")), | 414 "LocalPredictorEvent", "Prerender")), |
409 event, | 415 event, |
410 PrerenderLocalPredictor::EVENT_MAX_VALUE); | 416 PrerenderLocalPredictor::EVENT_MAX_VALUE); |
411 } | 417 } |
412 | 418 |
413 void PrerenderHistograms::RecordLocalPredictorTimeUntilUsed( | 419 void PrerenderHistograms::RecordLocalPredictorTimeUntilUsed( |
414 base::TimeDelta time_until_used, base::TimeDelta max_age) const { | 420 Origin origin, |
mmenke
2012/10/08 18:20:07
The function name kinda implies the origin. Think
| |
421 base::TimeDelta time_until_used, | |
422 base::TimeDelta max_age) const { | |
415 PREFIXED_HISTOGRAM( | 423 PREFIXED_HISTOGRAM( |
416 "LocalPredictorTimeUntilUsed", | 424 "LocalPredictorTimeUntilUsed", origin, |
417 UMA_HISTOGRAM_CUSTOM_TIMES( | 425 UMA_HISTOGRAM_CUSTOM_TIMES( |
418 name, | 426 name, |
419 time_until_used, | 427 time_until_used, |
420 base::TimeDelta::FromMilliseconds(10), | 428 base::TimeDelta::FromMilliseconds(10), |
421 max_age, | 429 max_age, |
422 50)); | 430 50)); |
423 } | 431 } |
424 | 432 |
425 } // namespace prerender | 433 } // namespace prerender |
OLD | NEW |