diff options
author | jar@chromium.org <jar@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-05-12 23:01:45 +0000 |
---|---|---|
committer | jar@chromium.org <jar@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-05-12 23:01:45 +0000 |
commit | b855ebe60df2d7429b88490a8d33a3757515a692 (patch) | |
tree | 20175e16df4e32b08feae0702b79c3e9411cba4f | |
parent | 410426f7ac5d9d8dfea3c96b7ccf1c082a8218cb (diff) | |
download | chromium_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.cc | 30 |
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); |