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

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

Issue 9463026: Add field trial to extend prerender expiration to 5 minutes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixing messaging for net-internals Created 8 years, 9 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 <string> 7 #include <string>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
(...skipping 397 matching lines...) Expand 10 before | Expand all | Expand 10 after
408 408
409 // Try to set the prerendered page as used, so any subsequent attempts to 409 // Try to set the prerendered page as used, so any subsequent attempts to
410 // cancel on other threads will fail. If this fails because the prerender 410 // cancel on other threads will fail. If this fails because the prerender
411 // was already cancelled, possibly on another thread, fail. 411 // was already cancelled, possibly on another thread, fail.
412 if (!prerender_tracker_->TryUse(child_id, route_id)) 412 if (!prerender_tracker_->TryUse(child_id, route_id))
413 return false; 413 return false;
414 414
415 if (!prerender_contents->load_start_time().is_null()) { 415 if (!prerender_contents->load_start_time().is_null()) {
416 histograms_->RecordTimeUntilUsed(GetCurrentTimeTicks() - 416 histograms_->RecordTimeUntilUsed(GetCurrentTimeTicks() -
417 prerender_contents->load_start_time(), 417 prerender_contents->load_start_time(),
418 config_.max_age); 418 GetMaxAge());
419 } 419 }
420 420
421 histograms_->RecordPerSessionCount(++prerenders_per_session_count_); 421 histograms_->RecordPerSessionCount(++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->set_final_status(FINAL_STATUS_USED);
424 424
425 new_render_view_host->Send( 425 new_render_view_host->Send(
426 new ChromeViewMsg_SetIsPrerendering(new_render_view_host->routing_id(), 426 new ChromeViewMsg_SetIsPrerendering(new_render_view_host->routing_id(),
427 false)); 427 false));
428 428
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
584 return mode_; 584 return mode_;
585 } 585 }
586 586
587 // static 587 // static
588 void PrerenderManager::SetMode(PrerenderManagerMode mode) { 588 void PrerenderManager::SetMode(PrerenderManagerMode mode) {
589 mode_ = mode; 589 mode_ = mode;
590 } 590 }
591 591
592 // static 592 // static
593 bool PrerenderManager::IsPrerenderingPossible() { 593 bool PrerenderManager::IsPrerenderingPossible() {
594 return GetMode() == PRERENDER_MODE_ENABLED || 594 return GetMode() != PRERENDER_MODE_DISABLED;
595 GetMode() == PRERENDER_MODE_EXPERIMENT_PRERENDER_GROUP ||
596 GetMode() == PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP ||
597 GetMode() == PRERENDER_MODE_EXPERIMENT_NO_USE_GROUP;
598 } 595 }
599 596
600 // static 597 // static
601 bool PrerenderManager::ActuallyPrerendering() { 598 bool PrerenderManager::ActuallyPrerendering() {
602 return IsPrerenderingPossible() && !IsControlGroup(); 599 return IsPrerenderingPossible() && !IsControlGroup();
603 } 600 }
604 601
605 // static 602 // static
606 bool PrerenderManager::IsControlGroup() { 603 bool PrerenderManager::IsControlGroup() {
607 return GetMode() == PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP; 604 return GetMode() == PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP;
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
717 } 714 }
718 715
719 DictionaryValue* PrerenderManager::GetAsValue() const { 716 DictionaryValue* PrerenderManager::GetAsValue() const {
720 DCHECK(CalledOnValidThread()); 717 DCHECK(CalledOnValidThread());
721 DictionaryValue* dict_value = new DictionaryValue(); 718 DictionaryValue* dict_value = new DictionaryValue();
722 dict_value->Set("history", prerender_history_->GetEntriesAsValue()); 719 dict_value->Set("history", prerender_history_->GetEntriesAsValue());
723 dict_value->Set("active", GetActivePrerendersAsValue()); 720 dict_value->Set("active", GetActivePrerendersAsValue());
724 dict_value->SetBoolean("enabled", enabled_); 721 dict_value->SetBoolean("enabled", enabled_);
725 dict_value->SetBoolean("omnibox_enabled", IsOmniboxEnabled(profile_)); 722 dict_value->SetBoolean("omnibox_enabled", IsOmniboxEnabled(profile_));
726 // If prerender is disabled via a flag this method is not even called. 723 // If prerender is disabled via a flag this method is not even called.
724 std::string enabled_note;
727 if (IsControlGroup()) 725 if (IsControlGroup())
728 dict_value->SetString("disabled_reason", "(Disabled for testing)"); 726 enabled_note += "(Control group: Not actually prerendering) ";
729 if (IsNoUseGroup()) 727 if (IsNoUseGroup())
730 dict_value->SetString("disabled_reason", "(Not using prerendered pages)"); 728 enabled_note += "(No-use group: Not swapping in prerendered pages) ";
729 if (GetMode() == PRERENDER_MODE_EXPERIMENT_5MIN_TTL_GROUP)
730 enabled_note += "(5 min TTL group: Extended prerender eviction to 5 mins) ";
731 dict_value->SetString("enabled_note", enabled_note);
731 return dict_value; 732 return dict_value;
732 } 733 }
733 734
734 void PrerenderManager::ClearData(int clear_flags) { 735 void PrerenderManager::ClearData(int clear_flags) {
735 DCHECK_GE(clear_flags, 0); 736 DCHECK_GE(clear_flags, 0);
736 DCHECK_LT(clear_flags, CLEAR_MAX); 737 DCHECK_LT(clear_flags, CLEAR_MAX);
737 if (clear_flags & CLEAR_PRERENDER_CONTENTS) 738 if (clear_flags & CLEAR_PRERENDER_CONTENTS)
738 DestroyAllContents(FINAL_STATUS_CACHE_OR_HISTORY_CLEARED); 739 DestroyAllContents(FINAL_STATUS_CACHE_OR_HISTORY_CLEARED);
739 // This has to be second, since destroying prerenders can add to the history. 740 // This has to be second, since destroying prerenders can add to the history.
740 if (clear_flags & CLEAR_PRERENDER_HISTORY) 741 if (clear_flags & CLEAR_PRERENDER_HISTORY)
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
977 } 978 }
978 979
979 void PrerenderManager::PostCleanupTask() { 980 void PrerenderManager::PostCleanupTask() {
980 DCHECK(CalledOnValidThread()); 981 DCHECK(CalledOnValidThread());
981 MessageLoop::current()->PostTask( 982 MessageLoop::current()->PostTask(
982 FROM_HERE, 983 FROM_HERE,
983 base::Bind(&PrerenderManager::PeriodicCleanup, 984 base::Bind(&PrerenderManager::PeriodicCleanup,
984 weak_factory_.GetWeakPtr())); 985 weak_factory_.GetWeakPtr()));
985 } 986 }
986 987
988 base::TimeDelta PrerenderManager::GetMaxAge() const {
989 return (GetMode() == PRERENDER_MODE_EXPERIMENT_5MIN_TTL_GROUP ?
990 base::TimeDelta::FromSeconds(300) : config_.max_age);
991 }
992
987 bool PrerenderManager::IsPrerenderElementFresh(const base::Time start) const { 993 bool PrerenderManager::IsPrerenderElementFresh(const base::Time start) const {
988 DCHECK(CalledOnValidThread()); 994 DCHECK(CalledOnValidThread());
989 base::Time now = GetCurrentTime(); 995 base::Time now = GetCurrentTime();
990 return (now - start < config_.max_age); 996 return (now - start < GetMaxAge());
991 } 997 }
992 998
993 void PrerenderManager::DeleteOldEntries() { 999 void PrerenderManager::DeleteOldEntries() {
994 DCHECK(CalledOnValidThread()); 1000 DCHECK(CalledOnValidThread());
995 while (!prerender_list_.empty()) { 1001 while (!prerender_list_.empty()) {
996 PrerenderContentsData data = prerender_list_.front(); 1002 PrerenderContentsData data = prerender_list_.front();
997 if (IsPrerenderElementFresh(data.start_time_)) 1003 if (IsPrerenderElementFresh(data.start_time_))
998 return; 1004 return;
999 data.contents_->Destroy(FINAL_STATUS_TIMED_OUT); 1005 data.contents_->Destroy(FINAL_STATUS_TIMED_OUT);
1000 } 1006 }
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
1194 if (!render_process_host || !render_process_host->GetBrowserContext()) 1200 if (!render_process_host || !render_process_host->GetBrowserContext())
1195 return NULL; 1201 return NULL;
1196 Profile* profile = Profile::FromBrowserContext( 1202 Profile* profile = Profile::FromBrowserContext(
1197 render_process_host->GetBrowserContext()); 1203 render_process_host->GetBrowserContext());
1198 if (!profile) 1204 if (!profile)
1199 return NULL; 1205 return NULL;
1200 return PrerenderManagerFactory::GetInstance()->GetForProfile(profile); 1206 return PrerenderManagerFactory::GetInstance()->GetForProfile(profile);
1201 } 1207 }
1202 1208
1203 } // namespace prerender 1209 } // namespace prerender
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698