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

Unified Diff: chrome/renderer/render_view.cc

Issue 42527: - Added support for keeping track of load times.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 9 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/renderer/render_view.h ('k') | chrome/renderer/renderer.vcproj » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/renderer/render_view.cc
===================================================================
--- chrome/renderer/render_view.cc (revision 13095)
+++ chrome/renderer/render_view.cc (working copy)
@@ -82,6 +82,7 @@
#include "skia/ext/vector_canvas.h"
#endif
+using base::Time;
using base::TimeDelta;
using webkit_glue::WebAccessibility;
using WebKit::WebConsoleMessage;
@@ -134,8 +135,10 @@
class RenderViewExtraRequestData : public WebRequest::ExtraData {
public:
RenderViewExtraRequestData(int32 pending_page_id,
- PageTransition::Type transition)
+ PageTransition::Type transition,
+ Time request_time)
: transition_type(transition),
+ request_time(request_time),
request_committed(false),
pending_page_id_(pending_page_id) {
}
@@ -149,6 +152,7 @@
// Contains the transition type that the browser specified when it
// initiated the load.
PageTransition::Type transition_type;
+ Time request_time;
// True if we have already processed the "DidCommitLoad" event for this
// request. Used by session history.
@@ -807,7 +811,7 @@
scoped_ptr<WebRequest> request(WebRequest::Create(params.url));
request->SetCachePolicy(cache_policy);
request->SetExtraData(new RenderViewExtraRequestData(
- params.page_id, params.transition));
+ params.page_id, params.transition, params.request_time));
// If we are reloading, then WebKit will use the state of the current page.
// Otherwise, we give it the state to navigate to.
@@ -1207,6 +1211,15 @@
completed_client_redirect_src_ = GURL();
}
+ WebDataSource* ds = frame->GetProvisionalDataSource();
+ if (ds) {
+ const WebRequest& req = ds->GetRequest();
+ RenderViewExtraRequestData* extra_data =
+ static_cast<RenderViewExtraRequestData*>(req.GetExtraData());
+ if (extra_data) {
+ ds->SetRequestTime(extra_data->request_time);
+ }
+ }
Send(new ViewHostMsg_DidStartProvisionalLoadForFrame(
routing_id_, webview->GetMainFrame() == frame,
frame->GetProvisionalDataSource()->GetRequest().GetURL()));
@@ -1411,6 +1424,11 @@
}
void RenderView::DidFinishLoadForFrame(WebView* webview, WebFrame* frame) {
+ if (webview->GetMainFrame() == frame) {
+ const GURL& url = frame->GetURL();
+ if (url.SchemeIs("http") || url.SchemeIs("https"))
+ DumpLoadHistograms();
+ }
}
void RenderView::DidFailLoadWithError(WebView* webview,
@@ -2988,3 +3006,116 @@
web_frame, callback_id, response);
pending_extension_callbacks_.Remove(callback_id);
}
+
+// Dump all load time histograms. We create 2 sets time based histograms,
+// one that is specific to the navigation type and one that aggregates all
+// navigation types
+//
+// Each set contains 5 histograms measuring various times.
+// The time points we keep are
+// request: time document was requested by user
+// start: time load of document started
+// finishDoc: main document loaded, before onload()
+// finish: after onload() and all resources are loaded
+// finish_document_load_time and finish_load_time.
+// The times that we histogram are
+// requestToStart,
+// startToFinishDoc,
+// finishDocToFinish,
+// startToFinish,
+// requestToFinish,
+//
+void RenderView::DumpLoadHistograms() const {
+ WebFrame* main_frame = webview()->GetMainFrame();
+ WebDataSource* ds = main_frame->GetDataSource();
+ WebNavigationType nav_type = ds->GetNavigationType();
+ Time request_time = ds->GetRequestTime();
+ Time start_load_time = ds->GetStartLoadTime();
+ Time finish_document_load_time = ds->GetFinishDocumentLoadTime();
+ Time finish_load_time = ds->GetFinishLoadTime();
+ TimeDelta request_to_start = start_load_time - request_time;
+ TimeDelta start_to_finish_doc = finish_document_load_time - start_load_time;
+ TimeDelta finish_doc_to_finish = finish_load_time - finish_document_load_time;
+ TimeDelta start_to_finish = finish_load_time - start_load_time;
+ TimeDelta request_to_finish = finish_load_time - start_load_time;
+
+ UMA_HISTOGRAM_TIMES("Renderer.All.RequestToStart", request_to_start);
+ UMA_HISTOGRAM_TIMES("Renderer.All.StartToFinishDoc", start_to_finish_doc);
+ UMA_HISTOGRAM_TIMES("Renderer.All.FinishDocToFinish", finish_doc_to_finish);
+ UMA_HISTOGRAM_TIMES("Renderer.All.StartToFinish", start_to_finish);
+ UMA_HISTOGRAM_TIMES("Renderer.All.RequestToFinish", request_to_finish);
+ switch (nav_type) {
+ case WebNavigationTypeLinkClicked:
+ UMA_HISTOGRAM_TIMES(
+ "Renderer.LinkClicked.RequestToStart", request_to_start);
+ UMA_HISTOGRAM_TIMES(
+ "Renderer.LinkClicked.StartToFinishDoc", start_to_finish_doc);
+ UMA_HISTOGRAM_TIMES(
+ "Renderer.LinkClicked.FinishDocToFinish", finish_doc_to_finish);
+ UMA_HISTOGRAM_TIMES(
+ "Renderer.LinkClicked.RequestToFinish", request_to_finish);
+ UMA_HISTOGRAM_TIMES(
+ "Renderer.LinkClicked.StartToFinish", start_to_finish);
+ break;
+ case WebNavigationTypeFormSubmitted:
+ UMA_HISTOGRAM_TIMES(
+ "Renderer.FormSubmitted.RequestToStart", request_to_start);
+ UMA_HISTOGRAM_TIMES(
+ "Renderer.FormSubmitted.StartToFinishDoc", start_to_finish_doc);
+ UMA_HISTOGRAM_TIMES(
+ "Renderer.FormSubmitted.FinishDocToFinish", finish_doc_to_finish);
+ UMA_HISTOGRAM_TIMES(
+ "Renderer.FormSubmitted.RequestToFinish", request_to_finish);
+ UMA_HISTOGRAM_TIMES(
+ "Renderer.FormSubmitted.StartToFinish", start_to_finish);
+ break;
+ case WebNavigationTypeBackForward:
+ UMA_HISTOGRAM_TIMES(
+ "Renderer.BackForward.RequestToStart", request_to_start);
+ UMA_HISTOGRAM_TIMES(
+ "Renderer.BackForward.StartToFinishDoc", start_to_finish_doc);
+ UMA_HISTOGRAM_TIMES(
+ "Renderer.BackForward.FinishDocToFinish", finish_doc_to_finish);
+ UMA_HISTOGRAM_TIMES(
+ "Renderer.BackForward.RequestToFinish", request_to_finish);
+ UMA_HISTOGRAM_TIMES(
+ "Renderer.BackForward.StartToFinish", start_to_finish);
+ break;
+ case WebNavigationTypeReload:
+ UMA_HISTOGRAM_TIMES(
+ "Renderer.Reload.RequestToStart", request_to_start);
+ UMA_HISTOGRAM_TIMES(
+ "Renderer.Reload.StartToFinishDoc", start_to_finish_doc);
+ UMA_HISTOGRAM_TIMES(
+ "Renderer.Reload.FinishDocToFinish", finish_doc_to_finish);
+ UMA_HISTOGRAM_TIMES(
+ "Renderer.Reload.RequestToFinish", request_to_finish);
+ UMA_HISTOGRAM_TIMES(
+ "Renderer.Reload.StartToFinish", start_to_finish);
+ break;
+ case WebNavigationTypeFormResubmitted:
+ UMA_HISTOGRAM_TIMES(
+ "Renderer.FormResubmitted.RequestToStart", request_to_start);
+ UMA_HISTOGRAM_TIMES(
+ "Renderer.FormResubmitted.StartToFinishDoc", start_to_finish_doc);
+ UMA_HISTOGRAM_TIMES(
+ "Renderer.FormResubmitted.FinishDocToFinish", finish_doc_to_finish);
+ UMA_HISTOGRAM_TIMES(
+ "Renderer.FormResubmitted.RequestToFinish", request_to_finish);
+ UMA_HISTOGRAM_TIMES(
+ "Renderer.FormResubmitted.StartToFinish", start_to_finish);
+ break;
+ case WebNavigationTypeOther:
+ UMA_HISTOGRAM_TIMES(
+ "Renderer.Other.RequestToStart", request_to_start);
+ UMA_HISTOGRAM_TIMES(
+ "Renderer.Other.StartToFinishDoc", start_to_finish_doc);
+ UMA_HISTOGRAM_TIMES(
+ "Renderer.Other.FinishDocToFinish", finish_doc_to_finish);
+ UMA_HISTOGRAM_TIMES(
+ "Renderer.Other.RequestToFinish", request_to_finish);
+ UMA_HISTOGRAM_TIMES(
+ "Renderer.Other.StartToFinish", start_to_finish);
+ break;
+ }
+}
« no previous file with comments | « chrome/renderer/render_view.h ('k') | chrome/renderer/renderer.vcproj » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698