summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjar@chromium.org <jar@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-05-12 23:01:45 +0000
committerjar@chromium.org <jar@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-05-12 23:01:45 +0000
commitb855ebe60df2d7429b88490a8d33a3757515a692 (patch)
tree20175e16df4e32b08feae0702b79c3e9411cba4f
parent410426f7ac5d9d8dfea3c96b7ccf1c082a8218cb (diff)
downloadchromium_src-b855ebe60df2d7429b88490a8d33a3757515a692.zip
chromium_src-b855ebe60df2d7429b88490a8d33a3757515a692.tar.gz
chromium_src-b855ebe60df2d7429b88490a8d33a3757515a692.tar.bz2
Ensure all stats are initialized when calculated Page Load Times
Some timer values were not initialized before we called to dump histograms, and this was leading to bogus intervals in our stats, and at times, producing DCHECK() failures (for overly large values). BUG=43220 r=davemoore Review URL: http://codereview.chromium.org/2042007 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@47087 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/renderer/render_view.cc30
1 files changed, 22 insertions, 8 deletions
diff --git a/chrome/renderer/render_view.cc b/chrome/renderer/render_view.cc
index 6d2e6fc..b64e7c0 100644
--- a/chrome/renderer/render_view.cc
+++ b/chrome/renderer/render_view.cc
@@ -4313,11 +4313,23 @@ void RenderView::DumpLoadHistograms() const {
WebFrame* main_frame = webview()->mainFrame();
NavigationState* navigation_state =
NavigationState::FromDataSource(main_frame->dataSource());
- Time finish = navigation_state->finish_load_time();
// If we've already dumped, do nothing.
if (navigation_state->load_histograms_recorded())
return;
+ Time start = navigation_state->start_load_time();
+ if (start.is_null())
+ return; // Probably very premature abandonment of page.
+ Time commit = navigation_state->commit_load_time();
+ if (commit.is_null())
+ return; // Probably very premature abandonment of page.
+ // We properly handle null values for the next 3 variables.
+ Time request = navigation_state->request_time();
+ Time first_paint = navigation_state->first_paint_time();
+ Time first_paint_after_load = navigation_state->first_paint_after_load_time();
+
+ Time finish = navigation_state->finish_load_time();
+ Time finish_doc = navigation_state->finish_document_load_time();
// Handle case where user hits "stop" or "back" before loading completely.
bool abandoned_page = finish.is_null();
@@ -4325,6 +4337,10 @@ void RenderView::DumpLoadHistograms() const {
finish = Time::Now();
navigation_state->set_finish_load_time(finish);
}
+ if (finish_doc.is_null()) {
+ finish_doc = Time::Now();
+ navigation_state->set_finish_document_load_time(finish_doc);
+ }
UMA_HISTOGRAM_ENUMERATION("Renderer4.Abandoned", abandoned_page ? 1 : 0, 2);
LogNavigationState(navigation_state, main_frame->dataSource());
@@ -4339,13 +4355,6 @@ void RenderView::DumpLoadHistograms() const {
UMA_HISTOGRAM_COUNTS("SiteIsolation.PageLoadsWithSameSiteFrameAccess",
same_origin_access_count_);
- Time request = navigation_state->request_time();
- Time start = navigation_state->start_load_time();
- Time commit = navigation_state->commit_load_time();
- Time finish_doc = navigation_state->finish_document_load_time();
- Time first_paint = navigation_state->first_paint_time();
- Time first_paint_after_load =
- navigation_state->first_paint_after_load_time();
Time begin;
// Client side redirects will have no request time.
@@ -4546,18 +4555,23 @@ void RenderView::DumpLoadHistograms() const {
UMA_HISTOGRAM_MEDIUM_TIMES("Renderer4.CommitToFinish", finish - commit);
if (!first_paint.is_null()) {
+ DCHECK(begin <= first_paint);
UMA_HISTOGRAM_MEDIUM_TIMES(
"Renderer4.BeginToFirstPaint", first_paint - begin);
+ DCHECK(commit <= first_paint);
UMA_HISTOGRAM_MEDIUM_TIMES(
"Renderer4.CommitToFirstPaint", first_paint - commit);
}
if (!first_paint_after_load.is_null()) {
+ DCHECK(begin <= first_paint_after_load);
UMA_HISTOGRAM_MEDIUM_TIMES(
"Renderer4.BeginToFirstPaintAfterLoad", first_paint_after_load - begin);
+ DCHECK(commit <= first_paint_after_load);
UMA_HISTOGRAM_MEDIUM_TIMES(
"Renderer4.CommitToFirstPaintAfterLoad",
first_paint_after_load - commit);
+ DCHECK(finish <= first_paint_after_load);
UMA_HISTOGRAM_MEDIUM_TIMES(
"Renderer4.FinishToFirstPaintAfterLoad",
first_paint_after_load - finish);