diff options
author | kouhei@chromium.org <kouhei@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-07-30 07:16:52 +0000 |
---|---|---|
committer | kouhei@chromium.org <kouhei@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-07-30 07:16:52 +0000 |
commit | 798a1b069246a628ed772a60598d5f2ad4a13ce9 (patch) | |
tree | c503c6b69119e050f71b66b853edd6d0a856892c /content | |
parent | 3a86a71669173b4f334c9a9103409051fccc728a (diff) | |
download | chromium_src-798a1b069246a628ed772a60598d5f2ad4a13ce9.zip chromium_src-798a1b069246a628ed772a60598d5f2ad4a13ce9.tar.gz chromium_src-798a1b069246a628ed772a60598d5f2ad4a13ce9.tar.bz2 |
Add the UMA PLT.BeginToFinish{,Doc}_AfterPreconnectRequest to measure PLT just after mouseevent preconnect triggers.
[Note to sheriff] This patch requires blink patch http://crrev.com/18598003 to be landed first.
This UMA aims to measure PLT on link navigations with {mouse,gesture}-event preconnects. The PLT is to be compared between experiment/control groups using Finch.
BUG=235361
Review URL: https://chromiumcodereview.appspot.com/18601004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@214313 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
-rw-r--r-- | content/child/request_extra_data.cc | 4 | ||||
-rw-r--r-- | content/child/request_extra_data.h | 1 | ||||
-rw-r--r-- | content/child/resource_dispatcher_unittest.cc | 2 | ||||
-rw-r--r-- | content/public/renderer/document_state.cc | 1 | ||||
-rw-r--r-- | content/public/renderer/document_state.h | 6 | ||||
-rw-r--r-- | content/renderer/pepper/url_request_info_util.cc | 4 | ||||
-rw-r--r-- | content/renderer/render_frame_impl.cc | 42 | ||||
-rw-r--r-- | content/renderer/render_frame_impl.h | 2 |
8 files changed, 54 insertions, 8 deletions
diff --git a/content/child/request_extra_data.cc b/content/child/request_extra_data.cc index ac2bed12..419fbb4 100644 --- a/content/child/request_extra_data.cc +++ b/content/child/request_extra_data.cc @@ -11,6 +11,7 @@ namespace content { RequestExtraData::RequestExtraData(WebReferrerPolicy referrer_policy, const WebString& custom_user_agent, + bool was_after_preconnect_request, bool is_main_frame, int64 frame_id, bool parent_is_main_frame, @@ -20,7 +21,8 @@ RequestExtraData::RequestExtraData(WebReferrerPolicy referrer_policy, int transferred_request_child_id, int transferred_request_request_id) : webkit_glue::WebURLRequestExtraDataImpl(referrer_policy, - custom_user_agent), + custom_user_agent, + was_after_preconnect_request), is_main_frame_(is_main_frame), frame_id_(frame_id), parent_is_main_frame_(parent_is_main_frame), diff --git a/content/child/request_extra_data.h b/content/child/request_extra_data.h index 3cbc7fa..83adf28 100644 --- a/content/child/request_extra_data.h +++ b/content/child/request_extra_data.h @@ -19,6 +19,7 @@ class CONTENT_EXPORT RequestExtraData public: RequestExtraData(WebKit::WebReferrerPolicy referrer_policy, const WebKit::WebString& custom_user_agent, + bool was_after_preconnect_request, bool is_main_frame, int64 frame_id, bool parent_is_main_frame, diff --git a/content/child/resource_dispatcher_unittest.cc b/content/child/resource_dispatcher_unittest.cc index 6b5eb40..f537496 100644 --- a/content/child/resource_dispatcher_unittest.cc +++ b/content/child/resource_dispatcher_unittest.cc @@ -176,7 +176,7 @@ class ResourceDispatcherTest : public testing::Test, public IPC::Sender { request_info.routing_id = 0; RequestExtraData extra_data(WebKit::WebReferrerPolicyDefault, WebKit::WebString(), - true, 0, false, -1, true, + false, true, 0, false, -1, true, PAGE_TRANSITION_LINK, -1, -1); request_info.extra_data = &extra_data; diff --git a/content/public/renderer/document_state.cc b/content/public/renderer/document_state.cc index 9e9d57d..235fc89 100644 --- a/content/public/renderer/document_state.cc +++ b/content/public/renderer/document_state.cc @@ -19,6 +19,7 @@ DocumentState::DocumentState() was_fetched_via_proxy_(false), was_prefetcher_(false), was_referred_by_prefetcher_(false), + was_after_preconnect_request_(false), load_type_(UNDEFINED_LOAD), can_load_local_resources_(false) { } diff --git a/content/public/renderer/document_state.h b/content/public/renderer/document_state.h index c7829d6..40a5f42 100644 --- a/content/public/renderer/document_state.h +++ b/content/public/renderer/document_state.h @@ -186,6 +186,11 @@ class CONTENT_EXPORT DocumentState return was_referred_by_prefetcher_; } + void set_was_after_preconnect_request(bool value) { + was_after_preconnect_request_ = value; + } + bool was_after_preconnect_request() { return was_after_preconnect_request_; } + // Record the nature of this load, for use when histogramming page load times. LoadType load_type() const { return load_type_; } void set_load_type(LoadType load_type) { load_type_ = load_type; } @@ -220,6 +225,7 @@ class CONTENT_EXPORT DocumentState // A prefetcher is a page that contains link rel=prefetch elements. bool was_prefetcher_; bool was_referred_by_prefetcher_; + bool was_after_preconnect_request_; LoadType load_type_; diff --git a/content/renderer/pepper/url_request_info_util.cc b/content/renderer/pepper/url_request_info_util.cc index 8e2988a..9091203 100644 --- a/content/renderer/pepper/url_request_info_util.cc +++ b/content/renderer/pepper/url_request_info_util.cc @@ -186,9 +186,11 @@ bool CreateWebURLRequest(::ppapi::URLRequestInfoData* data, } if (data->has_custom_user_agent) { + bool was_after_preconnect_request = false; dest->setExtraData(new webkit_glue::WebURLRequestExtraDataImpl( WebKit::WebReferrerPolicyDefault, // Ignored. - WebString::fromUTF8(data->custom_user_agent))); + WebString::fromUTF8(data->custom_user_agent), + was_after_preconnect_request)); } return true; diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc index 33b167a..fcdab6e 100644 --- a/content/renderer/render_frame_impl.cc +++ b/content/renderer/render_frame_impl.cc @@ -490,6 +490,30 @@ void RenderFrameImpl::didUpdateCurrentHistoryItem(WebKit::WebFrame* frame) { render_view_->didUpdateCurrentHistoryItem(frame); } +void RenderFrameImpl::willRequestAfterPreconnect( + WebKit::WebFrame* frame, + WebKit::WebURLRequest& request) { + WebKit::WebReferrerPolicy referrer_policy = WebKit::WebReferrerPolicyDefault; + WebString custom_user_agent; + + if (request.extraData()) { + // This will only be called before willSendRequest, so only ExtraData + // members we have to copy here is on WebURLRequestExtraDataImpl. + webkit_glue::WebURLRequestExtraDataImpl* old_extra_data = + static_cast<webkit_glue::WebURLRequestExtraDataImpl*>( + request.extraData()); + + referrer_policy = old_extra_data->referrer_policy(); + custom_user_agent = old_extra_data->custom_user_agent(); + } + + bool was_after_preconnect_request = true; + // The args after |was_after_preconnect_request| are not used, and set to + // correct values at |willSendRequest|. + request.setExtraData(new webkit_glue::WebURLRequestExtraDataImpl( + referrer_policy, custom_user_agent, was_after_preconnect_request)); +} + void RenderFrameImpl::willSendRequest( WebKit::WebFrame* frame, unsigned identifier, @@ -541,11 +565,14 @@ void RenderFrameImpl::willSendRequest( // agent. This needs to be done here, after WebKit is through with setting the // user agent on its own. WebString custom_user_agent; + bool was_after_preconnect_request = false; if (request.extraData()) { webkit_glue::WebURLRequestExtraDataImpl* old_extra_data = static_cast<webkit_glue::WebURLRequestExtraDataImpl*>( request.extraData()); custom_user_agent = old_extra_data->custom_user_agent(); + was_after_preconnect_request = + old_extra_data->was_after_preconnect_request(); if (!custom_user_agent.isNull()) { if (custom_user_agent.isEmpty()) @@ -558,6 +585,7 @@ void RenderFrameImpl::willSendRequest( request.setExtraData( new RequestExtraData(referrer_policy, custom_user_agent, + was_after_preconnect_request, (frame == top_frame), frame->identifier(), frame->parent() == top_frame, @@ -569,11 +597,15 @@ void RenderFrameImpl::willSendRequest( DocumentState* top_document_state = DocumentState::FromDataSource(top_data_source); - // TODO(gavinp): separate out prefetching and prerender field trials - // if the rel=prerender rel type is sticking around. - if (top_document_state && - request.targetType() == WebURLRequest::TargetIsPrefetch) - top_document_state->set_was_prefetcher(true); + if (top_document_state) { + // TODO(gavinp): separate out prefetching and prerender field trials + // if the rel=prerender rel type is sticking around. + if (request.targetType() == WebURLRequest::TargetIsPrefetch) + top_document_state->set_was_prefetcher(true); + + if (was_after_preconnect_request) + top_document_state->set_was_after_preconnect_request(true); + } // This is an instance where we embed a copy of the routing id // into the data portion of the message. This can cause problems if we diff --git a/content/renderer/render_frame_impl.h b/content/renderer/render_frame_impl.h index a3daa03..3bed97d 100644 --- a/content/renderer/render_frame_impl.h +++ b/content/renderer/render_frame_impl.h @@ -112,6 +112,8 @@ class CONTENT_EXPORT RenderFrameImpl virtual void didNavigateWithinPage(WebKit::WebFrame* frame, bool is_new_navigation); virtual void didUpdateCurrentHistoryItem(WebKit::WebFrame* frame); + virtual void willRequestAfterPreconnect(WebKit::WebFrame* frame, + WebKit::WebURLRequest& request); virtual void willSendRequest( WebKit::WebFrame* frame, unsigned identifier, |