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

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

Issue 11028037: Fix prerender histograms for multiple prerender case. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: ... new tests, indent. 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_local_predictor.h" 5 #include "chrome/browser/prerender/prerender_local_predictor.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <ctype.h> 8 #include <ctype.h>
9 #include <map> 9 #include <map>
10 #include <set> 10 #include <set>
11 11
12 #include "base/metrics/field_trial.h"
12 #include "base/metrics/histogram.h" 13 #include "base/metrics/histogram.h"
13 #include "base/timer.h" 14 #include "base/timer.h"
14 #include "chrome/browser/prerender/prerender_histograms.h" 15 #include "chrome/browser/prerender/prerender_histograms.h"
15 #include "chrome/browser/prerender/prerender_manager.h" 16 #include "chrome/browser/prerender/prerender_manager.h"
16 #include "chrome/browser/profiles/profile.h" 17 #include "chrome/browser/profiles/profile.h"
17 #include "chrome/browser/history/history.h" 18 #include "chrome/browser/history/history.h"
18 #include "chrome/browser/history/history_database.h" 19 #include "chrome/browser/history/history_database.h"
19 #include "chrome/browser/history/history_service_factory.h" 20 #include "chrome/browser/history/history_service_factory.h"
20 #include "content/public/browser/browser_thread.h" 21 #include "content/public/browser/browser_thread.h"
21 #include "content/public/common/page_transition_types.h" 22 #include "content/public/common/page_transition_types.h"
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
193 return; 194 return;
194 visit_history_->push_back(info); 195 visit_history_->push_back(info);
195 if (static_cast<int>(visit_history_->size()) > kVisitHistoryPruneThreshold) { 196 if (static_cast<int>(visit_history_->size()) > kVisitHistoryPruneThreshold) {
196 visit_history_->erase(visit_history_->begin(), 197 visit_history_->erase(visit_history_->begin(),
197 visit_history_->begin() + kVisitHistoryPruneAmount); 198 visit_history_->begin() + kVisitHistoryPruneAmount);
198 } 199 }
199 RecordEvent(EVENT_ADD_VISIT_INITIALIZED); 200 RecordEvent(EVENT_ADD_VISIT_INITIALIZED);
200 if (current_prerender_.get() && 201 if (current_prerender_.get() &&
201 current_prerender_->url_id == info.url_id && 202 current_prerender_->url_id == info.url_id &&
202 IsPrerenderStillValid(current_prerender_.get())) { 203 IsPrerenderStillValid(current_prerender_.get())) {
203 prerender_manager_->histograms()->RecordLocalPredictorTimeUntilUsed( 204 UMA_HISTOGRAM_CUSTOM_TIMES(
205 "Prerender.LocalPredictorTimeUntilUsed",
204 GetCurrentTime() - current_prerender_->actual_start_time, 206 GetCurrentTime() - current_prerender_->actual_start_time,
205 base::TimeDelta::FromMilliseconds(kMaxLocalPredictionTimeMs)); 207 base::TimeDelta::FromMilliseconds(10),
208 base::TimeDelta::FromMilliseconds(kMaxLocalPredictionTimeMs),
209 50);
206 last_swapped_in_prerender_.reset(current_prerender_.release()); 210 last_swapped_in_prerender_.reset(current_prerender_.release());
207 RecordEvent(EVENT_ADD_VISIT_PRERENDER_IDENTIFIED); 211 RecordEvent(EVENT_ADD_VISIT_PRERENDER_IDENTIFIED);
208 } 212 }
209 if (ShouldExcludeTransitionForPrediction(info.transition)) 213 if (ShouldExcludeTransitionForPrediction(info.transition))
210 return; 214 return;
211 RecordEvent(EVENT_ADD_VISIT_RELEVANT_TRANSITION); 215 RecordEvent(EVENT_ADD_VISIT_RELEVANT_TRANSITION);
212 base::TimeDelta max_age = 216 base::TimeDelta max_age =
213 base::TimeDelta::FromMilliseconds(kMaxLocalPredictionTimeMs); 217 base::TimeDelta::FromMilliseconds(kMaxLocalPredictionTimeMs);
214 base::TimeDelta min_age = 218 base::TimeDelta min_age =
215 base::TimeDelta::FromMilliseconds(kMinLocalPredictionTimeMs); 219 base::TimeDelta::FromMilliseconds(kMinLocalPredictionTimeMs);
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
363 url, page_load_time)) { 367 url, page_load_time)) {
364 prerender.reset(last_swapped_in_prerender_.release()); 368 prerender.reset(last_swapped_in_prerender_.release());
365 } 369 }
366 if (DoesPrerenderMatchPLTRecord(current_prerender_.get(), 370 if (DoesPrerenderMatchPLTRecord(current_prerender_.get(),
367 url, page_load_time)) { 371 url, page_load_time)) {
368 prerender.reset(current_prerender_.release()); 372 prerender.reset(current_prerender_.release());
369 } 373 }
370 if (!prerender.get()) 374 if (!prerender.get())
371 return; 375 return;
372 if (IsPrerenderStillValid(prerender.get())) { 376 if (IsPrerenderStillValid(prerender.get())) {
377 UMA_HISTOGRAM_CUSTOM_TIMES("Prerender.SimulatedLocalBrowsingBaselinePLT",
378 page_load_time,
379 base::TimeDelta::FromMilliseconds(10),
380 base::TimeDelta::FromSeconds(60),
381 100);
382
373 base::TimeDelta prerender_age = GetCurrentTime() - prerender->start_time; 383 base::TimeDelta prerender_age = GetCurrentTime() - prerender->start_time;
374 prerender_manager_->histograms()->RecordSimulatedLocalBrowsingBaselinePLT(
375 page_load_time, url);
376 if (prerender_age > page_load_time) { 384 if (prerender_age > page_load_time) {
377 base::TimeDelta new_plt; 385 base::TimeDelta new_plt;
378 if (prerender_age < 2 * page_load_time) 386 if (prerender_age < 2 * page_load_time)
379 new_plt = 2 * page_load_time - prerender_age; 387 new_plt = 2 * page_load_time - prerender_age;
380 prerender_manager_->histograms()->RecordSimulatedLocalBrowsingPLT( 388 UMA_HISTOGRAM_CUSTOM_TIMES("Prerender.SimulatedLocalBrowsingPLT",
381 new_plt, url); 389 new_plt,
390 base::TimeDelta::FromMilliseconds(10),
391 base::TimeDelta::FromSeconds(60),
392 100);
382 } 393 }
383
384 } 394 }
385 } 395 }
386 396
387 bool PrerenderLocalPredictor::IsPrerenderStillValid( 397 bool PrerenderLocalPredictor::IsPrerenderStillValid(
388 PrerenderLocalPredictor::PrerenderData* prerender) const { 398 PrerenderLocalPredictor::PrerenderData* prerender) const {
389 return (prerender && 399 return (prerender &&
390 (prerender->start_time + 400 (prerender->start_time +
391 base::TimeDelta::FromMilliseconds(kMaxLocalPredictionTimeMs)) 401 base::TimeDelta::FromMilliseconds(kMaxLocalPredictionTimeMs))
392 > GetCurrentTime()); 402 > GetCurrentTime());
393 } 403 }
394 404
395 void PrerenderLocalPredictor::RecordEvent(PrerenderLocalPredictor::Event event) 405 void PrerenderLocalPredictor::RecordEvent(
396 const { 406 PrerenderLocalPredictor::Event event) const {
397 prerender_manager_->histograms()->RecordLocalPredictorEvent(event); 407 UMA_HISTOGRAM_ENUMERATION(
408 base::FieldTrial::MakeName("Prerender.LocalPredictorEvent", "Prerender"),
409 event, PrerenderLocalPredictor::EVENT_MAX_VALUE);
398 } 410 }
399 411
400 bool PrerenderLocalPredictor::DoesPrerenderMatchPLTRecord( 412 bool PrerenderLocalPredictor::DoesPrerenderMatchPLTRecord(
401 PrerenderData* prerender, const GURL& url, base::TimeDelta plt) const { 413 PrerenderData* prerender, const GURL& url, base::TimeDelta plt) const {
402 if (prerender && prerender->start_time < GetCurrentTime() - plt) { 414 if (prerender && prerender->start_time < GetCurrentTime() - plt) {
403 if (prerender->url.is_empty()) 415 if (prerender->url.is_empty())
404 RecordEvent(EVENT_ERROR_NO_PRERENDER_URL_FOR_PLT); 416 RecordEvent(EVENT_ERROR_NO_PRERENDER_URL_FOR_PLT);
405 return (prerender->url == url); 417 return (prerender->url == url);
406 } else { 418 } else {
407 return false; 419 return false;
408 } 420 }
409 } 421 }
410 422
411 bool PrerenderLocalPredictor::ShouldReplaceCurrentPrerender( 423 bool PrerenderLocalPredictor::ShouldReplaceCurrentPrerender(
412 double priority) const { 424 double priority) const {
413 base::TimeDelta max_age = 425 base::TimeDelta max_age =
414 base::TimeDelta::FromMilliseconds(kMaxLocalPredictionTimeMs); 426 base::TimeDelta::FromMilliseconds(kMaxLocalPredictionTimeMs);
415 return (!current_prerender_.get()) || 427 return (!current_prerender_.get()) ||
416 current_prerender_->priority < priority || 428 current_prerender_->priority < priority ||
417 current_prerender_->start_time < GetCurrentTime() - max_age; 429 current_prerender_->start_time < GetCurrentTime() - max_age;
418 } 430 }
419 431
420 } // namespace prerender 432 } // namespace prerender
OLDNEW
« no previous file with comments | « chrome/browser/prerender/prerender_histograms.cc ('k') | chrome/browser/prerender/prerender_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698