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

Side by Side Diff: net/socket/transport_client_socket_pool.cc

Issue 11428150: LoadTiming implementation in net, part 1. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Try upload again Created 8 years 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 | Annotate | Revision Log
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 "net/socket/transport_client_socket_pool.h" 5 #include "net/socket/transport_client_socket_pool.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/compiler_specific.h" 9 #include "base/compiler_specific.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 rv = ERR_FAILED; 156 rv = ERR_FAILED;
157 break; 157 break;
158 } 158 }
159 } while (rv != ERR_IO_PENDING && next_state_ != STATE_NONE); 159 } while (rv != ERR_IO_PENDING && next_state_ != STATE_NONE);
160 160
161 return rv; 161 return rv;
162 } 162 }
163 163
164 int TransportConnectJob::DoResolveHost() { 164 int TransportConnectJob::DoResolveHost() {
165 next_state_ = STATE_RESOLVE_HOST_COMPLETE; 165 next_state_ = STATE_RESOLVE_HOST_COMPLETE;
166 connect_timing().dns_start = base::TimeTicks::Now();
167
166 return resolver_.Resolve( 168 return resolver_.Resolve(
167 params_->destination(), &addresses_, 169 params_->destination(), &addresses_,
168 base::Bind(&TransportConnectJob::OnIOComplete, base::Unretained(this)), 170 base::Bind(&TransportConnectJob::OnIOComplete, base::Unretained(this)),
169 net_log()); 171 net_log());
170 } 172 }
171 173
172 int TransportConnectJob::DoResolveHostComplete(int result) { 174 int TransportConnectJob::DoResolveHostComplete(int result) {
173 if (result == OK) { 175 connect_timing().dns_end = base::TimeTicks::Now();
176 // Overwrite connection start time, since for connections that do not go
177 // through proxies, |connect_start| should not include dns lookup time.
178 connect_timing().connect_start = connect_timing().dns_end;
179
180 if (result == OK) {
174 // Invoke callback, and abort if it fails. 181 // Invoke callback, and abort if it fails.
175 if (!params_->host_resolution_callback().is_null()) 182 if (!params_->host_resolution_callback().is_null())
176 result = params_->host_resolution_callback().Run(addresses_, net_log()); 183 result = params_->host_resolution_callback().Run(addresses_, net_log());
177 184
178 if (result == OK) 185 if (result == OK)
179 next_state_ = STATE_TRANSPORT_CONNECT; 186 next_state_ = STATE_TRANSPORT_CONNECT;
180 } 187 }
181 return result; 188 return result;
182 } 189 }
183 190
184 int TransportConnectJob::DoTransportConnect() { 191 int TransportConnectJob::DoTransportConnect() {
185 next_state_ = STATE_TRANSPORT_CONNECT_COMPLETE; 192 next_state_ = STATE_TRANSPORT_CONNECT_COMPLETE;
186 transport_socket_.reset(client_socket_factory_->CreateTransportClientSocket( 193 transport_socket_.reset(client_socket_factory_->CreateTransportClientSocket(
187 addresses_, net_log().net_log(), net_log().source())); 194 addresses_, net_log().net_log(), net_log().source()));
188 connect_start_time_ = base::TimeTicks::Now();
189 int rv = transport_socket_->Connect( 195 int rv = transport_socket_->Connect(
190 base::Bind(&TransportConnectJob::OnIOComplete, base::Unretained(this))); 196 base::Bind(&TransportConnectJob::OnIOComplete, base::Unretained(this)));
191 if (rv == ERR_IO_PENDING && 197 if (rv == ERR_IO_PENDING &&
192 addresses_.front().GetFamily() == ADDRESS_FAMILY_IPV6 && 198 addresses_.front().GetFamily() == ADDRESS_FAMILY_IPV6 &&
193 !AddressListOnlyContainsIPv6(addresses_)) { 199 !AddressListOnlyContainsIPv6(addresses_)) {
194 fallback_timer_.Start(FROM_HERE, 200 fallback_timer_.Start(FROM_HERE,
195 base::TimeDelta::FromMilliseconds(kIPv6FallbackTimerInMs), 201 base::TimeDelta::FromMilliseconds(kIPv6FallbackTimerInMs),
196 this, &TransportConnectJob::DoIPv6FallbackTransportConnect); 202 this, &TransportConnectJob::DoIPv6FallbackTransportConnect);
197 } 203 }
198 return rv; 204 return rv;
199 } 205 }
200 206
201 int TransportConnectJob::DoTransportConnectComplete(int result) { 207 int TransportConnectJob::DoTransportConnectComplete(int result) {
202 if (result == OK) { 208 if (result == OK) {
203 bool is_ipv4 = addresses_.front().GetFamily() == ADDRESS_FAMILY_IPV4; 209 bool is_ipv4 = addresses_.front().GetFamily() == ADDRESS_FAMILY_IPV4;
204 DCHECK(connect_start_time_ != base::TimeTicks()); 210 DCHECK(connect_timing().connect_start != base::TimeTicks());
eroman 2012/12/14 04:08:35 might want to test is_null() throughout for consis
mmenke 2012/12/14 13:36:12 Done.
205 DCHECK(start_time_ != base::TimeTicks()); 211 DCHECK(start_time_ != base::TimeTicks());
206 base::TimeTicks now = base::TimeTicks::Now(); 212 base::TimeTicks now = base::TimeTicks::Now();
207 base::TimeDelta total_duration = now - start_time_; 213 base::TimeDelta total_duration = now - start_time_;
208 UMA_HISTOGRAM_CUSTOM_TIMES( 214 UMA_HISTOGRAM_CUSTOM_TIMES(
209 "Net.DNS_Resolution_And_TCP_Connection_Latency2", 215 "Net.DNS_Resolution_And_TCP_Connection_Latency2",
210 total_duration, 216 total_duration,
211 base::TimeDelta::FromMilliseconds(1), 217 base::TimeDelta::FromMilliseconds(1),
212 base::TimeDelta::FromMinutes(10), 218 base::TimeDelta::FromMinutes(10),
213 100); 219 100);
214 220
215 base::TimeDelta connect_duration = now - connect_start_time_; 221 base::TimeDelta connect_duration = now - connect_timing().connect_start;
216 UMA_HISTOGRAM_CUSTOM_TIMES("Net.TCP_Connection_Latency", 222 UMA_HISTOGRAM_CUSTOM_TIMES("Net.TCP_Connection_Latency",
217 connect_duration, 223 connect_duration,
218 base::TimeDelta::FromMilliseconds(1), 224 base::TimeDelta::FromMilliseconds(1),
219 base::TimeDelta::FromMinutes(10), 225 base::TimeDelta::FromMinutes(10),
220 100); 226 100);
221 227
222 if (is_ipv4) { 228 if (is_ipv4) {
223 UMA_HISTOGRAM_CUSTOM_TIMES("Net.TCP_Connection_Latency_IPv4_No_Race", 229 UMA_HISTOGRAM_CUSTOM_TIMES("Net.TCP_Connection_Latency_IPv4_No_Race",
224 connect_duration, 230 connect_duration,
225 base::TimeDelta::FromMilliseconds(1), 231 base::TimeDelta::FromMilliseconds(1),
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
462 468
463 base::TimeDelta TransportClientSocketPool::ConnectionTimeout() const { 469 base::TimeDelta TransportClientSocketPool::ConnectionTimeout() const {
464 return base_.ConnectionTimeout(); 470 return base_.ConnectionTimeout();
465 } 471 }
466 472
467 ClientSocketPoolHistograms* TransportClientSocketPool::histograms() const { 473 ClientSocketPoolHistograms* TransportClientSocketPool::histograms() const {
468 return base_.histograms(); 474 return base_.histograms();
469 } 475 }
470 476
471 } // namespace net 477 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698