OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |