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

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: add an histogram 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
197 if (GetMode() == PRERENDER_MODE_EXPERIMENT_ONE_PRERENDER_GROUP) {
198 config_.max_concurrency = 1;
199 }
199 } 200 }
200 201
201 PrerenderManager::~PrerenderManager() { 202 PrerenderManager::~PrerenderManager() {
202 } 203 }
203 204
204 void PrerenderManager::Shutdown() { 205 void PrerenderManager::Shutdown() {
205 DoShutdown(); 206 DoShutdown();
206 } 207 }
207 208
208 PrerenderHandle* PrerenderManager::AddPrerenderFromLinkRelPrerender( 209 PrerenderHandle* PrerenderManager::AddPrerenderFromLinkRelPrerender(
(...skipping 343 matching lines...) Expand 10 before | Expand all | Expand 10 after
552 return "_Disabled"; 553 return "_Disabled";
553 case PRERENDER_MODE_ENABLED: 554 case PRERENDER_MODE_ENABLED:
554 case PRERENDER_MODE_EXPERIMENT_PRERENDER_GROUP: 555 case PRERENDER_MODE_EXPERIMENT_PRERENDER_GROUP:
555 return "_Enabled"; 556 return "_Enabled";
556 case PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP: 557 case PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP:
557 return "_Control"; 558 return "_Control";
558 case PRERENDER_MODE_EXPERIMENT_5MIN_TTL_GROUP: 559 case PRERENDER_MODE_EXPERIMENT_5MIN_TTL_GROUP:
559 return "_5MinTTL"; 560 return "_5MinTTL";
560 case PRERENDER_MODE_EXPERIMENT_NO_USE_GROUP: 561 case PRERENDER_MODE_EXPERIMENT_NO_USE_GROUP:
561 return "_NoUse"; 562 return "_NoUse";
563 case PRERENDER_MODE_EXPERIMENT_ONE_PRERENDER_GROUP:
564 return "_One";
562 case PRERENDER_MODE_MAX: 565 case PRERENDER_MODE_MAX:
563 NOTREACHED() << "Invalid PrerenderManager mode."; 566 NOTREACHED() << "Invalid PrerenderManager mode.";
564 break; 567 break;
565 }; 568 };
566 return ""; 569 return "";
567 } 570 }
568 571
569 // static 572 // static
570 bool PrerenderManager::IsPrerenderingPossible() { 573 bool PrerenderManager::IsPrerenderingPossible() {
571 return GetMode() != PRERENDER_MODE_DISABLED; 574 return GetMode() != PRERENDER_MODE_DISABLED;
(...skipping 349 matching lines...) Expand 10 before | Expand all | Expand 10 after
921 // by a navigation and is unlikely to be the same site. 924 // by a navigation and is unlikely to be the same site.
922 RecordFinalStatus(origin, experiment, FINAL_STATUS_RATE_LIMIT_EXCEEDED); 925 RecordFinalStatus(origin, experiment, FINAL_STATUS_RATE_LIMIT_EXCEEDED);
923 return NULL; 926 return NULL;
924 } 927 }
925 928
926 PrerenderContents* prerender_contents = CreatePrerenderContents( 929 PrerenderContents* prerender_contents = CreatePrerenderContents(
927 url, referrer, origin, experiment); 930 url, referrer, origin, experiment);
928 if (!prerender_contents || !prerender_contents->Init()) 931 if (!prerender_contents || !prerender_contents->Init())
929 return NULL; 932 return NULL;
930 933
931 histograms_->RecordPrerenderStarted(origin);
932
933 // TODO(cbentzel): Move invalid checks here instead of PrerenderContents? 934 // TODO(cbentzel): Move invalid checks here instead of PrerenderContents?
934 active_prerender_list_.push_back( 935 active_prerender_list_.push_back(
935 linked_ptr<PrerenderData>(new PrerenderData(this, prerender_contents))); 936 linked_ptr<PrerenderData>(new PrerenderData(this, prerender_contents)));
936 PrerenderHandle* prerender_handle = 937 PrerenderHandle* prerender_handle =
937 new PrerenderHandle(active_prerender_list_.back().get()); 938 new PrerenderHandle(active_prerender_list_.back().get());
938 939
939 last_prerender_start_time_ = GetCurrentTimeTicks(); 940 last_prerender_start_time_ = GetCurrentTimeTicks();
940 941
941 gfx::Size contents_size = 942 gfx::Size contents_size =
942 size.IsEmpty() ? config_.default_tab_bounds.size() : size; 943 size.IsEmpty() ? config_.default_tab_bounds.size() : size;
943 944
944 prerender_contents->StartPrerendering(process_id, contents_size, 945 prerender_contents->StartPrerendering(process_id, contents_size,
945 session_storage_namespace, 946 session_storage_namespace,
946 control_group_behavior); 947 control_group_behavior);
947 948
948 while (active_prerender_list_.size() > config_.max_elements) { 949 while (active_prerender_list_.size() > config_.max_concurrency) {
949 prerender_contents = active_prerender_list_.front()->contents_; 950 prerender_contents = active_prerender_list_.front()->contents_;
950 DCHECK(prerender_contents); 951 DCHECK(prerender_contents);
951 prerender_contents->Destroy(FINAL_STATUS_EVICTED); 952 prerender_contents->Destroy(FINAL_STATUS_EVICTED);
952 } 953 }
953 954
955 histograms_->RecordPrerenderStarted(origin, active_prerender_list_.size());
dominich 2012/07/19 16:04:38 changing this is bad - we'll have a mismatch betwe
gavinp 2012/07/23 18:35:21 Done.
956
954 StartSchedulingPeriodicCleanups(); 957 StartSchedulingPeriodicCleanups();
955 return prerender_handle; 958 return prerender_handle;
956 } 959 }
957 960
958 void PrerenderManager::StartSchedulingPeriodicCleanups() { 961 void PrerenderManager::StartSchedulingPeriodicCleanups() {
959 DCHECK(CalledOnValidThread()); 962 DCHECK(CalledOnValidThread());
960 if (repeating_timer_.IsRunning()) 963 if (repeating_timer_.IsRunning())
961 return; 964 return;
962 repeating_timer_.Start(FROM_HERE, 965 repeating_timer_.Start(FROM_HERE,
963 base::TimeDelta::FromMilliseconds(kPeriodicCleanupIntervalMs), 966 base::TimeDelta::FromMilliseconds(kPeriodicCleanupIntervalMs),
(...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after
1225 return NULL; 1228 return NULL;
1226 Profile* profile = Profile::FromBrowserContext( 1229 Profile* profile = Profile::FromBrowserContext(
1227 render_process_host->GetBrowserContext()); 1230 render_process_host->GetBrowserContext());
1228 if (!profile) 1231 if (!profile)
1229 return NULL; 1232 return NULL;
1230 return PrerenderManagerFactory::GetInstance()->GetForProfile(profile); 1233 return PrerenderManagerFactory::GetInstance()->GetForProfile(profile);
1231 } 1234 }
1232 1235
1233 } // namespace prerender 1236 } // namespace prerender
1234 1237
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698