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

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

Issue 6966017: Remove a chrome dependency by removing Prerender from ResourceDispatcherHost. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Passing tracker through. Created 9 years, 7 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/logging.h" 9 #include "base/logging.h"
10 #include "base/metrics/field_trial.h" 10 #include "base/metrics/field_trial.h"
11 #include "base/metrics/histogram.h" 11 #include "base/metrics/histogram.h"
12 #include "base/time.h" 12 #include "base/time.h"
13 #include "base/utf_string_conversions.h" 13 #include "base/utf_string_conversions.h"
14 #include "chrome/browser/browser_process.h"
14 #include "chrome/browser/favicon/favicon_tab_helper.h" 15 #include "chrome/browser/favicon/favicon_tab_helper.h"
15 #include "chrome/browser/prerender/prerender_contents.h" 16 #include "chrome/browser/prerender/prerender_contents.h"
16 #include "chrome/browser/prerender/prerender_final_status.h" 17 #include "chrome/browser/prerender/prerender_final_status.h"
17 #include "chrome/browser/prerender/prerender_observer.h" 18 #include "chrome/browser/prerender/prerender_observer.h"
18 #include "chrome/browser/prerender/prerender_tracker.h" 19 #include "chrome/browser/prerender/prerender_tracker.h"
19 #include "chrome/browser/profiles/profile.h" 20 #include "chrome/browser/profiles/profile.h"
20 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" 21 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
21 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper_delegate.h" 22 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper_delegate.h"
22 #include "chrome/common/render_messages.h" 23 #include "chrome/common/render_messages.h"
23 #include "content/browser/browser_thread.h" 24 #include "content/browser/browser_thread.h"
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 200 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
200 PrerenderManager* prerender_manager = prerender_manager_weak_ptr.get(); 201 PrerenderManager* prerender_manager = prerender_manager_weak_ptr.get();
201 if (!prerender_manager) 202 if (!prerender_manager)
202 return; 203 return;
203 204
204 prerender_manager->DestroyPreloadForChildRouteIdPair( 205 prerender_manager->DestroyPreloadForChildRouteIdPair(
205 std::make_pair(render_process_id, render_view_id), 206 std::make_pair(render_process_id, render_view_id),
206 final_status); 207 final_status);
207 } 208 }
208 209
209 PrerenderManager::PrerenderManager(Profile* profile) 210 PrerenderManager::PrerenderManager(Profile* profile,
211 PrerenderTracker* prerender_tracker)
210 : rate_limit_enabled_(true), 212 : rate_limit_enabled_(true),
211 enabled_(true), 213 enabled_(true),
212 profile_(profile), 214 profile_(profile),
215 prerender_tracker_(prerender_tracker),
213 max_prerender_age_(base::TimeDelta::FromSeconds( 216 max_prerender_age_(base::TimeDelta::FromSeconds(
214 kDefaultMaxPrerenderAgeSeconds)), 217 kDefaultMaxPrerenderAgeSeconds)),
215 max_prerender_memory_mb_(kDefaultMaxPrerenderMemoryMB), 218 max_prerender_memory_mb_(kDefaultMaxPrerenderMemoryMB),
216 max_elements_(kDefaultMaxPrerenderElements), 219 max_elements_(kDefaultMaxPrerenderElements),
217 prerender_contents_factory_(PrerenderContents::CreateFactory()), 220 prerender_contents_factory_(PrerenderContents::CreateFactory()),
218 last_prerender_start_time_(GetCurrentTimeTicks() - 221 last_prerender_start_time_(GetCurrentTimeTicks() -
219 base::TimeDelta::FromMilliseconds(kMinTimeBetweenPrerendersMs)), 222 base::TimeDelta::FromMilliseconds(kMinTimeBetweenPrerendersMs)),
220 runnable_method_factory_(this) { 223 runnable_method_factory_(this) {
221 // There are some assumptions that the PrerenderManager is on the UI thread. 224 // There are some assumptions that the PrerenderManager is on the UI thread.
222 // Any other checks simply make sure that the PrerenderManager is accessed on 225 // Any other checks simply make sure that the PrerenderManager is accessed on
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after
447 return false; 450 return false;
448 } 451 }
449 452
450 int child_id, route_id; 453 int child_id, route_id;
451 CHECK(prerender_contents->GetChildId(&child_id)); 454 CHECK(prerender_contents->GetChildId(&child_id));
452 CHECK(prerender_contents->GetRouteId(&route_id)); 455 CHECK(prerender_contents->GetRouteId(&route_id));
453 456
454 // Try to set the prerendered page as used, so any subsequent attempts to 457 // Try to set the prerendered page as used, so any subsequent attempts to
455 // cancel on other threads will fail. If this fails because the prerender 458 // cancel on other threads will fail. If this fails because the prerender
456 // was already cancelled, possibly on another thread, fail. 459 // was already cancelled, possibly on another thread, fail.
457 if (!PrerenderTracker::GetInstance()->TryUse(child_id, route_id)) 460 if (!prerender_tracker_->TryUse(child_id, route_id))
458 return false; 461 return false;
459 462
460 if (!prerender_contents->load_start_time().is_null()) 463 if (!prerender_contents->load_start_time().is_null())
461 RecordTimeUntilUsed(GetCurrentTimeTicks() - 464 RecordTimeUntilUsed(GetCurrentTimeTicks() -
462 prerender_contents->load_start_time()); 465 prerender_contents->load_start_time());
463 466
464 UMA_HISTOGRAM_COUNTS("Prerender.PrerendersPerSessionCount", 467 UMA_HISTOGRAM_COUNTS("Prerender.PrerendersPerSessionCount",
465 ++prerenders_per_session_count_); 468 ++prerenders_per_session_count_);
466 prerender_contents->set_final_status(FINAL_STATUS_USED); 469 prerender_contents->set_final_status(FINAL_STATUS_USED);
467 470
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
559 return false; 562 return false;
560 } 563 }
561 564
562 int child_id, route_id; 565 int child_id, route_id;
563 CHECK(prerender_contents->GetChildId(&child_id)); 566 CHECK(prerender_contents->GetChildId(&child_id));
564 CHECK(prerender_contents->GetRouteId(&route_id)); 567 CHECK(prerender_contents->GetRouteId(&route_id));
565 568
566 // Try to set the prerendered page as used, so any subsequent attempts to 569 // Try to set the prerendered page as used, so any subsequent attempts to
567 // cancel on other threads will fail. If this fails because the prerender 570 // cancel on other threads will fail. If this fails because the prerender
568 // was already cancelled, possibly on another thread, fail. 571 // was already cancelled, possibly on another thread, fail.
569 if (!PrerenderTracker::GetInstance()->TryUse(child_id, route_id)) 572 if (!prerender_tracker_->TryUse(child_id, route_id))
570 return false; 573 return false;
571 574
572 if (!prerender_contents->load_start_time().is_null()) 575 if (!prerender_contents->load_start_time().is_null())
573 RecordTimeUntilUsed(GetCurrentTimeTicks() - 576 RecordTimeUntilUsed(GetCurrentTimeTicks() -
574 prerender_contents->load_start_time()); 577 prerender_contents->load_start_time());
575 578
576 UMA_HISTOGRAM_COUNTS("Prerender.PrerendersPerSessionCount", 579 UMA_HISTOGRAM_COUNTS("Prerender.PrerendersPerSessionCount",
577 ++prerenders_per_session_count_); 580 ++prerenders_per_session_count_);
578 prerender_contents->set_final_status(FINAL_STATUS_USED); 581 prerender_contents->set_final_status(FINAL_STATUS_USED);
579 582
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
681 DCHECK(CalledOnValidThread()); 684 DCHECK(CalledOnValidThread());
682 base::Time now = GetCurrentTime(); 685 base::Time now = GetCurrentTime();
683 return (now - start < max_prerender_age_); 686 return (now - start < max_prerender_age_);
684 } 687 }
685 688
686 PrerenderContents* PrerenderManager::CreatePrerenderContents( 689 PrerenderContents* PrerenderManager::CreatePrerenderContents(
687 const GURL& url, 690 const GURL& url,
688 const GURL& referrer) { 691 const GURL& referrer) {
689 DCHECK(CalledOnValidThread()); 692 DCHECK(CalledOnValidThread());
690 return prerender_contents_factory_->CreatePrerenderContents( 693 return prerender_contents_factory_->CreatePrerenderContents(
691 this, profile_, url, referrer); 694 this, profile_, prerender_tracker_, url, referrer);
692 } 695 }
693 696
694 void PrerenderManager::DeletePendingDeleteEntries() { 697 void PrerenderManager::DeletePendingDeleteEntries() {
695 while (!pending_delete_list_.empty()) { 698 while (!pending_delete_list_.empty()) {
696 PrerenderContents* contents = pending_delete_list_.front(); 699 PrerenderContents* contents = pending_delete_list_.front();
697 pending_delete_list_.pop_front(); 700 pending_delete_list_.pop_front();
698 delete contents; 701 delete contents;
699 } 702 }
700 } 703 }
701 704
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after
1009 base::TimeTicks cutoff = GetCurrentTimeTicks() - 1012 base::TimeTicks cutoff = GetCurrentTimeTicks() -
1010 base::TimeDelta::FromMilliseconds(kNavigationRecordWindowMs); 1013 base::TimeDelta::FromMilliseconds(kNavigationRecordWindowMs);
1011 while (!navigations_.empty()) { 1014 while (!navigations_.empty()) {
1012 if (navigations_.front().time_ > cutoff) 1015 if (navigations_.front().time_ > cutoff)
1013 break; 1016 break;
1014 navigations_.pop_front(); 1017 navigations_.pop_front();
1015 } 1018 }
1016 } 1019 }
1017 1020
1018 } // namespace prerender 1021 } // namespace prerender
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698