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

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

Issue 14949012: Add instrumentation to see how often a local predictor prerender could be (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 7 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
« no previous file with comments | « chrome/browser/prerender/prerender_manager.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 #include "chrome/browser/prerender/prerender_tab_helper.h" 5 #include "chrome/browser/prerender/prerender_tab_helper.h"
6 6
7 #include "base/metrics/histogram.h" 7 #include "base/metrics/histogram.h"
8 #include "base/strings/string_number_conversions.h" 8 #include "base/strings/string_number_conversions.h"
9 #include "base/time.h" 9 #include "base/time.h"
10 #include "chrome/browser/predictors/logged_in_predictor_table.h" 10 #include "chrome/browser/predictors/logged_in_predictor_table.h"
11 #include "chrome/browser/prerender/prerender_histograms.h" 11 #include "chrome/browser/prerender/prerender_histograms.h"
12 #include "chrome/browser/prerender/prerender_local_predictor.h"
12 #include "chrome/browser/prerender/prerender_manager.h" 13 #include "chrome/browser/prerender/prerender_manager.h"
13 #include "chrome/browser/prerender/prerender_manager_factory.h" 14 #include "chrome/browser/prerender/prerender_manager_factory.h"
14 #include "chrome/browser/profiles/profile.h" 15 #include "chrome/browser/profiles/profile.h"
15 #include "content/public/browser/browser_thread.h" 16 #include "content/public/browser/browser_thread.h"
16 #include "content/public/browser/navigation_details.h" 17 #include "content/public/browser/navigation_details.h"
17 #include "content/public/browser/navigation_entry.h" 18 #include "content/public/browser/navigation_entry.h"
18 #include "content/public/browser/render_view_host.h" 19 #include "content/public/browser/render_view_host.h"
19 #include "content/public/browser/web_contents.h" 20 #include "content/public/browser/web_contents.h"
20 #include "content/public/browser/web_contents_view.h" 21 #include "content/public/browser/web_contents_view.h"
21 #include "content/public/common/frame_navigate_params.h" 22 #include "content/public/common/frame_navigate_params.h"
22 #include "skia/ext/platform_canvas.h" 23 #include "skia/ext/platform_canvas.h"
23 #include "third_party/skia/include/core/SkBitmap.h" 24 #include "third_party/skia/include/core/SkBitmap.h"
24 #include "ui/gfx/rect.h" 25 #include "ui/gfx/rect.h"
25 26
26 using content::WebContents; 27 using content::WebContents;
27 28
28 DEFINE_WEB_CONTENTS_USER_DATA_KEY(prerender::PrerenderTabHelper); 29 DEFINE_WEB_CONTENTS_USER_DATA_KEY(prerender::PrerenderTabHelper);
29 30
30 namespace prerender { 31 namespace prerender {
31 32
33 namespace {
34
35 void ReportTabHelperURLSeenToLocalPredictor(
36 PrerenderManager* prerender_manager,
37 const GURL& url,
38 WebContents* web_contents) {
39 if (!prerender_manager)
40 return;
41 PrerenderLocalPredictor* local_predictor =
42 prerender_manager->local_predictor();
43 if (!local_predictor)
44 return;
45 local_predictor->OnTabHelperURLSeen(url, web_contents);
46 }
47
48 } // namespace
49
32 // Helper class to compute pixel-based stats on the paint progress 50 // Helper class to compute pixel-based stats on the paint progress
33 // between when a prerendered page is swapped in and when the onload event 51 // between when a prerendered page is swapped in and when the onload event
34 // fires. 52 // fires.
35 class PrerenderTabHelper::PixelStats { 53 class PrerenderTabHelper::PixelStats {
36 public: 54 public:
37 explicit PixelStats(PrerenderTabHelper* tab_helper) : 55 explicit PixelStats(PrerenderTabHelper* tab_helper) :
38 bitmap_web_contents_(NULL), 56 bitmap_web_contents_(NULL),
39 weak_factory_(this), 57 weak_factory_(this),
40 tab_helper_(tab_helper) { 58 tab_helper_(tab_helper) {
41 } 59 }
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
145 content::RenderViewHost* render_view_host) { 163 content::RenderViewHost* render_view_host) {
146 url_ = url; 164 url_ = url;
147 RecordEvent(EVENT_MAINFRAME_CHANGE); 165 RecordEvent(EVENT_MAINFRAME_CHANGE);
148 RecordEventIfLoggedInURL(EVENT_MAINFRAME_CHANGE_DOMAIN_LOGGED_IN, url); 166 RecordEventIfLoggedInURL(EVENT_MAINFRAME_CHANGE_DOMAIN_LOGGED_IN, url);
149 PrerenderManager* prerender_manager = MaybeGetPrerenderManager(); 167 PrerenderManager* prerender_manager = MaybeGetPrerenderManager();
150 if (!prerender_manager) 168 if (!prerender_manager)
151 return; 169 return;
152 if (prerender_manager->IsWebContentsPrerendering(web_contents(), NULL)) 170 if (prerender_manager->IsWebContentsPrerendering(web_contents(), NULL))
153 return; 171 return;
154 prerender_manager->MarkWebContentsAsNotPrerendered(web_contents()); 172 prerender_manager->MarkWebContentsAsNotPrerendered(web_contents());
173 ReportTabHelperURLSeenToLocalPredictor(prerender_manager, url,
174 web_contents());
155 } 175 }
156 176
157 void PrerenderTabHelper::DidCommitProvisionalLoadForFrame( 177 void PrerenderTabHelper::DidCommitProvisionalLoadForFrame(
158 int64 frame_id, 178 int64 frame_id,
159 bool is_main_frame, 179 bool is_main_frame,
160 const GURL& validated_url, 180 const GURL& validated_url,
161 content::PageTransition transition_type, 181 content::PageTransition transition_type,
162 content::RenderViewHost* render_view_host) { 182 content::RenderViewHost* render_view_host) {
163 if (!is_main_frame) 183 if (!is_main_frame)
164 return; 184 return;
165 RecordEvent(EVENT_MAINFRAME_COMMIT); 185 RecordEvent(EVENT_MAINFRAME_COMMIT);
166 RecordEventIfLoggedInURL(EVENT_MAINFRAME_COMMIT_DOMAIN_LOGGED_IN, 186 RecordEventIfLoggedInURL(EVENT_MAINFRAME_COMMIT_DOMAIN_LOGGED_IN,
167 validated_url); 187 validated_url);
168 url_ = validated_url; 188 url_ = validated_url;
169 PrerenderManager* prerender_manager = MaybeGetPrerenderManager(); 189 PrerenderManager* prerender_manager = MaybeGetPrerenderManager();
170 if (!prerender_manager) 190 if (!prerender_manager)
171 return; 191 return;
172 if (prerender_manager->IsWebContentsPrerendering(web_contents(), NULL)) 192 if (prerender_manager->IsWebContentsPrerendering(web_contents(), NULL))
173 return; 193 return;
174 prerender_manager->RecordNavigation(validated_url); 194 prerender_manager->RecordNavigation(validated_url);
195 ReportTabHelperURLSeenToLocalPredictor(prerender_manager, validated_url,
196 web_contents());
175 } 197 }
176 198
177 void PrerenderTabHelper::DidStopLoading( 199 void PrerenderTabHelper::DidStopLoading(
178 content::RenderViewHost* render_view_host) { 200 content::RenderViewHost* render_view_host) {
179 // Compute the PPLT metric and report it in a histogram, if needed. 201 // Compute the PPLT metric and report it in a histogram, if needed.
180 // We include pages that are still prerendering and have just finished 202 // We include pages that are still prerendering and have just finished
181 // loading -- PrerenderManager will sort this out and handle it correctly 203 // loading -- PrerenderManager will sort this out and handle it correctly
182 // (putting those times into a separate histogram). 204 // (putting those times into a separate histogram).
183 if (!pplt_load_start_.is_null()) { 205 if (!pplt_load_start_.is_null()) {
184 double fraction_elapsed_at_swapin = -1.0; 206 double fraction_elapsed_at_swapin = -1.0;
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
297 319
298 void PrerenderTabHelper::RecordEventIfLoggedInURLResult( 320 void PrerenderTabHelper::RecordEventIfLoggedInURLResult(
299 PrerenderTabHelper::Event event, 321 PrerenderTabHelper::Event event,
300 scoped_ptr<bool> is_present, 322 scoped_ptr<bool> is_present,
301 scoped_ptr<bool> lookup_succeeded) { 323 scoped_ptr<bool> lookup_succeeded) {
302 if (*lookup_succeeded && *is_present) 324 if (*lookup_succeeded && *is_present)
303 RecordEvent(event); 325 RecordEvent(event);
304 } 326 }
305 327
306 } // namespace prerender 328 } // namespace prerender
OLDNEW
« no previous file with comments | « chrome/browser/prerender/prerender_manager.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698