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

Unified Diff: chrome/browser/prerender/prerender_manager.cc

Issue 8503040: Prerendering: Add MatchComplete PPLT (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 1 month 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 | « chrome/browser/prerender/prerender_manager.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/prerender/prerender_manager.cc
===================================================================
--- chrome/browser/prerender/prerender_manager.cc (revision 109159)
+++ chrome/browser/prerender/prerender_manager.cc (working copy)
@@ -130,6 +130,11 @@
}
// static
+bool PrerenderManager::ActuallyPrerendering() {
+ return IsPrerenderingPossible() && !IsControlGroup();
+}
+
+// static
bool PrerenderManager::IsControlGroup() {
return GetMode() == PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP;
}
@@ -647,14 +652,50 @@
return true;
}
-void PrerenderManager::MoveEntryToPendingDelete(PrerenderContents* entry) {
+void PrerenderManager::MoveEntryToPendingDelete(PrerenderContents* entry,
+ FinalStatus final_status) {
DCHECK(CalledOnValidThread());
+ DCHECK(entry);
DCHECK(!IsPendingDelete(entry));
+
+ // If this PrerenderContents is being deleted due to a cancellation, we need
+ // to create a dummy replacement for PPLT accounting purposes for the
+ // Match Complete group.
+ // This is the case if the cancellation is for any reason that would not occur
+ // in the control group case.
+ PrerenderContents* dummy_replacement_prerender_contents = NULL;
+ if (final_status != FINAL_STATUS_USED &&
dominich 2011/11/09 20:48:16 Move this to a utility function IsCancellationStat
tburkard 2011/11/10 18:36:55 Done.
+ final_status != FINAL_STATUS_TIMED_OUT &&
+ final_status != FINAL_STATUS_EVICTED &&
+ final_status != FINAL_STATUS_MANAGER_SHUTDOWN &&
+ final_status != FINAL_STATUS_WINDOW_OPENER &&
+ final_status != FINAL_STATUS_FRAGMENT_MISMATCH &&
+ final_status != FINAL_STATUS_CACHE_OR_HISTORY_CLEARED &&
+ final_status != FINAL_STATUS_CANCELLED &&
+ final_status != FINAL_STATUS_MATCH_COMPLETE_DUMMY) {
+ // TODO(tburkard): I'd like to DCHECK that we are actually prerendering.
+ // However, what if new conditions are added and this list is not being
+ // updated. Not sure what's the best thing to do here. For now, I will
+ // just check whether we are actually prerendering.
+ if (ActuallyPrerendering()) {
+ dummy_replacement_prerender_contents = CreatePrerenderContents(
+ entry->prerender_url(),
+ entry->referrer(),
+ entry->origin(),
+ entry->experiment_id());
+ }
+ }
+
for (std::list<PrerenderContentsData>::iterator it = prerender_list_.begin();
it != prerender_list_.end();
++it) {
if (it->contents_ == entry) {
- prerender_list_.erase(it);
+ if (dummy_replacement_prerender_contents) {
+ it->contents_ = dummy_replacement_prerender_contents;
+ it->contents_->set_final_status(FINAL_STATUS_MATCH_COMPLETE_DUMMY);
+ } else {
+ prerender_list_.erase(it);
+ }
break;
}
}
@@ -726,12 +767,11 @@
if (!prerender_manager->is_enabled())
return;
bool was_prerender =
- ((mode_ == PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP &&
- prerender_manager->WouldTabContentsBePrerendered(tab_contents)) ||
- (mode_ == PRERENDER_MODE_EXPERIMENT_PRERENDER_GROUP &&
- prerender_manager->IsTabContentsPrerendered(tab_contents)));
+ prerender_manager->IsTabContentsPrerendered(tab_contents);
+ bool was_complete_prerender = was_prerender ||
+ prerender_manager->WouldTabContentsBePrerendered(tab_contents);
prerender_manager->histograms_->RecordPerceivedPageLoadTime(
- perceived_page_load_time, was_prerender, url);
+ perceived_page_load_time, was_prerender, was_complete_prerender, url);
}
bool PrerenderManager::is_enabled() const {
« no previous file with comments | « chrome/browser/prerender/prerender_manager.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698