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

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

Issue 1376473003: Notify NQE of TCP RTT values (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed bengr comment Created 4 years, 10 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 "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 #include <utility> 8 #include <utility>
9 9
10 #include "base/compiler_specific.h" 10 #include "base/compiler_specific.h"
11 #include "base/lazy_instance.h" 11 #include "base/lazy_instance.h"
12 #include "base/logging.h" 12 #include "base/logging.h"
13 #include "base/message_loop/message_loop.h" 13 #include "base/message_loop/message_loop.h"
14 #include "base/metrics/histogram_macros.h" 14 #include "base/metrics/histogram_macros.h"
15 #include "base/profiler/scoped_tracker.h" 15 #include "base/profiler/scoped_tracker.h"
16 #include "base/strings/string_util.h" 16 #include "base/strings/string_util.h"
17 #include "base/synchronization/lock.h" 17 #include "base/synchronization/lock.h"
18 #include "base/time/time.h" 18 #include "base/time/time.h"
19 #include "base/values.h" 19 #include "base/values.h"
20 #include "net/base/ip_endpoint.h" 20 #include "net/base/ip_endpoint.h"
21 #include "net/base/net_errors.h" 21 #include "net/base/net_errors.h"
22 #include "net/base/socket_performance_watcher_factory.h"
22 #include "net/log/net_log.h" 23 #include "net/log/net_log.h"
23 #include "net/socket/client_socket_factory.h" 24 #include "net/socket/client_socket_factory.h"
24 #include "net/socket/client_socket_handle.h" 25 #include "net/socket/client_socket_handle.h"
25 #include "net/socket/client_socket_pool_base.h" 26 #include "net/socket/client_socket_pool_base.h"
26 #include "net/socket/socket_net_log_params.h" 27 #include "net/socket/socket_net_log_params.h"
27 #include "net/socket/tcp_client_socket.h" 28 #include "net/socket/tcp_client_socket.h"
28 29
29 using base::TimeDelta; 30 using base::TimeDelta;
30 31
31 namespace net { 32 namespace net {
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 return connect_duration; 192 return connect_duration;
192 } 193 }
193 194
194 TransportConnectJob::TransportConnectJob( 195 TransportConnectJob::TransportConnectJob(
195 const std::string& group_name, 196 const std::string& group_name,
196 RequestPriority priority, 197 RequestPriority priority,
197 ClientSocketPool::RespectLimits respect_limits, 198 ClientSocketPool::RespectLimits respect_limits,
198 const scoped_refptr<TransportSocketParams>& params, 199 const scoped_refptr<TransportSocketParams>& params,
199 base::TimeDelta timeout_duration, 200 base::TimeDelta timeout_duration,
200 ClientSocketFactory* client_socket_factory, 201 ClientSocketFactory* client_socket_factory,
202 SocketPerformanceWatcherFactory* socket_performance_watcher_factory,
201 HostResolver* host_resolver, 203 HostResolver* host_resolver,
202 Delegate* delegate, 204 Delegate* delegate,
203 NetLog* net_log) 205 NetLog* net_log)
204 : ConnectJob(group_name, 206 : ConnectJob(group_name,
205 timeout_duration, 207 timeout_duration,
206 priority, 208 priority,
207 respect_limits, 209 respect_limits,
208 delegate, 210 delegate,
209 BoundNetLog::Make(net_log, NetLog::SOURCE_CONNECT_JOB)), 211 BoundNetLog::Make(net_log, NetLog::SOURCE_CONNECT_JOB)),
210 helper_(params, client_socket_factory, host_resolver, &connect_timing_), 212 helper_(params, client_socket_factory, host_resolver, &connect_timing_),
213 socket_performance_watcher_factory_(socket_performance_watcher_factory),
211 interval_between_connects_(CONNECT_INTERVAL_GT_20MS), 214 interval_between_connects_(CONNECT_INTERVAL_GT_20MS),
212 resolve_result_(OK) { 215 resolve_result_(OK) {
213 helper_.SetOnIOComplete(this); 216 helper_.SetOnIOComplete(this);
214 } 217 }
215 218
216 TransportConnectJob::~TransportConnectJob() { 219 TransportConnectJob::~TransportConnectJob() {
217 // We don't worry about cancelling the host resolution and TCP connect, since 220 // We don't worry about cancelling the host resolution and TCP connect, since
218 // ~SingleRequestHostResolver and ~StreamSocket will take care of it. 221 // ~SingleRequestHostResolver and ~StreamSocket will take care of it.
219 } 222 }
220 223
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
289 else if (interval <= 20) 292 else if (interval <= 20)
290 interval_between_connects_ = CONNECT_INTERVAL_LE_20MS; 293 interval_between_connects_ = CONNECT_INTERVAL_LE_20MS;
291 else 294 else
292 interval_between_connects_ = CONNECT_INTERVAL_GT_20MS; 295 interval_between_connects_ = CONNECT_INTERVAL_GT_20MS;
293 } 296 }
294 297
295 helper_.set_next_state( 298 helper_.set_next_state(
296 TransportConnectJobHelper::STATE_TRANSPORT_CONNECT_COMPLETE); 299 TransportConnectJobHelper::STATE_TRANSPORT_CONNECT_COMPLETE);
297 transport_socket_ = 300 transport_socket_ =
298 helper_.client_socket_factory()->CreateTransportClientSocket( 301 helper_.client_socket_factory()->CreateTransportClientSocket(
299 helper_.addresses(), net_log().net_log(), net_log().source()); 302 helper_.addresses(), socket_performance_watcher_factory_,
303 net_log().net_log(), net_log().source());
300 304
301 // If the list contains IPv6 and IPv4 addresses, the first address will 305 // If the list contains IPv6 and IPv4 addresses, the first address will
302 // be IPv6, and the IPv4 addresses will be tried as fallback addresses, 306 // be IPv6, and the IPv4 addresses will be tried as fallback addresses,
303 // per "Happy Eyeballs" (RFC 6555). 307 // per "Happy Eyeballs" (RFC 6555).
304 bool try_ipv6_connect_with_ipv4_fallback = 308 bool try_ipv6_connect_with_ipv4_fallback =
305 helper_.addresses().front().GetFamily() == ADDRESS_FAMILY_IPV6 && 309 helper_.addresses().front().GetFamily() == ADDRESS_FAMILY_IPV6 &&
306 !AddressListOnlyContainsIPv6(helper_.addresses()); 310 !AddressListOnlyContainsIPv6(helper_.addresses());
307 311
308 // Enable TCP FastOpen if indicated by transport socket params. 312 // Enable TCP FastOpen if indicated by transport socket params.
309 // Note: We currently do not turn on TCP FastOpen for destinations where 313 // Note: We currently do not turn on TCP FastOpen for destinations where
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
408 return; 412 return;
409 } 413 }
410 414
411 DCHECK(!fallback_transport_socket_.get()); 415 DCHECK(!fallback_transport_socket_.get());
412 DCHECK(!fallback_addresses_.get()); 416 DCHECK(!fallback_addresses_.get());
413 417
414 fallback_addresses_.reset(new AddressList(helper_.addresses())); 418 fallback_addresses_.reset(new AddressList(helper_.addresses()));
415 MakeAddressListStartWithIPv4(fallback_addresses_.get()); 419 MakeAddressListStartWithIPv4(fallback_addresses_.get());
416 fallback_transport_socket_ = 420 fallback_transport_socket_ =
417 helper_.client_socket_factory()->CreateTransportClientSocket( 421 helper_.client_socket_factory()->CreateTransportClientSocket(
418 *fallback_addresses_, net_log().net_log(), net_log().source()); 422 *fallback_addresses_, socket_performance_watcher_factory_,
423 net_log().net_log(), net_log().source());
419 fallback_connect_start_time_ = base::TimeTicks::Now(); 424 fallback_connect_start_time_ = base::TimeTicks::Now();
420 int rv = fallback_transport_socket_->Connect( 425 int rv = fallback_transport_socket_->Connect(
421 base::Bind( 426 base::Bind(
422 &TransportConnectJob::DoIPv6FallbackTransportConnectComplete, 427 &TransportConnectJob::DoIPv6FallbackTransportConnectComplete,
423 base::Unretained(this))); 428 base::Unretained(this)));
424 if (rv != ERR_IO_PENDING) 429 if (rv != ERR_IO_PENDING)
425 DoIPv6FallbackTransportConnectComplete(rv); 430 DoIPv6FallbackTransportConnectComplete(rv);
426 } 431 }
427 432
428 void TransportConnectJob::DoIPv6FallbackTransportConnectComplete(int result) { 433 void TransportConnectJob::DoIPv6FallbackTransportConnectComplete(int result) {
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
483 } 488 }
484 489
485 scoped_ptr<ConnectJob> 490 scoped_ptr<ConnectJob>
486 TransportClientSocketPool::TransportConnectJobFactory::NewConnectJob( 491 TransportClientSocketPool::TransportConnectJobFactory::NewConnectJob(
487 const std::string& group_name, 492 const std::string& group_name,
488 const PoolBase::Request& request, 493 const PoolBase::Request& request,
489 ConnectJob::Delegate* delegate) const { 494 ConnectJob::Delegate* delegate) const {
490 return scoped_ptr<ConnectJob>(new TransportConnectJob( 495 return scoped_ptr<ConnectJob>(new TransportConnectJob(
491 group_name, request.priority(), request.respect_limits(), 496 group_name, request.priority(), request.respect_limits(),
492 request.params(), ConnectionTimeout(), client_socket_factory_, 497 request.params(), ConnectionTimeout(), client_socket_factory_,
493 host_resolver_, delegate, net_log_)); 498 socket_performance_watcher_factory_, host_resolver_, delegate, net_log_));
494 } 499 }
495 500
496 base::TimeDelta 501 base::TimeDelta
497 TransportClientSocketPool::TransportConnectJobFactory::ConnectionTimeout() 502 TransportClientSocketPool::TransportConnectJobFactory::ConnectionTimeout()
498 const { 503 const {
499 return base::TimeDelta::FromSeconds(kTransportConnectJobTimeoutInSeconds); 504 return base::TimeDelta::FromSeconds(kTransportConnectJobTimeoutInSeconds);
500 } 505 }
501 506
502 TransportClientSocketPool::TransportClientSocketPool( 507 TransportClientSocketPool::TransportClientSocketPool(
503 int max_sockets, 508 int max_sockets,
504 int max_sockets_per_group, 509 int max_sockets_per_group,
505 HostResolver* host_resolver, 510 HostResolver* host_resolver,
506 ClientSocketFactory* client_socket_factory, 511 ClientSocketFactory* client_socket_factory,
512 SocketPerformanceWatcherFactory* socket_performance_watcher_factory,
507 NetLog* net_log) 513 NetLog* net_log)
508 : base_(NULL, 514 : base_(NULL,
509 max_sockets, 515 max_sockets,
510 max_sockets_per_group, 516 max_sockets_per_group,
511 ClientSocketPool::unused_idle_socket_timeout(), 517 ClientSocketPool::unused_idle_socket_timeout(),
512 ClientSocketPool::used_idle_socket_timeout(), 518 ClientSocketPool::used_idle_socket_timeout(),
513 new TransportConnectJobFactory(client_socket_factory, 519 new TransportConnectJobFactory(client_socket_factory,
514 host_resolver, 520 host_resolver,
521 socket_performance_watcher_factory,
515 net_log)) { 522 net_log)) {
516 base_.EnableConnectBackupJobs(); 523 base_.EnableConnectBackupJobs();
517 } 524 }
518 525
519 TransportClientSocketPool::~TransportClientSocketPool() {} 526 TransportClientSocketPool::~TransportClientSocketPool() {}
520 527
521 int TransportClientSocketPool::RequestSocket(const std::string& group_name, 528 int TransportClientSocketPool::RequestSocket(const std::string& group_name,
522 const void* params, 529 const void* params,
523 RequestPriority priority, 530 RequestPriority priority,
524 RespectLimits respect_limits, 531 RespectLimits respect_limits,
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
619 HigherLayeredPool* higher_pool) { 626 HigherLayeredPool* higher_pool) {
620 base_.AddHigherLayeredPool(higher_pool); 627 base_.AddHigherLayeredPool(higher_pool);
621 } 628 }
622 629
623 void TransportClientSocketPool::RemoveHigherLayeredPool( 630 void TransportClientSocketPool::RemoveHigherLayeredPool(
624 HigherLayeredPool* higher_pool) { 631 HigherLayeredPool* higher_pool) {
625 base_.RemoveHigherLayeredPool(higher_pool); 632 base_.RemoveHigherLayeredPool(higher_pool);
626 } 633 }
627 634
628 } // namespace net 635 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698