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

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

Issue 11028037: Fix prerender histograms for multiple prerender case. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: ... partial remediation (stay tuned...) Created 8 years, 2 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 #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/string_number_conversions.h" 8 #include "base/string_number_conversions.h"
9 #include "base/time.h" 9 #include "base/time.h"
10 #include "chrome/browser/prerender/prerender_histograms.h" 10 #include "chrome/browser/prerender/prerender_histograms.h"
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 if (bitmap_web_contents_ != web_contents) 83 if (bitmap_web_contents_ != web_contents)
84 return; 84 return;
85 85
86 if (bitmap_type == BITMAP_SWAP_IN) 86 if (bitmap_type == BITMAP_SWAP_IN)
87 bitmap_.swap(bitmap); 87 bitmap_.swap(bitmap);
88 88
89 if (bitmap_type == BITMAP_ON_LOAD) { 89 if (bitmap_type == BITMAP_ON_LOAD) {
90 PrerenderManager* prerender_manager = 90 PrerenderManager* prerender_manager =
91 tab_helper_->MaybeGetPrerenderManager(); 91 tab_helper_->MaybeGetPrerenderManager();
92 if (prerender_manager) { 92 if (prerender_manager) {
93 prerender_manager->histograms()->RecordFractionPixelsFinalAtSwapin( 93 prerender_manager->RecordFractionPixelsFinalAtSwapin(
94 CompareBitmaps(bitmap_.get(), bitmap.get())); 94 web_contents, CompareBitmaps(bitmap_.get(), bitmap.get()));
95 } 95 }
96 bitmap_.reset(); 96 bitmap_.reset();
97 bitmap_web_contents_ = NULL; 97 bitmap_web_contents_ = NULL;
98 } 98 }
99 } 99 }
100 100
101 // Helper comparing two bitmaps of identical size. 101 // Helper comparing two bitmaps of identical size.
102 // Returns a value < 0.0 if there is an error, and otherwise, a double in 102 // Returns a value < 0.0 if there is an error, and otherwise, a double in
103 // [0, 1] indicating the fraction of pixels that are the same. 103 // [0, 1] indicating the fraction of pixels that are the same.
104 double CompareBitmaps(SkBitmap* bitmap1, SkBitmap* bitmap2) { 104 double CompareBitmaps(SkBitmap* bitmap1, SkBitmap* bitmap2) {
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
138 } 138 }
139 139
140 void PrerenderTabHelper::ProvisionalChangeToMainFrameUrl( 140 void PrerenderTabHelper::ProvisionalChangeToMainFrameUrl(
141 const GURL& url, 141 const GURL& url,
142 const GURL& opener_url, 142 const GURL& opener_url,
143 content::RenderViewHost* render_view_host) { 143 content::RenderViewHost* render_view_host) {
144 url_ = url; 144 url_ = url;
145 PrerenderManager* prerender_manager = MaybeGetPrerenderManager(); 145 PrerenderManager* prerender_manager = MaybeGetPrerenderManager();
146 if (!prerender_manager) 146 if (!prerender_manager)
147 return; 147 return;
148 if (prerender_manager->IsWebContentsPrerendering(web_contents())) 148 if (prerender_manager->IsWebContentsPrerendering(web_contents(), NULL))
gavinp 2012/10/10 18:14:56 I was really torn about adding this param, or crea
149 return; 149 return;
150 prerender_manager->MarkWebContentsAsNotPrerendered(web_contents()); 150 prerender_manager->MarkWebContentsAsNotPrerendered(web_contents());
151 } 151 }
152 152
153 void PrerenderTabHelper::DidCommitProvisionalLoadForFrame( 153 void PrerenderTabHelper::DidCommitProvisionalLoadForFrame(
154 int64 frame_id, 154 int64 frame_id,
155 bool is_main_frame, 155 bool is_main_frame,
156 const GURL& validated_url, 156 const GURL& validated_url,
157 content::PageTransition transition_type, 157 content::PageTransition transition_type,
158 content::RenderViewHost* render_view_host) { 158 content::RenderViewHost* render_view_host) {
159 if (!is_main_frame) 159 if (!is_main_frame)
160 return; 160 return;
161 url_ = validated_url; 161 url_ = validated_url;
162 PrerenderManager* prerender_manager = MaybeGetPrerenderManager(); 162 PrerenderManager* prerender_manager = MaybeGetPrerenderManager();
163 if (!prerender_manager) 163 if (!prerender_manager)
164 return; 164 return;
165 if (prerender_manager->IsWebContentsPrerendering(web_contents())) 165 if (prerender_manager->IsWebContentsPrerendering(web_contents(), NULL))
166 return; 166 return;
167 prerender_manager->RecordNavigation(validated_url); 167 prerender_manager->RecordNavigation(validated_url);
168 } 168 }
169 169
170 void PrerenderTabHelper::DidStopLoading( 170 void PrerenderTabHelper::DidStopLoading(
171 content::RenderViewHost* render_view_host) { 171 content::RenderViewHost* render_view_host) {
172 // Compute the PPLT metric and report it in a histogram, if needed. 172 // Compute the PPLT metric and report it in a histogram, if needed.
173 // We include pages that are still prerendering and have just finished 173 // We include pages that are still prerendering and have just finished
174 // loading -- PrerenderManager will sort this out and handle it correctly 174 // loading -- PrerenderManager will sort this out and handle it correctly
175 // (putting those times into a separate histogram). 175 // (putting those times into a separate histogram).
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
214 214
215 PrerenderManager* PrerenderTabHelper::MaybeGetPrerenderManager() const { 215 PrerenderManager* PrerenderTabHelper::MaybeGetPrerenderManager() const {
216 return PrerenderManagerFactory::GetForProfile( 216 return PrerenderManagerFactory::GetForProfile(
217 Profile::FromBrowserContext(web_contents()->GetBrowserContext())); 217 Profile::FromBrowserContext(web_contents()->GetBrowserContext()));
218 } 218 }
219 219
220 bool PrerenderTabHelper::IsPrerendering() { 220 bool PrerenderTabHelper::IsPrerendering() {
221 PrerenderManager* prerender_manager = MaybeGetPrerenderManager(); 221 PrerenderManager* prerender_manager = MaybeGetPrerenderManager();
222 if (!prerender_manager) 222 if (!prerender_manager)
223 return false; 223 return false;
224 return prerender_manager->IsWebContentsPrerendering(web_contents()); 224 return prerender_manager->IsWebContentsPrerendering(web_contents(), NULL);
225 } 225 }
226 226
227 bool PrerenderTabHelper::IsPrerendered() { 227 bool PrerenderTabHelper::IsPrerendered() {
228 PrerenderManager* prerender_manager = MaybeGetPrerenderManager(); 228 PrerenderManager* prerender_manager = MaybeGetPrerenderManager();
229 if (!prerender_manager) 229 if (!prerender_manager)
230 return false; 230 return false;
231 return prerender_manager->IsWebContentsPrerendered(web_contents()); 231 return prerender_manager->IsWebContentsPrerendered(web_contents(), NULL);
232 } 232 }
233 233
234 void PrerenderTabHelper::PrerenderSwappedIn() { 234 void PrerenderTabHelper::PrerenderSwappedIn() {
235 // Ensure we are not prerendering any more. 235 // Ensure we are not prerendering any more.
236 DCHECK(!IsPrerendering()); 236 DCHECK(!IsPrerendering());
237 if (pplt_load_start_.is_null()) { 237 if (pplt_load_start_.is_null()) {
238 // If we have already finished loading, report a 0 PPLT. 238 // If we have already finished loading, report a 0 PPLT.
239 PrerenderManager::RecordPerceivedPageLoadTime(base::TimeDelta(), 1.0, 239 PrerenderManager::RecordPerceivedPageLoadTime(base::TimeDelta(), 1.0,
240 web_contents(), url_); 240 web_contents(), url_);
241 PrerenderManager* prerender_manager = MaybeGetPrerenderManager(); 241 PrerenderManager* prerender_manager = MaybeGetPrerenderManager();
242 if (prerender_manager) 242 if (prerender_manager)
243 prerender_manager->histograms()->RecordFractionPixelsFinalAtSwapin(1.0); 243 prerender_manager->RecordFractionPixelsFinalAtSwapin(web_contents(), 1.0);
244 } else { 244 } else {
245 // If we have not finished loading yet, record the actual load start, and 245 // If we have not finished loading yet, record the actual load start, and
246 // rebase the start time to now. 246 // rebase the start time to now.
247 actual_load_start_ = pplt_load_start_; 247 actual_load_start_ = pplt_load_start_;
248 pplt_load_start_ = base::TimeTicks::Now(); 248 pplt_load_start_ = base::TimeTicks::Now();
249 if (pixel_stats_.get()) 249 if (pixel_stats_.get())
250 pixel_stats_->GetBitmap(PixelStats::BITMAP_SWAP_IN, web_contents()); 250 pixel_stats_->GetBitmap(PixelStats::BITMAP_SWAP_IN, web_contents());
251 } 251 }
252 } 252 }
253 253
254 } // namespace prerender 254 } // namespace prerender
OLDNEW
« no previous file with comments | « chrome/browser/prerender/prerender_origin.cc ('k') | chrome/browser/task_manager/task_manager_resource_providers.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698