| 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()); |
| 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 |