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

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 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 }; 60 };
61 61
62 // One or more of these flags must be passed to ClearData() to specify just 62 // One or more of these flags must be passed to ClearData() to specify just
63 // what data to clear. See function declaration for more information. 63 // what data to clear. See function declaration for more information.
64 enum ClearFlags { 64 enum ClearFlags {
65 CLEAR_PRERENDER_CONTENTS = 0x1 << 0, 65 CLEAR_PRERENDER_CONTENTS = 0x1 << 0,
66 CLEAR_PRERENDER_HISTORY = 0x1 << 1, 66 CLEAR_PRERENDER_HISTORY = 0x1 << 1,
67 CLEAR_MAX = 0x1 << 2 67 CLEAR_MAX = 0x1 << 2
68 }; 68 };
69 69
70 // ID indicating that no experiment is active.
71 static const uint8 kNoExperiment = 0;
72
70 // Owned by a Profile object for the lifetime of the profile. 73 // Owned by a Profile object for the lifetime of the profile.
71 PrerenderManager(Profile* profile, PrerenderTracker* prerender_tracker); 74 PrerenderManager(Profile* profile, PrerenderTracker* prerender_tracker);
72 75
73 virtual ~PrerenderManager(); 76 virtual ~PrerenderManager();
74 77
75 // Entry points for adding prerenders. 78 // Entry points for adding prerenders.
76 79
77 // Adds a prerender for |url| if valid. |process_id| and |route_id| identify 80 // Adds a prerender for |url| if valid. |process_id| and |route_id| identify
78 // the RenderViewHost that the prerender request came from and are used to 81 // the RenderViewHost that the prerender request came from and are used to
79 // set the initial window size of the RenderViewHost used for prerendering. 82 // set the initial window size of the RenderViewHost used for prerendering.
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
178 // cancelled and then deleted, and any TabContents queued for destruction are 181 // cancelled and then deleted, and any TabContents queued for destruction are
179 // destroyed as well. 182 // destroyed as well.
180 // 183 //
181 // If the CLEAR_PRERENDER_HISTORY bit is set, the prerender history is 184 // If the CLEAR_PRERENDER_HISTORY bit is set, the prerender history is
182 // cleared, including any entries newly created by destroying them in 185 // cleared, including any entries newly created by destroying them in
183 // response to the CLEAR_PRERENDER_CONTENTS flag. 186 // response to the CLEAR_PRERENDER_CONTENTS flag.
184 // 187 //
185 // Intended to be used when clearing the cache or history. 188 // Intended to be used when clearing the cache or history.
186 void ClearData(int clear_flags); 189 void ClearData(int clear_flags);
187 190
191 // Record a final status of a prerendered page in a histogram.
192 void RecordFinalStatus(Origin origin,
193 uint8 experiment_id,
194 FinalStatus final_status) const;
195
188 protected: 196 protected:
189 // Test that needs needs access to internal functions. 197 // Test that needs needs access to internal functions.
190 FRIEND_TEST_ALL_PREFIXES(PrerenderManagerTest, ExpireTest); 198 FRIEND_TEST_ALL_PREFIXES(PrerenderManagerTest, ExpireTest);
191 FRIEND_TEST_ALL_PREFIXES(PrerenderManagerTest, ExtractURLInQueryStringTest); 199 FRIEND_TEST_ALL_PREFIXES(PrerenderManagerTest, ExtractURLInQueryStringTest);
192 200
193 struct PendingContentsData; 201 struct PendingContentsData;
194 202
195 void SetPrerenderContentsFactory( 203 void SetPrerenderContentsFactory(
196 PrerenderContents::Factory* prerender_contents_factory); 204 PrerenderContents::Factory* prerender_contents_factory);
197 205
198 bool rate_limit_enabled_; 206 bool rate_limit_enabled_;
199 207
200 PendingContentsData* FindPendingEntry(const GURL& url); 208 PendingContentsData* FindPendingEntry(const GURL& url);
201 209
202 // Extracts a urlencoded URL stored in a url= query parameter from a URL 210 // Extracts a urlencoded URL stored in a url= query parameter from a URL
203 // supplied, if available, and stores it in alias_url. Returns whether or not 211 // supplied, if available, and stores it in alias_url. Returns whether or not
204 // the operation succeeded (i.e. a valid URL was found). 212 // the operation succeeded (i.e. a valid URL was found).
205 static bool MaybeGetQueryStringBasedAliasURL(const GURL& url, 213 static bool MaybeGetQueryStringBasedAliasURL(const GURL& url,
206 GURL* alias_url); 214 GURL* alias_url);
207 215
216 // Extracts an experiment stored in the query parameter
217 // lpe= from the URL supplied, and returns it.
218 // Returns kNoExperiment if no experiment ID is found, or if the ID
219 // is not an integer in the range 0 to 9.
dominich.google 2011/06/30 19:55:15 1 to 9
tburkard 2011/06/30 21:40:20 Done.
220 static uint8 GetQueryStringBasedExperiment(const GURL& url);
221
208 base::TimeDelta max_prerender_age() const; 222 base::TimeDelta max_prerender_age() const;
209 unsigned int max_elements() const; 223 unsigned int max_elements() const;
210 224
211 private: 225 private:
212 // Test that needs needs access to internal functions. 226 // Test that needs needs access to internal functions.
213 friend class PrerenderBrowserTest; 227 friend class PrerenderBrowserTest;
214 228
215 friend class base::RefCountedThreadSafe<PrerenderManager>; 229 friend class base::RefCountedThreadSafe<PrerenderManager>;
216 230
217 struct PrerenderContentsData; 231 struct PrerenderContentsData;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
251 // objects. If |this| is deleted before the task is run, the task will 265 // objects. If |this| is deleted before the task is run, the task will
252 // automatically be cancelled. 266 // automatically be cancelled.
253 void PostCleanupTask(); 267 void PostCleanupTask();
254 268
255 bool IsPrerenderElementFresh(const base::Time start) const; 269 bool IsPrerenderElementFresh(const base::Time start) const;
256 void DeleteOldEntries(); 270 void DeleteOldEntries();
257 virtual base::Time GetCurrentTime() const; 271 virtual base::Time GetCurrentTime() const;
258 virtual base::TimeTicks GetCurrentTimeTicks() const; 272 virtual base::TimeTicks GetCurrentTimeTicks() const;
259 virtual PrerenderContents* CreatePrerenderContents(const GURL& url, 273 virtual PrerenderContents* CreatePrerenderContents(const GURL& url,
260 const GURL& referrer, 274 const GURL& referrer,
261 Origin origin); 275 Origin origin,
276 uint8 experiment_id);
262 277
263 // Checks if the PrerenderContents has been added to the pending delete list. 278 // Checks if the PrerenderContents has been added to the pending delete list.
264 bool IsPendingDelete(PrerenderContents* entry) const; 279 bool IsPendingDelete(PrerenderContents* entry) const;
265 280
266 // Deletes any PrerenderContents that have been added to the pending delete 281 // Deletes any PrerenderContents that have been added to the pending delete
267 // list. 282 // list.
268 void DeletePendingDeleteEntries(); 283 void DeletePendingDeleteEntries();
269 284
270 // Finds the specified PrerenderContents and returns it, if it exists. 285 // Finds the specified PrerenderContents and returns it, if it exists.
271 // Returns NULL otherwise. Unlike GetEntry, the PrerenderManager maintains 286 // Returns NULL otherwise. Unlike GetEntry, the PrerenderManager maintains
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
315 330
316 // Destroys all pending prerenders using FinalStatus. Also deletes them as 331 // Destroys all pending prerenders using FinalStatus. Also deletes them as
317 // well as any swapped out TabContents queued for destruction. 332 // well as any swapped out TabContents queued for destruction.
318 // Used both on destruction, and when clearing the browing history. 333 // Used both on destruction, and when clearing the browing history.
319 void DestroyAllContents(FinalStatus final_status); 334 void DestroyAllContents(FinalStatus final_status);
320 335
321 // Records the time from when a page starts prerendering to when the user 336 // Records the time from when a page starts prerendering to when the user
322 // navigates to it. This must be called on the UI thread. 337 // navigates to it. This must be called on the UI thread.
323 void RecordTimeUntilUsed(base::TimeDelta time_until_used); 338 void RecordTimeUntilUsed(base::TimeDelta time_until_used);
324 339
340 // Composes a histogram name based on a histogram type.
341 std::string ComposeHistogramName(std::string prefix_type,
342 std::string name) const;
343
344 // Returns the histogram name for a given origin and experiment.
345 std::string GetHistogramName(Origin origin, uint8 experiment_id,
346 std::string name) const;
347 // Returns the histogram name for the current window.
348 std::string GetDefaultHistogramName(std::string name) const;
349 // Returns the current experiment.
350 uint8 GetCurrentExperimentId() const;
351 // Returns the current origin.
352 Origin GetCurrentOrigin() const;
353 // Returns whether or not there is currently an origin/experiment wash.
354 bool IsOriginExperimentWash() const;
355
325 // Specifies whether prerendering is currently enabled for this 356 // Specifies whether prerendering is currently enabled for this
326 // manager. The value can change dynamically during the lifetime 357 // manager. The value can change dynamically during the lifetime
327 // of the PrerenderManager. 358 // of the PrerenderManager.
328 bool enabled_; 359 bool enabled_;
329 360
330 Profile* profile_; 361 Profile* profile_;
331 362
332 PrerenderTracker* prerender_tracker_; 363 PrerenderTracker* prerender_tracker_;
333 364
334 base::TimeDelta max_prerender_age_; 365 base::TimeDelta max_prerender_age_;
(...skipping 21 matching lines...) Expand all
356 387
357 // Map of child/route id pairs to pending prerender data. 388 // Map of child/route id pairs to pending prerender data.
358 typedef std::map<std::pair<int, int>, std::vector<PendingContentsData> > 389 typedef std::map<std::pair<int, int>, std::vector<PendingContentsData> >
359 PendingPrerenderList; 390 PendingPrerenderList;
360 PendingPrerenderList pending_prerender_list_; 391 PendingPrerenderList pending_prerender_list_;
361 392
362 scoped_ptr<PrerenderContents::Factory> prerender_contents_factory_; 393 scoped_ptr<PrerenderContents::Factory> prerender_contents_factory_;
363 394
364 static PrerenderManagerMode mode_; 395 static PrerenderManagerMode mode_;
365 396
397 // An integer indicating a Prerendering Experiment being currently conducted.
398 // (The last experiment ID seen).
399 uint8 last_experiment_id_;
400
401 // Origin of the last prerender seen.
402 Origin last_origin_;
403
404 // A boolean indicating that we have recently encountered a combination of
405 // different experiments and origins, making an attribution of PPLT's to
406 // experiments / origins impossible.
407 bool origin_experiment_wash_;
408
366 // The time when we last saw a prerender request coming from a renderer. 409 // The time when we last saw a prerender request coming from a renderer.
367 // This is used to record perceived PLT's for a certain amount of time 410 // This is used to record perceived PLT's for a certain amount of time
368 // from the point that we last saw a <link rel=prerender> tag. 411 // from the point that we last saw a <link rel=prerender> tag.
369 base::TimeTicks last_prerender_seen_time_; 412 base::TimeTicks last_prerender_seen_time_;
370 413
371 // A count of how many prerenders we do per session. Initialized to 0 then 414 // A count of how many prerenders we do per session. Initialized to 0 then
372 // incremented and emitted to a histogram on each successful prerender. 415 // incremented and emitted to a histogram on each successful prerender.
373 static int prerenders_per_session_count_; 416 static int prerenders_per_session_count_;
374 417
375 // RepeatingTimer to perform periodic cleanups of pending prerendered 418 // RepeatingTimer to perform periodic cleanups of pending prerendered
(...skipping 11 matching lines...) Expand all
387 ScopedVector<OnCloseTabContentsDeleter> on_close_tab_contents_deleters_; 430 ScopedVector<OnCloseTabContentsDeleter> on_close_tab_contents_deleters_;
388 431
389 scoped_ptr<PrerenderHistory> prerender_history_; 432 scoped_ptr<PrerenderHistory> prerender_history_;
390 433
391 DISALLOW_COPY_AND_ASSIGN(PrerenderManager); 434 DISALLOW_COPY_AND_ASSIGN(PrerenderManager);
392 }; 435 };
393 436
394 } // namespace prerender 437 } // namespace prerender
395 438
396 #endif // CHROME_BROWSER_PRERENDER_PRERENDER_MANAGER_H_ 439 #endif // CHROME_BROWSER_PRERENDER_PRERENDER_MANAGER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698