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

Side by Side Diff: content/browser/loader/async_resource_handler.cc

Issue 555913002: Measure browser->render->browser hop time in UMA. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 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
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 "content/browser/loader/async_resource_handler.h" 5 #include "content/browser/loader/async_resource_handler.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/command_line.h" 10 #include "base/command_line.h"
11 #include "base/containers/hash_tables.h" 11 #include "base/containers/hash_tables.h"
12 #include "base/debug/alias.h" 12 #include "base/debug/alias.h"
13 #include "base/logging.h" 13 #include "base/logging.h"
14 #include "base/memory/shared_memory.h" 14 #include "base/memory/shared_memory.h"
15 #include "base/metrics/histogram.h" 15 #include "base/metrics/histogram.h"
16 #include "base/strings/string_number_conversions.h" 16 #include "base/strings/string_number_conversions.h"
17 #include "base/time/time.h"
17 #include "content/browser/devtools/devtools_netlog_observer.h" 18 #include "content/browser/devtools/devtools_netlog_observer.h"
18 #include "content/browser/host_zoom_map_impl.h" 19 #include "content/browser/host_zoom_map_impl.h"
19 #include "content/browser/loader/resource_buffer.h" 20 #include "content/browser/loader/resource_buffer.h"
20 #include "content/browser/loader/resource_dispatcher_host_impl.h" 21 #include "content/browser/loader/resource_dispatcher_host_impl.h"
21 #include "content/browser/loader/resource_message_filter.h" 22 #include "content/browser/loader/resource_message_filter.h"
22 #include "content/browser/loader/resource_request_info_impl.h" 23 #include "content/browser/loader/resource_request_info_impl.h"
23 #include "content/browser/resource_context_impl.h" 24 #include "content/browser/resource_context_impl.h"
24 #include "content/common/resource_messages.h" 25 #include "content/common/resource_messages.h"
25 #include "content/common/view_messages.h" 26 #include "content/common/view_messages.h"
26 #include "content/public/browser/resource_dispatcher_host_delegate.h" 27 #include "content/public/browser/resource_dispatcher_host_delegate.h"
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 IPC_END_MESSAGE_MAP() 107 IPC_END_MESSAGE_MAP()
107 return handled; 108 return handled;
108 } 109 }
109 110
110 void AsyncResourceHandler::OnFollowRedirect(int request_id) { 111 void AsyncResourceHandler::OnFollowRedirect(int request_id) {
111 if (!request()->status().is_success()) { 112 if (!request()->status().is_success()) {
112 DVLOG(1) << "OnFollowRedirect for invalid request"; 113 DVLOG(1) << "OnFollowRedirect for invalid request";
113 return; 114 return;
114 } 115 }
115 116
117 if (!redirect_start_time_.is_null()) {
118 UMA_HISTOGRAM_TIMES("Net.AsyncResourceHandler_RedirectHopTime",
119 TimeTicks::Now() - redirect_start_time_);
120 // Reset start time.
121 redirect_start_time_ = TimeTicks();
122 }
123
116 ResumeIfDeferred(); 124 ResumeIfDeferred();
117 } 125 }
118 126
119 void AsyncResourceHandler::OnDataReceivedACK(int request_id) { 127 void AsyncResourceHandler::OnDataReceivedACK(int request_id) {
120 if (pending_data_count_) { 128 if (pending_data_count_) {
121 --pending_data_count_; 129 --pending_data_count_;
122 130
123 buffer_->RecycleLeastRecentlyAllocated(); 131 buffer_->RecycleLeastRecentlyAllocated();
124 if (buffer_->CanAllocate()) 132 if (buffer_->CanAllocate())
125 ResumeIfDeferred(); 133 ResumeIfDeferred();
(...skipping 10 matching lines...) Expand all
136 } 144 }
137 145
138 bool AsyncResourceHandler::OnRequestRedirected( 146 bool AsyncResourceHandler::OnRequestRedirected(
139 const net::RedirectInfo& redirect_info, 147 const net::RedirectInfo& redirect_info,
140 ResourceResponse* response, 148 ResourceResponse* response,
141 bool* defer) { 149 bool* defer) {
142 const ResourceRequestInfoImpl* info = GetRequestInfo(); 150 const ResourceRequestInfoImpl* info = GetRequestInfo();
143 if (!info->filter()) 151 if (!info->filter())
144 return false; 152 return false;
145 153
154 redirect_start_time_ = TimeTicks::Now();
155
146 *defer = did_defer_ = true; 156 *defer = did_defer_ = true;
147 OnDefer(); 157 OnDefer();
148 158
149 if (rdh_->delegate()) { 159 if (rdh_->delegate()) {
150 rdh_->delegate()->OnRequestRedirected( 160 rdh_->delegate()->OnRequestRedirected(
151 redirect_info.new_url, request(), info->GetContext(), response); 161 redirect_info.new_url, request(), info->GetContext(), response);
152 } 162 }
153 163
154 DevToolsNetLogObserver::PopulateResponseInfo(request(), response); 164 DevToolsNetLogObserver::PopulateResponseInfo(request(), response);
155 response->head.encoded_data_length = request()->GetTotalReceivedBytes(); 165 response->head.encoded_data_length = request()->GetTotalReceivedBytes();
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after
391 request()->LogUnblocked(); 401 request()->LogUnblocked();
392 controller()->Resume(); 402 controller()->Resume();
393 } 403 }
394 } 404 }
395 405
396 void AsyncResourceHandler::OnDefer() { 406 void AsyncResourceHandler::OnDefer() {
397 request()->LogBlockedBy("AsyncResourceHandler"); 407 request()->LogBlockedBy("AsyncResourceHandler");
398 } 408 }
399 409
400 } // namespace content 410 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/loader/async_resource_handler.h ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698