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

Side by Side Diff: chrome/browser/prerender/prerender_histograms.cc

Issue 11028037: Fix prerender histograms for multiple prerender case. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: update the rite cl Created 8 years, 2 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698