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

Unified Diff: chrome/browser/prerender/prerender_link_manager.h

Issue 11551003: Change multi-prerender API to include per launcher slots. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: clear to land Created 8 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/prerender/prerender_link_manager.h
diff --git a/chrome/browser/prerender/prerender_link_manager.h b/chrome/browser/prerender/prerender_link_manager.h
index 8795f0a5737c63b95548a2f56055f0cf7ef060e6..a881485cc038f0d546841bd955dffd5b78633a36 100644
--- a/chrome/browser/prerender/prerender_link_manager.h
+++ b/chrome/browser/prerender/prerender_link_manager.h
@@ -5,10 +5,10 @@
#ifndef CHROME_BROWSER_PRERENDER_PRERENDER_LINK_MANAGER_H_
#define CHROME_BROWSER_PRERENDER_PRERENDER_LINK_MANAGER_H_
-#include <map>
-#include <utility>
+#include <list>
#include "base/basictypes.h"
+#include "base/time.h"
#include "chrome/browser/prerender/prerender_handle.h"
#include "chrome/browser/profiles/profile_keyed_service.h"
#include "googleurl/src/gurl.h"
@@ -41,16 +41,12 @@ class PrerenderLinkManager : public ProfileKeyedService,
// A <link rel=prerender ...> element has been inserted into the document.
// The |prerender_id| must be unique per |child_id|, and is assigned by the
// WebPrerendererClient.
- // Returns true if the prerender was accepted by the prerender manager,
- // and false if not. In either case, the |prerender_id| is usable for
- // future OnCancelPrerender and OnAbandonPrerender calls.
- bool OnAddPrerender(
- int child_id,
- int prerender_id,
- const GURL& url,
- const content::Referrer& referrer,
- const gfx::Size& size,
- int render_view_route_id);
+ void OnAddPrerender(int child_id,
+ int prerender_id,
+ const GURL& url,
+ const content::Referrer& referrer,
+ const gfx::Size& size,
+ int render_view_route_id);
// A <link rel=prerender ...> element has been explicitly removed from a
// document.
@@ -70,17 +66,50 @@ class PrerenderLinkManager : public ProfileKeyedService,
friend class PrerenderBrowserTest;
friend class PrerenderTest;
- typedef std::pair<int, int> ChildAndPrerenderIdPair;
- typedef std::map<ChildAndPrerenderIdPair, PrerenderHandle*>
- IdPairToPrerenderHandleMap;
-
- void RemovePrerender(
- const IdPairToPrerenderHandleMap::iterator& id_to_handle_iter);
+ struct LinkPrerender {
+ LinkPrerender(int launcher_child_id,
+ int prerender_id,
+ const GURL& url,
+ const content::Referrer& referrer,
+ const gfx::Size& size,
+ int render_view_route_id,
+ base::TimeTicks creation_time);
+ ~LinkPrerender();
+
+ // Parameters from PrerenderLinkManager::OnAddPrerender():
+ int launcher_child_id;
+ int prerender_id;
+ GURL url;
+ content::Referrer referrer;
+ gfx::Size size;
+ int render_view_route_id;
+
+ // The time at which this Prerender was added to PrerenderLinkManager.
+ base::TimeTicks creation_time;
+
+ // Initially NULL, |handle| is set once we start this prerender. It is owned
+ // by this struct, and must be deleted before destructing this struct.
+ PrerenderHandle* handle;
+ };
bool IsEmpty() const;
- IdPairToPrerenderHandleMap::iterator FindPrerenderHandle(
- PrerenderHandle* prerender_handle);
+ // Returns a count of currently running prerenders.
+ size_t CountRunningPrerenders() const;
+
+ // Start any prerenders that can be started, respecting concurrency limits for
+ // the system and per launcher.
+ void StartPrerenders();
+
+ LinkPrerender* FindByLauncherChildIdAndPrerenderId(int child_id,
+ int prerender_id);
+
+ LinkPrerender* FindByPrerenderHandle(PrerenderHandle* prerender_handle);
+
+ void RemovePrerender(LinkPrerender* prerender);
+
+ // From ProfileKeyedService:
+ virtual void Shutdown() OVERRIDE;
// From PrerenderHandle::Observer:
virtual void OnPrerenderStart(PrerenderHandle* prerender_handle) OVERRIDE;
@@ -88,12 +117,14 @@ class PrerenderLinkManager : public ProfileKeyedService,
virtual void OnPrerenderAddAlias(PrerenderHandle* prerender_handle,
const GURL& alias_url) OVERRIDE;
+ bool has_shutdown_;
+
PrerenderManager* manager_;
- // A map from child process id and prerender id to PrerenderHandles. We map
- // from this pair because the prerender ids are only unique within their
- // renderer process.
- IdPairToPrerenderHandleMap ids_to_handle_map_;
+ // All prerenders known to this PrerenderLinkManager. Insertions are always
+ // made at the back, so the oldest prerender is at the front, and the youngest
+ // at the back.
+ std::list<LinkPrerender> prerenders_;
DISALLOW_COPY_AND_ASSIGN(PrerenderLinkManager);
};
« no previous file with comments | « chrome/browser/prerender/prerender_histograms.cc ('k') | chrome/browser/prerender/prerender_link_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698