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

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

Issue 10802024: Make three simultanious prerenders the default maximum in Canary and Dev only. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix order of PrerenderManagerMode Created 8 years, 5 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_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 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 62
63 namespace { 63 namespace {
64 64
65 // Time window for which we will record windowed PLT's from the last 65 // Time window for which we will record windowed PLT's from the last
66 // observed link rel=prefetch tag. 66 // observed link rel=prefetch tag.
67 const int kWindowDurationSeconds = 30; 67 const int kWindowDurationSeconds = 30;
68 68
69 // Time interval at which periodic cleanups are performed. 69 // Time interval at which periodic cleanups are performed.
70 const int kPeriodicCleanupIntervalMs = 1000; 70 const int kPeriodicCleanupIntervalMs = 1000;
71 71
72 // Time interval before a new prerender is allowed.
73 const int kMinTimeBetweenPrerendersMs = 500;
74
75 // Valid HTTP methods for prerendering. 72 // Valid HTTP methods for prerendering.
76 const char* const kValidHttpMethods[] = { 73 const char* const kValidHttpMethods[] = {
77 "GET", 74 "GET",
78 "HEAD", 75 "HEAD",
79 "OPTIONS", 76 "OPTIONS",
80 "POST", 77 "POST",
81 "TRACE", 78 "TRACE",
82 }; 79 };
83 80
84 // Length of prerender history, for display in chrome://net-internals 81 // Length of prerender history, for display in chrome://net-internals
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 last_prerender_start_time_(GetCurrentTimeTicks() - 186 last_prerender_start_time_(GetCurrentTimeTicks() -
190 base::TimeDelta::FromMilliseconds(kMinTimeBetweenPrerendersMs)), 187 base::TimeDelta::FromMilliseconds(kMinTimeBetweenPrerendersMs)),
191 weak_factory_(this), 188 weak_factory_(this),
192 prerender_history_(new PrerenderHistory(kHistoryLength)), 189 prerender_history_(new PrerenderHistory(kHistoryLength)),
193 histograms_(new PrerenderHistograms()), 190 histograms_(new PrerenderHistograms()),
194 local_predictor_(new PrerenderLocalPredictor(this)) { 191 local_predictor_(new PrerenderLocalPredictor(this)) {
195 // There are some assumptions that the PrerenderManager is on the UI thread. 192 // There are some assumptions that the PrerenderManager is on the UI thread.
196 // Any other checks simply make sure that the PrerenderManager is accessed on 193 // Any other checks simply make sure that the PrerenderManager is accessed on
197 // the same thread that it was created on. 194 // the same thread that it was created on.
198 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 195 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
196 config_.max_concurrency = GetMaxConcurrency();
199 } 197 }
200 198
201 PrerenderManager::~PrerenderManager() { 199 PrerenderManager::~PrerenderManager() {
202 } 200 }
203 201
204 void PrerenderManager::Shutdown() { 202 void PrerenderManager::Shutdown() {
205 DoShutdown(); 203 DoShutdown();
206 } 204 }
207 205
208 PrerenderHandle* PrerenderManager::AddPrerenderFromLinkRelPrerender( 206 PrerenderHandle* PrerenderManager::AddPrerenderFromLinkRelPrerender(
(...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after
548 // static 546 // static
549 const char* PrerenderManager::GetModeString() { 547 const char* PrerenderManager::GetModeString() {
550 switch (mode_) { 548 switch (mode_) {
551 case PRERENDER_MODE_DISABLED: 549 case PRERENDER_MODE_DISABLED:
552 return "_Disabled"; 550 return "_Disabled";
553 case PRERENDER_MODE_ENABLED: 551 case PRERENDER_MODE_ENABLED:
554 case PRERENDER_MODE_EXPERIMENT_PRERENDER_GROUP: 552 case PRERENDER_MODE_EXPERIMENT_PRERENDER_GROUP:
555 return "_Enabled"; 553 return "_Enabled";
556 case PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP: 554 case PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP:
557 return "_Control"; 555 return "_Control";
556 case PRERENDER_MODE_EXPERIMENT_MULTI_PRERENDER_GROUP:
557 return "_Multi";
558 case PRERENDER_MODE_EXPERIMENT_5MIN_TTL_GROUP: 558 case PRERENDER_MODE_EXPERIMENT_5MIN_TTL_GROUP:
559 return "_5MinTTL"; 559 return "_5MinTTL";
560 case PRERENDER_MODE_EXPERIMENT_NO_USE_GROUP: 560 case PRERENDER_MODE_EXPERIMENT_NO_USE_GROUP:
561 return "_NoUse"; 561 return "_NoUse";
562 case PRERENDER_MODE_MAX: 562 case PRERENDER_MODE_MAX:
563 NOTREACHED() << "Invalid PrerenderManager mode."; 563 NOTREACHED() << "Invalid PrerenderManager mode.";
564 break; 564 break;
565 }; 565 };
566 return ""; 566 return "";
567 } 567 }
(...skipping 11 matching lines...) Expand all
579 // static 579 // static
580 bool PrerenderManager::IsControlGroup() { 580 bool PrerenderManager::IsControlGroup() {
581 return GetMode() == PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP; 581 return GetMode() == PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP;
582 } 582 }
583 583
584 // static 584 // static
585 bool PrerenderManager::IsNoUseGroup() { 585 bool PrerenderManager::IsNoUseGroup() {
586 return GetMode() == PRERENDER_MODE_EXPERIMENT_NO_USE_GROUP; 586 return GetMode() == PRERENDER_MODE_EXPERIMENT_NO_USE_GROUP;
587 } 587 }
588 588
589 // static
590 size_t PrerenderManager::GetMaxConcurrency() {
591 if (GetMode() == PRERENDER_MODE_EXPERIMENT_MULTI_PRERENDER_GROUP)
592 return 3;
593 return 1;
594 }
595
589 bool PrerenderManager::IsWebContentsPrerendering( 596 bool PrerenderManager::IsWebContentsPrerendering(
590 WebContents* web_contents) const { 597 WebContents* web_contents) const {
591 DCHECK(CalledOnValidThread()); 598 DCHECK(CalledOnValidThread());
592 for (std::list<linked_ptr<PrerenderData> >::const_iterator it = 599 for (std::list<linked_ptr<PrerenderData> >::const_iterator it =
593 active_prerender_list_.begin(); 600 active_prerender_list_.begin();
594 it != active_prerender_list_.end(); 601 it != active_prerender_list_.end();
595 ++it) { 602 ++it) {
596 TabContents* prerender_tab_contents = 603 TabContents* prerender_tab_contents =
597 it->get()->contents_->prerender_contents(); 604 it->get()->contents_->prerender_contents();
598 if (prerender_tab_contents && 605 if (prerender_tab_contents &&
(...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after
938 945
939 last_prerender_start_time_ = GetCurrentTimeTicks(); 946 last_prerender_start_time_ = GetCurrentTimeTicks();
940 947
941 gfx::Size contents_size = 948 gfx::Size contents_size =
942 size.IsEmpty() ? config_.default_tab_bounds.size() : size; 949 size.IsEmpty() ? config_.default_tab_bounds.size() : size;
943 950
944 prerender_contents->StartPrerendering(process_id, contents_size, 951 prerender_contents->StartPrerendering(process_id, contents_size,
945 session_storage_namespace, 952 session_storage_namespace,
946 control_group_behavior); 953 control_group_behavior);
947 954
948 while (active_prerender_list_.size() > config_.max_elements) { 955 while (active_prerender_list_.size() > config_.max_concurrency) {
949 prerender_contents = active_prerender_list_.front()->contents_; 956 prerender_contents = active_prerender_list_.front()->contents_;
950 DCHECK(prerender_contents); 957 DCHECK(prerender_contents);
951 prerender_contents->Destroy(FINAL_STATUS_EVICTED); 958 prerender_contents->Destroy(FINAL_STATUS_EVICTED);
952 } 959 }
953 960
961 histograms_->RecordConcurrency(active_prerender_list_.size());
962
954 StartSchedulingPeriodicCleanups(); 963 StartSchedulingPeriodicCleanups();
955 return prerender_handle; 964 return prerender_handle;
956 } 965 }
957 966
958 void PrerenderManager::StartSchedulingPeriodicCleanups() { 967 void PrerenderManager::StartSchedulingPeriodicCleanups() {
959 DCHECK(CalledOnValidThread()); 968 DCHECK(CalledOnValidThread());
960 if (repeating_timer_.IsRunning()) 969 if (repeating_timer_.IsRunning())
961 return; 970 return;
962 repeating_timer_.Start(FROM_HERE, 971 repeating_timer_.Start(FROM_HERE,
963 base::TimeDelta::FromMilliseconds(kPeriodicCleanupIntervalMs), 972 base::TimeDelta::FromMilliseconds(kPeriodicCleanupIntervalMs),
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after
1224 if (!render_process_host || !render_process_host->GetBrowserContext()) 1233 if (!render_process_host || !render_process_host->GetBrowserContext())
1225 return NULL; 1234 return NULL;
1226 Profile* profile = Profile::FromBrowserContext( 1235 Profile* profile = Profile::FromBrowserContext(
1227 render_process_host->GetBrowserContext()); 1236 render_process_host->GetBrowserContext());
1228 if (!profile) 1237 if (!profile)
1229 return NULL; 1238 return NULL;
1230 return PrerenderManagerFactory::GetInstance()->GetForProfile(profile); 1239 return PrerenderManagerFactory::GetInstance()->GetForProfile(profile);
1231 } 1240 }
1232 1241
1233 } // namespace prerender 1242 } // namespace prerender
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698