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

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

Issue 7289020: Updating histograms to allow for experiments & log origin-based histograms. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 5 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 #ifndef CHROME_BROWSER_PRERENDER_PRERENDER_MANAGER_H_ 5 #ifndef CHROME_BROWSER_PRERENDER_PRERENDER_MANAGER_H_
6 #define CHROME_BROWSER_PRERENDER_PRERENDER_MANAGER_H_ 6 #define CHROME_BROWSER_PRERENDER_PRERENDER_MANAGER_H_
7 #pragma once 7 #pragma once
8 8
9 #include <list> 9 #include <list>
10 #include <map> 10 #include <map>
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 }; 61 };
62 62
63 // One or more of these flags must be passed to ClearData() to specify just 63 // One or more of these flags must be passed to ClearData() to specify just
64 // what data to clear. See function declaration for more information. 64 // what data to clear. See function declaration for more information.
65 enum ClearFlags { 65 enum ClearFlags {
66 CLEAR_PRERENDER_CONTENTS = 0x1 << 0, 66 CLEAR_PRERENDER_CONTENTS = 0x1 << 0,
67 CLEAR_PRERENDER_HISTORY = 0x1 << 1, 67 CLEAR_PRERENDER_HISTORY = 0x1 << 1,
68 CLEAR_MAX = 0x1 << 2 68 CLEAR_MAX = 0x1 << 2
69 }; 69 };
70 70
71 // ID indicating that no experiment is active.
72 static const uint8 kNoExperiment = 0;
73
71 // Owned by a Profile object for the lifetime of the profile. 74 // Owned by a Profile object for the lifetime of the profile.
72 PrerenderManager(Profile* profile, PrerenderTracker* prerender_tracker); 75 PrerenderManager(Profile* profile, PrerenderTracker* prerender_tracker);
73 76
74 virtual ~PrerenderManager(); 77 virtual ~PrerenderManager();
75 78
76 // Entry points for adding prerenders. 79 // Entry points for adding prerenders.
77 80
78 // Adds a prerender for |url| if valid. |process_id| and |route_id| identify 81 // Adds a prerender for |url| if valid. |process_id| and |route_id| identify
79 // the RenderViewHost that the prerender request came from and are used to 82 // the RenderViewHost that the prerender request came from and are used to
80 // set the initial window size of the RenderViewHost used for prerendering. 83 // set the initial window size of the RenderViewHost used for prerendering.
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
174 // cancelled and then deleted, and any TabContents queued for destruction are 177 // cancelled and then deleted, and any TabContents queued for destruction are
175 // destroyed as well. 178 // destroyed as well.
176 // 179 //
177 // If the CLEAR_PRERENDER_HISTORY bit is set, the prerender history is 180 // If the CLEAR_PRERENDER_HISTORY bit is set, the prerender history is
178 // cleared, including any entries newly created by destroying them in 181 // cleared, including any entries newly created by destroying them in
179 // response to the CLEAR_PRERENDER_CONTENTS flag. 182 // response to the CLEAR_PRERENDER_CONTENTS flag.
180 // 183 //
181 // Intended to be used when clearing the cache or history. 184 // Intended to be used when clearing the cache or history.
182 void ClearData(int clear_flags); 185 void ClearData(int clear_flags);
183 186
187 // Record a final status of a prerendered page in a histogram.
188 void RecordFinalStatus(Origin origin,
189 uint8 experiment_id,
190 FinalStatus final_status) const;
191
184 const Config& config() const { return config_; } 192 const Config& config() const { return config_; }
185 Config& mutable_config() { return config_; } 193 Config& mutable_config() { return config_; }
186 194
187 protected: 195 protected:
188 // Test that needs needs access to internal functions. 196 // Test that needs needs access to internal functions.
189 FRIEND_TEST_ALL_PREFIXES(PrerenderManagerTest, ExpireTest); 197 FRIEND_TEST_ALL_PREFIXES(PrerenderManagerTest, ExpireTest);
190 FRIEND_TEST_ALL_PREFIXES(PrerenderManagerTest, ExtractURLInQueryStringTest); 198 FRIEND_TEST_ALL_PREFIXES(PrerenderManagerTest, ExtractURLInQueryStringTest);
191 199
192 struct PendingContentsData; 200 struct PendingContentsData;
193 201
194 void SetPrerenderContentsFactory( 202 void SetPrerenderContentsFactory(
195 PrerenderContents::Factory* prerender_contents_factory); 203 PrerenderContents::Factory* prerender_contents_factory);
196 204
197 PendingContentsData* FindPendingEntry(const GURL& url); 205 PendingContentsData* FindPendingEntry(const GURL& url);
198 206
199 // Extracts a urlencoded URL stored in a url= query parameter from a URL
200 // supplied, if available, and stores it in alias_url. Returns whether or not
201 // the operation succeeded (i.e. a valid URL was found).
202 static bool MaybeGetQueryStringBasedAliasURL(const GURL& url,
203 GURL* alias_url);
204
205 private: 207 private:
206 // Test that needs needs access to internal functions. 208 // Test that needs needs access to internal functions.
207 friend class PrerenderBrowserTest; 209 friend class PrerenderBrowserTest;
208 210
209 friend class base::RefCountedThreadSafe<PrerenderManager>; 211 friend class base::RefCountedThreadSafe<PrerenderManager>;
210 212
211 struct PrerenderContentsData; 213 struct PrerenderContentsData;
212 struct NavigationRecord; 214 struct NavigationRecord;
213 215
214 class OnCloseTabContentsDeleter; 216 class OnCloseTabContentsDeleter;
(...skipping 30 matching lines...) Expand all
245 // objects. If |this| is deleted before the task is run, the task will 247 // objects. If |this| is deleted before the task is run, the task will
246 // automatically be cancelled. 248 // automatically be cancelled.
247 void PostCleanupTask(); 249 void PostCleanupTask();
248 250
249 bool IsPrerenderElementFresh(const base::Time start) const; 251 bool IsPrerenderElementFresh(const base::Time start) const;
250 void DeleteOldEntries(); 252 void DeleteOldEntries();
251 virtual base::Time GetCurrentTime() const; 253 virtual base::Time GetCurrentTime() const;
252 virtual base::TimeTicks GetCurrentTimeTicks() const; 254 virtual base::TimeTicks GetCurrentTimeTicks() const;
253 virtual PrerenderContents* CreatePrerenderContents(const GURL& url, 255 virtual PrerenderContents* CreatePrerenderContents(const GURL& url,
254 const GURL& referrer, 256 const GURL& referrer,
255 Origin origin); 257 Origin origin,
258 uint8 experiment_id);
256 259
257 // Checks if the PrerenderContents has been added to the pending delete list. 260 // Checks if the PrerenderContents has been added to the pending delete list.
258 bool IsPendingDelete(PrerenderContents* entry) const; 261 bool IsPendingDelete(PrerenderContents* entry) const;
259 262
260 // Deletes any PrerenderContents that have been added to the pending delete 263 // Deletes any PrerenderContents that have been added to the pending delete
261 // list. 264 // list.
262 void DeletePendingDeleteEntries(); 265 void DeletePendingDeleteEntries();
263 266
264 // Finds the specified PrerenderContents and returns it, if it exists. 267 // Finds the specified PrerenderContents and returns it, if it exists.
265 // Returns NULL otherwise. Unlike GetEntry, the PrerenderManager maintains 268 // Returns NULL otherwise. Unlike GetEntry, the PrerenderManager maintains
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
309 312
310 // Destroys all pending prerenders using FinalStatus. Also deletes them as 313 // Destroys all pending prerenders using FinalStatus. Also deletes them as
311 // well as any swapped out TabContents queued for destruction. 314 // well as any swapped out TabContents queued for destruction.
312 // Used both on destruction, and when clearing the browing history. 315 // Used both on destruction, and when clearing the browing history.
313 void DestroyAllContents(FinalStatus final_status); 316 void DestroyAllContents(FinalStatus final_status);
314 317
315 // Records the time from when a page starts prerendering to when the user 318 // Records the time from when a page starts prerendering to when the user
316 // navigates to it. This must be called on the UI thread. 319 // navigates to it. This must be called on the UI thread.
317 void RecordTimeUntilUsed(base::TimeDelta time_until_used); 320 void RecordTimeUntilUsed(base::TimeDelta time_until_used);
318 321
322 // Composes a histogram name based on a histogram type.
323 std::string ComposeHistogramName(const std::string& prefix_type,
324 const std::string& name) const;
325
326 // Returns the histogram name for a given origin and experiment.
327 std::string GetHistogramName(Origin origin, uint8 experiment_id,
328 const std::string& name) const;
329 // Returns the histogram name for the current window.
330 std::string GetDefaultHistogramName(const std::string& name) const;
331 // Returns the current experiment.
332 uint8 GetCurrentExperimentId() const;
333 // Returns the current origin.
334 Origin GetCurrentOrigin() const;
335 // Returns whether or not there is currently an origin/experiment wash.
336 bool IsOriginExperimentWash() const;
337
319 // The configuration. 338 // The configuration.
320 Config config_; 339 Config config_;
321 340
322 // Specifies whether prerendering is currently enabled for this 341 // Specifies whether prerendering is currently enabled for this
323 // manager. The value can change dynamically during the lifetime 342 // manager. The value can change dynamically during the lifetime
324 // of the PrerenderManager. 343 // of the PrerenderManager.
325 bool enabled_; 344 bool enabled_;
326 345
327 // The profile that owns this PrerenderManager. 346 // The profile that owns this PrerenderManager.
328 Profile* profile_; 347 Profile* profile_;
(...skipping 19 matching lines...) Expand all
348 367
349 // Map of child/route id pairs to pending prerender data. 368 // Map of child/route id pairs to pending prerender data.
350 typedef std::map<std::pair<int, int>, std::vector<PendingContentsData> > 369 typedef std::map<std::pair<int, int>, std::vector<PendingContentsData> >
351 PendingPrerenderList; 370 PendingPrerenderList;
352 PendingPrerenderList pending_prerender_list_; 371 PendingPrerenderList pending_prerender_list_;
353 372
354 scoped_ptr<PrerenderContents::Factory> prerender_contents_factory_; 373 scoped_ptr<PrerenderContents::Factory> prerender_contents_factory_;
355 374
356 static PrerenderManagerMode mode_; 375 static PrerenderManagerMode mode_;
357 376
377 // An integer indicating a Prerendering Experiment being currently conducted.
378 // (The last experiment ID seen).
379 uint8 last_experiment_id_;
380
381 // Origin of the last prerender seen.
382 Origin last_origin_;
383
384 // A boolean indicating that we have recently encountered a combination of
385 // different experiments and origins, making an attribution of PPLT's to
386 // experiments / origins impossible.
387 bool origin_experiment_wash_;
388
358 // The time when we last saw a prerender request coming from a renderer. 389 // The time when we last saw a prerender request coming from a renderer.
359 // This is used to record perceived PLT's for a certain amount of time 390 // This is used to record perceived PLT's for a certain amount of time
360 // from the point that we last saw a <link rel=prerender> tag. 391 // from the point that we last saw a <link rel=prerender> tag.
361 base::TimeTicks last_prerender_seen_time_; 392 base::TimeTicks last_prerender_seen_time_;
362 393
363 // A count of how many prerenders we do per session. Initialized to 0 then 394 // A count of how many prerenders we do per session. Initialized to 0 then
364 // incremented and emitted to a histogram on each successful prerender. 395 // incremented and emitted to a histogram on each successful prerender.
365 static int prerenders_per_session_count_; 396 static int prerenders_per_session_count_;
366 397
367 // RepeatingTimer to perform periodic cleanups of pending prerendered 398 // RepeatingTimer to perform periodic cleanups of pending prerendered
(...skipping 11 matching lines...) Expand all
379 ScopedVector<OnCloseTabContentsDeleter> on_close_tab_contents_deleters_; 410 ScopedVector<OnCloseTabContentsDeleter> on_close_tab_contents_deleters_;
380 411
381 scoped_ptr<PrerenderHistory> prerender_history_; 412 scoped_ptr<PrerenderHistory> prerender_history_;
382 413
383 DISALLOW_COPY_AND_ASSIGN(PrerenderManager); 414 DISALLOW_COPY_AND_ASSIGN(PrerenderManager);
384 }; 415 };
385 416
386 } // namespace prerender 417 } // namespace prerender
387 418
388 #endif // CHROME_BROWSER_PRERENDER_PRERENDER_MANAGER_H_ 419 #endif // CHROME_BROWSER_PRERENDER_PRERENDER_MANAGER_H_
OLDNEW
« no previous file with comments | « chrome/browser/prerender/prerender_final_status.cc ('k') | chrome/browser/prerender/prerender_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698