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

Side by Side Diff: chrome/browser/prerender/prerender_tracker.h

Issue 141163002: Make PrerenderTracker's resource_throttle_io_thread_map_ use RenderFrame IDs instead of RenderView … (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: simplify code Created 6 years, 11 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 #ifndef CHROME_BROWSER_PRERENDER_PRERENDER_TRACKER_H_ 5 #ifndef CHROME_BROWSER_PRERENDER_PRERENDER_TRACKER_H_
6 #define CHROME_BROWSER_PRERENDER_PRERENDER_TRACKER_H_ 6 #define CHROME_BROWSER_PRERENDER_PRERENDER_TRACKER_H_
7 7
8 #include <map> 8 #include <map>
9 #include <set> 9 #include <set>
10 #include <utility> 10 #include <utility>
11 #include <vector> 11 #include <vector>
12 12
13 #include "base/gtest_prod_util.h" 13 #include "base/gtest_prod_util.h"
14 #include "base/memory/weak_ptr.h" 14 #include "base/memory/weak_ptr.h"
15 #include "base/synchronization/lock.h" 15 #include "base/synchronization/lock.h"
16 #include "base/threading/non_thread_safe.h" 16 #include "base/threading/non_thread_safe.h"
17 #include "chrome/browser/prerender/prerender_contents.h"
18 #include "chrome/browser/prerender/prerender_final_status.h" 17 #include "chrome/browser/prerender/prerender_final_status.h"
19 #include "url/gurl.h" 18 #include "url/gurl.h"
20 19
21 namespace prerender { 20 namespace prerender {
22 21
23 class PrerenderManager; 22 class PrerenderManager;
24 class PrerenderPendingSwapThrottle; 23 class PrerenderPendingSwapThrottle;
25 class PrerenderResourceThrottle; 24 class PrerenderResourceThrottle;
26 struct RenderViewInfo; 25 struct RenderViewInfo;
27 26
28 // PrerenderTracker is responsible for keeping track of all prerendering 27 // PrerenderTracker is responsible for keeping track of all prerendering
29 // RenderViews. 28 // RenderViews.
30 class PrerenderTracker : public base::NonThreadSafe, 29 class PrerenderTracker : public base::NonThreadSafe {
31 public PrerenderContents::Observer {
32 public: 30 public:
33 typedef std::pair<int, int> ChildRouteIdPair; 31 typedef std::pair<int, int> ChildRouteIdPair;
34 32
35 PrerenderTracker(); 33 PrerenderTracker();
36 virtual ~PrerenderTracker(); 34 virtual ~PrerenderTracker();
37 35
38 // Returns whether or not a RenderView is prerendering. Can only be called on
39 // the IO thread. Does not acquire a lock, so may claim a RenderView that has
40 // been displayed or destroyed is still prerendering.
41 bool IsPrerenderingOnIOThread(int child_id, int route_id) const;
42
43 // Returns whether or not a RenderFrame and URL are regarding a pending 36 // Returns whether or not a RenderFrame and URL are regarding a pending
44 // prerender swap. Can only be called on the IO thread. Does not acquire a 37 // prerender swap. Can only be called on the IO thread. Does not acquire a
45 // lock. 38 // lock.
46 bool IsPendingSwapRequestOnIOThread(int render_process_id, 39 bool IsPendingSwapRequestOnIOThread(int render_process_id,
47 int render_frame_id, 40 int render_frame_id,
48 const GURL& url) const; 41 const GURL& url) const;
49 42
50 // Called when a PrerenderResourceThrottle defers a request. Cancel 43 // Called when a PrerenderResourceThrottle defers a request. Cancel
51 // or Resume will be called on |throttle| when the prerender is 44 // or Resume will be called on |throttle| when the prerender is
52 // canceled or used, respectively. 45 // canceled or used, respectively.
53 void AddResourceThrottleOnIOThread(
54 int child_id, int route_id,
55 const base::WeakPtr<PrerenderResourceThrottle>& throttle);
56
57 // Called when a PrerenderResourceThrottle defers a request. Cancel
58 // or Resume will be called on |throttle| when the prerender is
59 // canceled or used, respectively.
60 void AddPendingSwapThrottleOnIOThread( 46 void AddPendingSwapThrottleOnIOThread(
61 int render_process_id, int render_frame_id, const GURL& url, 47 int render_process_id, int render_frame_id, const GURL& url,
62 const base::WeakPtr<PrerenderPendingSwapThrottle>& throttle); 48 const base::WeakPtr<PrerenderPendingSwapThrottle>& throttle);
63 49
64 // Called to add throttles for a pending prerender swap. 50 // Called to add throttles for a pending prerender swap.
65 void AddPrerenderPendingSwap( 51 void AddPrerenderPendingSwap(
66 const ChildRouteIdPair& render_frame_route_id_pair, 52 const ChildRouteIdPair& render_frame_route_id_pair,
67 const GURL& url); 53 const GURL& url);
68 54
69 // Called to remove the throttles for a pending prerender swap. 55 // Called to remove the throttles for a pending prerender swap.
70 void RemovePrerenderPendingSwap( 56 void RemovePrerenderPendingSwap(
71 const ChildRouteIdPair& render_frame_route_id_pair, 57 const ChildRouteIdPair& render_frame_route_id_pair,
72 bool swap_successful); 58 bool swap_successful);
73 59
74 private: 60 private:
75 friend class PrerenderContents;
76
77 // Map of child/route id pairs to final statuses. 61 // Map of child/route id pairs to final statuses.
78 typedef std::map<ChildRouteIdPair, RenderViewInfo> FinalStatusMap; 62 typedef std::map<ChildRouteIdPair, RenderViewInfo> FinalStatusMap;
79 // List of throttled requests.
80 typedef std::vector<base::WeakPtr<PrerenderResourceThrottle> >
81 ResourceThrottleList;
82 // Set of throttled requests.
83 typedef std::map<ChildRouteIdPair, ResourceThrottleList> ResourceThrottleMap;
84 struct PendingSwapThrottleData { 63 struct PendingSwapThrottleData {
85 explicit PendingSwapThrottleData(const GURL& swap_url); 64 explicit PendingSwapThrottleData(const GURL& swap_url);
86 ~PendingSwapThrottleData(); 65 ~PendingSwapThrottleData();
87 GURL url; 66 GURL url;
88 base::WeakPtr<PrerenderPendingSwapThrottle> throttle; 67 base::WeakPtr<PrerenderPendingSwapThrottle> throttle;
89 }; 68 };
90 // Set of throttles for pending swaps. The key is the routing ID pair 69 // Set of throttles for pending swaps. The key is the routing ID pair
91 // of a RenderFrame. 70 // of a RenderFrame.
92 typedef std::map<ChildRouteIdPair, PendingSwapThrottleData> 71 typedef std::map<ChildRouteIdPair, PendingSwapThrottleData>
93 PendingSwapThrottleMap; 72 PendingSwapThrottleMap;
94 73
95 // From PrerenderContents::Observer:
96 virtual void OnPrerenderStart(PrerenderContents* prerender_contents) OVERRIDE;
97 virtual void OnPrerenderStop(PrerenderContents* prerender_contents) OVERRIDE;
98
99 // Add/remove the specified pair to |possibly_prerendering_io_thread_set_| on
100 // the IO Thread.
101 void AddPrerenderOnIOThread(const ChildRouteIdPair& child_route_id_pair);
102 void RemovePrerenderOnIOThread(const ChildRouteIdPair& child_route_id_pair,
103 FinalStatus final_status);
104
105 // Add/remove prerenders pending swap on the IO Thread. 74 // Add/remove prerenders pending swap on the IO Thread.
106 void AddPrerenderPendingSwapOnIOThread( 75 void AddPrerenderPendingSwapOnIOThread(
107 const ChildRouteIdPair& render_frame_route_id_pair, const GURL& url); 76 const ChildRouteIdPair& render_frame_route_id_pair, const GURL& url);
108 void RemovePrerenderPendingSwapOnIOThread( 77 void RemovePrerenderPendingSwapOnIOThread(
109 const ChildRouteIdPair& render_frame_route_id_pair, 78 const ChildRouteIdPair& render_frame_route_id_pair,
110 bool swap_successful); 79 bool swap_successful);
111 80
112 static PrerenderTracker* GetDefault(); 81 static PrerenderTracker* GetDefault();
113 82
114 // Resources that are throttled, pending a prerender use. The keys are a
115 // superset of child/route id pairs that are prerendering. Can only access on
116 // the IO thread. May contain entries that have since been displayed. Used
117 // to prevent locking when not needed.
118 ResourceThrottleMap resource_throttle_io_thread_map_;
119
120 // Map of pending prerender swaps and their associated throttles, 83 // Map of pending prerender swaps and their associated throttles,
121 // maintained on the IO thread. 84 // maintained on the IO thread.
122 PendingSwapThrottleMap pending_swap_throttle_map_; 85 PendingSwapThrottleMap pending_swap_throttle_map_;
123 86
124 DISALLOW_COPY_AND_ASSIGN(PrerenderTracker); 87 DISALLOW_COPY_AND_ASSIGN(PrerenderTracker);
125 }; 88 };
126 89
127 } // namespace prerender 90 } // namespace prerender
128 91
129 #endif // CHROME_BROWSER_PRERENDER_PRERENDER_TRACKER_H_ 92 #endif // CHROME_BROWSER_PRERENDER_PRERENDER_TRACKER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698