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

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

Issue 2527233003: [Prerender] Add a "SimpleLoad" mode to be used as a comparison reference (Closed)
Patch Set: add command line flag Created 4 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
« no previous file with comments | « chrome/browser/prerender/prerender_manager.h ('k') | chrome/common/chrome_switches.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <functional> 10 #include <functional>
(...skipping 595 matching lines...) Expand 10 before | Expand all | Expand 10 after
606 // static 606 // static
607 bool PrerenderManager::IsPrerenderingPossible() { 607 bool PrerenderManager::IsPrerenderingPossible() {
608 return GetMode() != PRERENDER_MODE_DISABLED; 608 return GetMode() != PRERENDER_MODE_DISABLED;
609 } 609 }
610 610
611 // static 611 // static
612 bool PrerenderManager::IsNoStatePrefetch() { 612 bool PrerenderManager::IsNoStatePrefetch() {
613 return GetMode() == PRERENDER_MODE_NOSTATE_PREFETCH; 613 return GetMode() == PRERENDER_MODE_NOSTATE_PREFETCH;
614 } 614 }
615 615
616 // static
617 bool PrerenderManager::IsSimpleLoadExperiment() {
618 return GetMode() == PRERENDER_MODE_SIMPLE_LOAD_EXPERIMENT;
619 }
620
616 bool PrerenderManager::IsWebContentsPrerendering( 621 bool PrerenderManager::IsWebContentsPrerendering(
617 const WebContents* web_contents, 622 const WebContents* web_contents,
618 Origin* origin) const { 623 Origin* origin) const {
619 DCHECK_CURRENTLY_ON(BrowserThread::UI); 624 DCHECK_CURRENTLY_ON(BrowserThread::UI);
620 PrerenderContents* prerender_contents = GetPrerenderContents(web_contents); 625 PrerenderContents* prerender_contents = GetPrerenderContents(web_contents);
621 if (!prerender_contents) 626 if (!prerender_contents)
622 return false; 627 return false;
623 628
624 if (origin) 629 if (origin)
625 *origin = prerender_contents->origin(); 630 *origin = prerender_contents->origin();
(...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after
936 // Check if enough time has passed since the last prerender. 941 // Check if enough time has passed since the last prerender.
937 if (!DoesRateLimitAllowPrerender(origin)) { 942 if (!DoesRateLimitAllowPrerender(origin)) {
938 // Cancel the prerender. We could add it to the pending prerender list but 943 // Cancel the prerender. We could add it to the pending prerender list but
939 // this doesn't make sense as the next prerender request will be triggered 944 // this doesn't make sense as the next prerender request will be triggered
940 // by a navigation and is unlikely to be the same site. 945 // by a navigation and is unlikely to be the same site.
941 RecordFinalStatusWithoutCreatingPrerenderContents( 946 RecordFinalStatusWithoutCreatingPrerenderContents(
942 url, origin, FINAL_STATUS_RATE_LIMIT_EXCEEDED); 947 url, origin, FINAL_STATUS_RATE_LIMIT_EXCEEDED);
943 return nullptr; 948 return nullptr;
944 } 949 }
945 950
951 // Record the URL in the prefetch list, even when in full prerender mode, to
952 // enable metrics comparisons.
953 prefetches_.emplace_back(url, GetCurrentTimeTicks(), origin);
954
955 if (IsSimpleLoadExperiment()) {
956 // Exit after adding the url to prefetches_, so that no prefetching occurs
957 // but the page is still tracked as "would have been prefetched".
958 return nullptr;
959 }
960
946 std::unique_ptr<PrerenderContents> prerender_contents = 961 std::unique_ptr<PrerenderContents> prerender_contents =
947 CreatePrerenderContents(url, referrer, origin); 962 CreatePrerenderContents(url, referrer, origin);
948 DCHECK(prerender_contents); 963 DCHECK(prerender_contents);
949 PrerenderContents* prerender_contents_ptr = prerender_contents.get(); 964 PrerenderContents* prerender_contents_ptr = prerender_contents.get();
950 if (IsNoStatePrefetch()) 965 if (IsNoStatePrefetch())
951 prerender_contents_ptr->SetPrerenderMode(PREFETCH_ONLY); 966 prerender_contents_ptr->SetPrerenderMode(PREFETCH_ONLY);
952 active_prerenders_.push_back( 967 active_prerenders_.push_back(
953 base::MakeUnique<PrerenderData>(this, std::move(prerender_contents), 968 base::MakeUnique<PrerenderData>(this, std::move(prerender_contents),
954 GetExpiryTimeForNewPrerender(origin))); 969 GetExpiryTimeForNewPrerender(origin)));
955 if (!prerender_contents_ptr->Init()) { 970 if (!prerender_contents_ptr->Init()) {
956 DCHECK(active_prerenders_.end() == 971 DCHECK(active_prerenders_.end() ==
957 FindIteratorForPrerenderContents(prerender_contents_ptr)); 972 FindIteratorForPrerenderContents(prerender_contents_ptr));
958 return nullptr; 973 return nullptr;
959 } 974 }
960 975
961 histograms_->RecordPrerenderStarted(origin); 976 histograms_->RecordPrerenderStarted(origin);
962 DCHECK(!prerender_contents_ptr->prerendering_has_started()); 977 DCHECK(!prerender_contents_ptr->prerendering_has_started());
963 978
964 if (prerender_contents_ptr->prerender_mode() == PREFETCH_ONLY)
965 prefetches_.emplace_back(url, GetCurrentTimeTicks(), origin);
966
967 std::unique_ptr<PrerenderHandle> prerender_handle = 979 std::unique_ptr<PrerenderHandle> prerender_handle =
968 base::WrapUnique(new PrerenderHandle(active_prerenders_.back().get())); 980 base::WrapUnique(new PrerenderHandle(active_prerenders_.back().get()));
969 SortActivePrerenders(); 981 SortActivePrerenders();
970 982
971 last_prerender_start_time_ = GetCurrentTimeTicks(); 983 last_prerender_start_time_ = GetCurrentTimeTicks();
972 984
973 gfx::Rect contents_bounds = 985 gfx::Rect contents_bounds =
974 bounds.IsEmpty() ? config_.default_tab_bounds : bounds; 986 bounds.IsEmpty() ? config_.default_tab_bounds : bounds;
975 987
976 prerender_contents_ptr->StartPrerendering(contents_bounds, 988 prerender_contents_ptr->StartPrerendering(contents_bounds,
(...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after
1349 return weak_factory_.GetWeakPtr(); 1361 return weak_factory_.GetWeakPtr();
1350 } 1362 }
1351 1363
1352 void PrerenderManager::SetPrerenderContentsFactoryForTest( 1364 void PrerenderManager::SetPrerenderContentsFactoryForTest(
1353 PrerenderContents::Factory* prerender_contents_factory) { 1365 PrerenderContents::Factory* prerender_contents_factory) {
1354 DCHECK_CURRENTLY_ON(BrowserThread::UI); 1366 DCHECK_CURRENTLY_ON(BrowserThread::UI);
1355 prerender_contents_factory_.reset(prerender_contents_factory); 1367 prerender_contents_factory_.reset(prerender_contents_factory);
1356 } 1368 }
1357 1369
1358 } // namespace prerender 1370 } // namespace prerender
OLDNEW
« no previous file with comments | « chrome/browser/prerender/prerender_manager.h ('k') | chrome/common/chrome_switches.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698