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

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

Issue 11348357: Add observer interface to PrerenderContents. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: final review remediation, clear to land version Created 8 years 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_manager.h" 5 #include "chrome/browser/prerender/prerender_manager.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <functional> 8 #include <functional>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 402 matching lines...) Expand 10 before | Expand all | Expand 10 after
413 413
414 if (!prerender_contents->load_start_time().is_null()) { 414 if (!prerender_contents->load_start_time().is_null()) {
415 histograms_->RecordTimeUntilUsed( 415 histograms_->RecordTimeUntilUsed(
416 prerender_contents->origin(), 416 prerender_contents->origin(),
417 GetCurrentTimeTicks() - prerender_contents->load_start_time()); 417 GetCurrentTimeTicks() - prerender_contents->load_start_time());
418 } 418 }
419 419
420 histograms_->RecordPerSessionCount(prerender_contents->origin(), 420 histograms_->RecordPerSessionCount(prerender_contents->origin(),
421 ++prerenders_per_session_count_); 421 ++prerenders_per_session_count_);
422 histograms_->RecordUsedPrerender(prerender_contents->origin()); 422 histograms_->RecordUsedPrerender(prerender_contents->origin());
423 prerender_contents->set_final_status(FINAL_STATUS_USED); 423 prerender_contents->SetFinalStatus(FINAL_STATUS_USED);
424 424
425 RenderViewHost* new_render_view_host = 425 RenderViewHost* new_render_view_host =
426 prerender_contents->prerender_contents()->web_contents()-> 426 prerender_contents->prerender_contents()->web_contents()->
427 GetRenderViewHost(); 427 GetRenderViewHost();
428 new_render_view_host->Send( 428 new_render_view_host->Send(
429 new PrerenderMsg_SetIsPrerendering(new_render_view_host->GetRoutingID(), 429 new PrerenderMsg_SetIsPrerendering(new_render_view_host->GetRoutingID(),
430 false)); 430 false));
431 431
432 // Start pending prerender requests from the PrerenderContents, if there are 432 // Start pending prerender requests from the PrerenderContents, if there are
433 // any. 433 // any.
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
619 return ""; 619 return "";
620 } 620 }
621 621
622 // static 622 // static
623 bool PrerenderManager::IsPrerenderingPossible() { 623 bool PrerenderManager::IsPrerenderingPossible() {
624 return GetMode() != PRERENDER_MODE_DISABLED; 624 return GetMode() != PRERENDER_MODE_DISABLED;
625 } 625 }
626 626
627 // static 627 // static
628 bool PrerenderManager::ActuallyPrerendering() { 628 bool PrerenderManager::ActuallyPrerendering() {
629 return IsPrerenderingPossible() && !IsControlGroup(); 629 return IsPrerenderingPossible() && !IsControlGroup(kNoExperiment);
630 } 630 }
631 631
632 // static 632 // static
633 bool PrerenderManager::IsControlGroup() { 633 bool PrerenderManager::IsControlGroup(uint8 experiment_id) {
634 return GetMode() == PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP; 634 return GetMode() == PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP ||
635 IsControlGroupExperiment(experiment_id);
635 } 636 }
636 637
637 // static 638 // static
638 bool PrerenderManager::IsNoUseGroup() { 639 bool PrerenderManager::IsNoUseGroup() {
639 return GetMode() == PRERENDER_MODE_EXPERIMENT_NO_USE_GROUP; 640 return GetMode() == PRERENDER_MODE_EXPERIMENT_NO_USE_GROUP;
640 } 641 }
641 642
642 bool PrerenderManager::IsWebContentsPrerendering( 643 bool PrerenderManager::IsWebContentsPrerendering(
643 WebContents* web_contents, 644 WebContents* web_contents,
644 Origin* origin) const { 645 Origin* origin) const {
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
799 800
800 DictionaryValue* PrerenderManager::GetAsValue() const { 801 DictionaryValue* PrerenderManager::GetAsValue() const {
801 DCHECK(CalledOnValidThread()); 802 DCHECK(CalledOnValidThread());
802 DictionaryValue* dict_value = new DictionaryValue(); 803 DictionaryValue* dict_value = new DictionaryValue();
803 dict_value->Set("history", prerender_history_->GetEntriesAsValue()); 804 dict_value->Set("history", prerender_history_->GetEntriesAsValue());
804 dict_value->Set("active", GetActivePrerendersAsValue()); 805 dict_value->Set("active", GetActivePrerendersAsValue());
805 dict_value->SetBoolean("enabled", enabled_); 806 dict_value->SetBoolean("enabled", enabled_);
806 dict_value->SetBoolean("omnibox_enabled", IsOmniboxEnabled(profile_)); 807 dict_value->SetBoolean("omnibox_enabled", IsOmniboxEnabled(profile_));
807 // If prerender is disabled via a flag this method is not even called. 808 // If prerender is disabled via a flag this method is not even called.
808 std::string enabled_note; 809 std::string enabled_note;
809 if (IsControlGroup()) 810 if (IsControlGroup(kNoExperiment))
810 enabled_note += "(Control group: Not actually prerendering) "; 811 enabled_note += "(Control group: Not actually prerendering) ";
811 if (IsNoUseGroup()) 812 if (IsNoUseGroup())
812 enabled_note += "(No-use group: Not swapping in prerendered pages) "; 813 enabled_note += "(No-use group: Not swapping in prerendered pages) ";
813 if (GetMode() == PRERENDER_MODE_EXPERIMENT_15MIN_TTL_GROUP) 814 if (GetMode() == PRERENDER_MODE_EXPERIMENT_15MIN_TTL_GROUP)
814 enabled_note += 815 enabled_note +=
815 "(15 min TTL group: Extended prerender eviction to 15 mins) "; 816 "(15 min TTL group: Extended prerender eviction to 15 mins) ";
816 dict_value->SetString("enabled_note", enabled_note); 817 dict_value->SetString("enabled_note", enabled_note);
817 return dict_value; 818 return dict_value;
818 } 819 }
819 820
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
1009 IsGoogleSearchResultURL(referrer.url)) { 1010 IsGoogleSearchResultURL(referrer.url)) {
1010 origin = ORIGIN_GWS_PRERENDER; 1011 origin = ORIGIN_GWS_PRERENDER;
1011 } 1012 }
1012 1013
1013 DeleteOldEntries(); 1014 DeleteOldEntries();
1014 to_delete_prerenders_.clear(); 1015 to_delete_prerenders_.clear();
1015 1016
1016 GURL url = url_arg; 1017 GURL url = url_arg;
1017 GURL alias_url; 1018 GURL alias_url;
1018 uint8 experiment = GetQueryStringBasedExperiment(url_arg); 1019 uint8 experiment = GetQueryStringBasedExperiment(url_arg);
1019 bool control_group_behavior = 1020 if (IsControlGroup(experiment) &&
1020 IsControlGroup() || IsControlGroupExperiment(experiment);
1021 if (control_group_behavior &&
1022 MaybeGetQueryStringBasedAliasURL(url, &alias_url)) { 1021 MaybeGetQueryStringBasedAliasURL(url, &alias_url)) {
1023 url = alias_url; 1022 url = alias_url;
1024 } 1023 }
1025 1024
1026 // From here on, we will record a FinalStatus so we need to register with the 1025 // From here on, we will record a FinalStatus so we need to register with the
1027 // histogram tracking. 1026 // histogram tracking.
1028 histograms_->RecordPrerender(origin, url_arg); 1027 histograms_->RecordPrerender(origin, url_arg);
1029 1028
1030 if (PrerenderData* preexisting_prerender_data = 1029 if (PrerenderData* preexisting_prerender_data =
1031 FindPrerenderData(url, session_storage_namespace)) { 1030 FindPrerenderData(url, session_storage_namespace)) {
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1076 PrerenderHandle* prerender_handle = 1075 PrerenderHandle* prerender_handle =
1077 new PrerenderHandle(active_prerenders_.back()); 1076 new PrerenderHandle(active_prerenders_.back());
1078 SortActivePrerenders(); 1077 SortActivePrerenders();
1079 1078
1080 last_prerender_start_time_ = GetCurrentTimeTicks(); 1079 last_prerender_start_time_ = GetCurrentTimeTicks();
1081 1080
1082 gfx::Size contents_size = 1081 gfx::Size contents_size =
1083 size.IsEmpty() ? config_.default_tab_bounds.size() : size; 1082 size.IsEmpty() ? config_.default_tab_bounds.size() : size;
1084 1083
1085 prerender_contents->StartPrerendering(process_id, contents_size, 1084 prerender_contents->StartPrerendering(process_id, contents_size,
1086 session_storage_namespace, 1085 session_storage_namespace);
1087 control_group_behavior); 1086
1088 DCHECK(control_group_behavior || 1087 DCHECK(IsControlGroup(experiment) ||
1089 prerender_contents->prerendering_has_started()); 1088 prerender_contents->prerendering_has_started());
1090 1089
1091 while (active_prerenders_.size() > config_.max_concurrency) { 1090 while (active_prerenders_.size() > config_.max_concurrency) {
1092 prerender_contents = active_prerenders_.front()->contents(); 1091 prerender_contents = active_prerenders_.front()->contents();
1093 DCHECK(prerender_contents); 1092 DCHECK(prerender_contents);
1094 prerender_contents->Destroy(FINAL_STATUS_EVICTED); 1093 prerender_contents->Destroy(FINAL_STATUS_EVICTED);
1095 } 1094 }
1096 1095
1097 histograms_->RecordConcurrency(active_prerenders_.size(), 1096 histograms_->RecordConcurrency(active_prerenders_.size(),
1098 config_.max_concurrency); 1097 config_.max_concurrency);
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
1177 return base::TimeTicks::Now(); 1176 return base::TimeTicks::Now();
1178 } 1177 }
1179 1178
1180 PrerenderContents* PrerenderManager::CreatePrerenderContents( 1179 PrerenderContents* PrerenderManager::CreatePrerenderContents(
1181 const GURL& url, 1180 const GURL& url,
1182 const content::Referrer& referrer, 1181 const content::Referrer& referrer,
1183 Origin origin, 1182 Origin origin,
1184 uint8 experiment_id) { 1183 uint8 experiment_id) {
1185 DCHECK(CalledOnValidThread()); 1184 DCHECK(CalledOnValidThread());
1186 return prerender_contents_factory_->CreatePrerenderContents( 1185 return prerender_contents_factory_->CreatePrerenderContents(
1187 this, prerender_tracker_, profile_, url, referrer, origin, experiment_id); 1186 this, profile_, url, referrer, origin, experiment_id);
1188 } 1187 }
1189 1188
1190 void PrerenderManager::SortActivePrerenders() { 1189 void PrerenderManager::SortActivePrerenders() {
1191 std::sort(active_prerenders_.begin(), active_prerenders_.end(), 1190 std::sort(active_prerenders_.begin(), active_prerenders_.end(),
1192 PrerenderData::OrderByExpiryTime()); 1191 PrerenderData::OrderByExpiryTime());
1193 } 1192 }
1194 1193
1195 PrerenderManager::PrerenderData* PrerenderManager::FindPrerenderData( 1194 PrerenderManager::PrerenderData* PrerenderManager::FindPrerenderData(
1196 const GURL& url, 1195 const GURL& url,
1197 const SessionStorageNamespace* session_storage_namespace) { 1196 const SessionStorageNamespace* session_storage_namespace) {
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
1358 if (!render_process_host || !render_process_host->GetBrowserContext()) 1357 if (!render_process_host || !render_process_host->GetBrowserContext())
1359 return NULL; 1358 return NULL;
1360 Profile* profile = Profile::FromBrowserContext( 1359 Profile* profile = Profile::FromBrowserContext(
1361 render_process_host->GetBrowserContext()); 1360 render_process_host->GetBrowserContext());
1362 if (!profile) 1361 if (!profile)
1363 return NULL; 1362 return NULL;
1364 return PrerenderManagerFactory::GetInstance()->GetForProfile(profile); 1363 return PrerenderManagerFactory::GetInstance()->GetForProfile(profile);
1365 } 1364 }
1366 1365
1367 } // namespace prerender 1366 } // namespace prerender
OLDNEW
« no previous file with comments | « chrome/browser/prerender/prerender_manager.h ('k') | chrome/browser/prerender/prerender_tracker.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698