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

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: ... new tests, indent. 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 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
82 if (bitmap_web_contents_ != web_contents) 82 if (bitmap_web_contents_ != web_contents)
83 return; 83 return;
84 84
85 if (bitmap_type == BITMAP_SWAP_IN) 85 if (bitmap_type == BITMAP_SWAP_IN)
86 bitmap_.swap(bitmap); 86 bitmap_.swap(bitmap);
87 87
88 if (bitmap_type == BITMAP_ON_LOAD) { 88 if (bitmap_type == BITMAP_ON_LOAD) {
89 PrerenderManager* prerender_manager = 89 PrerenderManager* prerender_manager =
90 tab_helper_->MaybeGetPrerenderManager(); 90 tab_helper_->MaybeGetPrerenderManager();
91 if (prerender_manager) { 91 if (prerender_manager) {
92 prerender_manager->histograms()->RecordFractionPixelsFinalAtSwapin( 92 prerender_manager->RecordFractionPixelsFinalAtSwapin(
93 CompareBitmaps(bitmap_.get(), bitmap.get())); 93 web_contents, CompareBitmaps(bitmap_.get(), bitmap.get()));
94 } 94 }
95 bitmap_.reset(); 95 bitmap_.reset();
96 bitmap_web_contents_ = NULL; 96 bitmap_web_contents_ = NULL;
97 } 97 }
98 } 98 }
99 99
100 // Helper comparing two bitmaps of identical size. 100 // Helper comparing two bitmaps of identical size.
101 // Returns a value < 0.0 if there is an error, and otherwise, a double in 101 // Returns a value < 0.0 if there is an error, and otherwise, a double in
102 // [0, 1] indicating the fraction of pixels that are the same. 102 // [0, 1] indicating the fraction of pixels that are the same.
103 double CompareBitmaps(SkBitmap* bitmap1, SkBitmap* bitmap2) { 103 double CompareBitmaps(SkBitmap* bitmap1, SkBitmap* bitmap2) {
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 } 137 }
138 138
139 void PrerenderTabHelper::ProvisionalChangeToMainFrameUrl( 139 void PrerenderTabHelper::ProvisionalChangeToMainFrameUrl(
140 const GURL& url, 140 const GURL& url,
141 const GURL& opener_url, 141 const GURL& opener_url,
142 content::RenderViewHost* render_view_host) { 142 content::RenderViewHost* render_view_host) {
143 url_ = url; 143 url_ = url;
144 PrerenderManager* prerender_manager = MaybeGetPrerenderManager(); 144 PrerenderManager* prerender_manager = MaybeGetPrerenderManager();
145 if (!prerender_manager) 145 if (!prerender_manager)
146 return; 146 return;
147 if (prerender_manager->IsWebContentsPrerendering(web_contents())) 147 if (prerender_manager->IsWebContentsPrerendering(web_contents(), NULL))
148 return; 148 return;
149 prerender_manager->MarkWebContentsAsNotPrerendered(web_contents()); 149 prerender_manager->MarkWebContentsAsNotPrerendered(web_contents());
150 } 150 }
151 151
152 void PrerenderTabHelper::DidCommitProvisionalLoadForFrame( 152 void PrerenderTabHelper::DidCommitProvisionalLoadForFrame(
153 int64 frame_id, 153 int64 frame_id,
154 bool is_main_frame, 154 bool is_main_frame,
155 const GURL& validated_url, 155 const GURL& validated_url,
156 content::PageTransition transition_type, 156 content::PageTransition transition_type,
157 content::RenderViewHost* render_view_host) { 157 content::RenderViewHost* render_view_host) {
158 if (!is_main_frame) 158 if (!is_main_frame)
159 return; 159 return;
160 url_ = validated_url; 160 url_ = validated_url;
161 PrerenderManager* prerender_manager = MaybeGetPrerenderManager(); 161 PrerenderManager* prerender_manager = MaybeGetPrerenderManager();
162 if (!prerender_manager) 162 if (!prerender_manager)
163 return; 163 return;
164 if (prerender_manager->IsWebContentsPrerendering(web_contents())) 164 if (prerender_manager->IsWebContentsPrerendering(web_contents(), NULL))
165 return; 165 return;
166 prerender_manager->RecordNavigation(validated_url); 166 prerender_manager->RecordNavigation(validated_url);
167 } 167 }
168 168
169 void PrerenderTabHelper::DidStopLoading( 169 void PrerenderTabHelper::DidStopLoading(
170 content::RenderViewHost* render_view_host) { 170 content::RenderViewHost* render_view_host) {
171 // Compute the PPLT metric and report it in a histogram, if needed. 171 // Compute the PPLT metric and report it in a histogram, if needed.
172 // We include pages that are still prerendering and have just finished 172 // We include pages that are still prerendering and have just finished
173 // loading -- PrerenderManager will sort this out and handle it correctly 173 // loading -- PrerenderManager will sort this out and handle it correctly
174 // (putting those times into a separate histogram). 174 // (putting those times into a separate histogram).
(...skipping 39 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