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

Side by Side Diff: net/socket/client_socket_pool_base.h

Issue 1982263003: Remove Windows XP specific socket cleanup timer from net/socket. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: re-add tests Created 4 years, 7 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
« no previous file with comments | « no previous file | net/socket/client_socket_pool_base.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 // A ClientSocketPoolBase is used to restrict the number of sockets open at 5 // A ClientSocketPoolBase is used to restrict the number of sockets open at
6 // a time. It also maintains a list of idle persistent sockets for reuse. 6 // a time. It also maintains a list of idle persistent sockets for reuse.
7 // Subclasses of ClientSocketPool should compose ClientSocketPoolBase to handle 7 // Subclasses of ClientSocketPool should compose ClientSocketPoolBase to handle
8 // the core logic of (1) restricting the number of active (connected or 8 // the core logic of (1) restricting the number of active (connected or
9 // connecting) sockets per "group" (generally speaking, the hostname), (2) 9 // connecting) sockets per "group" (generally speaking, the hostname), (2)
10 // maintaining a per-group list of idle, persistent sockets for reuse, and (3) 10 // maintaining a per-group list of idle, persistent sockets for reuse, and (3)
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after
307 int NumConnectJobsInGroup(const std::string& group_name) const { 307 int NumConnectJobsInGroup(const std::string& group_name) const {
308 return group_map_.find(group_name)->second->jobs().size(); 308 return group_map_.find(group_name)->second->jobs().size();
309 } 309 }
310 310
311 int NumActiveSocketsInGroup(const std::string& group_name) const { 311 int NumActiveSocketsInGroup(const std::string& group_name) const {
312 return group_map_.find(group_name)->second->active_socket_count(); 312 return group_map_.find(group_name)->second->active_socket_count();
313 } 313 }
314 314
315 bool HasGroup(const std::string& group_name) const; 315 bool HasGroup(const std::string& group_name) const;
316 316
317 // Called to enable/disable cleaning up idle sockets. When enabled,
318 // idle sockets that have been around for longer than a period defined
319 // by kCleanupInterval are cleaned up using a timer. Otherwise they are
320 // closed next time client makes a request. This may reduce network
321 // activity and power consumption.
322 static bool cleanup_timer_enabled();
323 static bool set_cleanup_timer_enabled(bool enabled);
324
325 // Closes all idle sockets if |force| is true. Else, only closes idle 317 // Closes all idle sockets if |force| is true. Else, only closes idle
326 // sockets that timed out or can't be reused. Made public for testing. 318 // sockets that timed out or can't be reused. Made public for testing.
327 void CleanupIdleSockets(bool force); 319 void CleanupIdleSockets(bool force);
328 320
329 // Closes one idle socket. Picks the first one encountered. 321 // Closes one idle socket. Picks the first one encountered.
330 // TODO(willchan): Consider a better algorithm for doing this. Perhaps we 322 // TODO(willchan): Consider a better algorithm for doing this. Perhaps we
331 // should keep an ordered list of idle sockets, and close them in order. 323 // should keep an ordered list of idle sockets, and close them in order.
332 // Requires maintaining more state. It's not clear if it's worth it since 324 // Requires maintaining more state. It's not clear if it's worth it since
333 // I'm not sure if we hit this situation often. 325 // I'm not sure if we hit this situation often.
334 bool CloseOneIdleSocket(); 326 bool CloseOneIdleSocket();
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
526 PendingCallbackMap; 518 PendingCallbackMap;
527 519
528 Group* GetOrCreateGroup(const std::string& group_name); 520 Group* GetOrCreateGroup(const std::string& group_name);
529 void RemoveGroup(const std::string& group_name); 521 void RemoveGroup(const std::string& group_name);
530 void RemoveGroup(GroupMap::iterator it); 522 void RemoveGroup(GroupMap::iterator it);
531 523
532 // Called when the number of idle sockets changes. 524 // Called when the number of idle sockets changes.
533 void IncrementIdleCount(); 525 void IncrementIdleCount();
534 void DecrementIdleCount(); 526 void DecrementIdleCount();
535 527
536 // Start cleanup timer for idle sockets.
537 void StartIdleSocketTimer();
538
539 // Scans the group map for groups which have an available socket slot and 528 // Scans the group map for groups which have an available socket slot and
540 // at least one pending request. Returns true if any groups are stalled, and 529 // at least one pending request. Returns true if any groups are stalled, and
541 // if so (and if both |group| and |group_name| are not NULL), fills |group| 530 // if so (and if both |group| and |group_name| are not NULL), fills |group|
542 // and |group_name| with data of the stalled group having highest priority. 531 // and |group_name| with data of the stalled group having highest priority.
543 bool FindTopStalledGroup(Group** group, std::string* group_name) const; 532 bool FindTopStalledGroup(Group** group, std::string* group_name) const;
544 533
545 // Called when timer_ fires. This method scans the idle sockets removing
546 // sockets that timed out or can't be reused.
547 void OnCleanupTimerFired() {
548 CleanupIdleSockets(false);
549 }
550
551 // Removes |job| from |group|, which must already own |job|. 534 // Removes |job| from |group|, which must already own |job|.
552 void RemoveConnectJob(ConnectJob* job, Group* group); 535 void RemoveConnectJob(ConnectJob* job, Group* group);
553 536
554 // Tries to see if we can handle any more requests for |group|. 537 // Tries to see if we can handle any more requests for |group|.
555 void OnAvailableSocketSlot(const std::string& group_name, Group* group); 538 void OnAvailableSocketSlot(const std::string& group_name, Group* group);
556 539
557 // Process a pending socket request for a group. 540 // Process a pending socket request for a group.
558 void ProcessPendingRequest(const std::string& group_name, Group* group); 541 void ProcessPendingRequest(const std::string& group_name, Group* group);
559 542
560 // Assigns |socket| to |handle| and updates |group|'s counters appropriately. 543 // Assigns |socket| to |handle| and updates |group|'s counters appropriately.
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
618 // this pool is stalled. 601 // this pool is stalled.
619 void TryToCloseSocketsInLayeredPools(); 602 void TryToCloseSocketsInLayeredPools();
620 603
621 GroupMap group_map_; 604 GroupMap group_map_;
622 605
623 // Map of the ClientSocketHandles for which we have a pending Task to invoke a 606 // Map of the ClientSocketHandles for which we have a pending Task to invoke a
624 // callback. This is necessary since, before we invoke said callback, it's 607 // callback. This is necessary since, before we invoke said callback, it's
625 // possible that the request is cancelled. 608 // possible that the request is cancelled.
626 PendingCallbackMap pending_callback_map_; 609 PendingCallbackMap pending_callback_map_;
627 610
628 // Timer used to periodically prune idle sockets that timed out or can't be
629 // reused.
630 base::RepeatingTimer timer_;
631
632 // The total number of idle sockets in the system. 611 // The total number of idle sockets in the system.
633 int idle_socket_count_; 612 int idle_socket_count_;
634 613
635 // Number of connecting sockets across all groups. 614 // Number of connecting sockets across all groups.
636 int connecting_socket_count_; 615 int connecting_socket_count_;
637 616
638 // Number of connected sockets we handed out across all groups. 617 // Number of connected sockets we handed out across all groups.
639 int handed_out_socket_count_; 618 int handed_out_socket_count_;
640 619
641 // The maximum total number of sockets. See ReachedMaxSocketsLimit. 620 // The maximum total number of sockets. See ReachedMaxSocketsLimit.
642 const int max_sockets_; 621 const int max_sockets_;
643 622
644 // The maximum number of sockets kept per group. 623 // The maximum number of sockets kept per group.
645 const int max_sockets_per_group_; 624 const int max_sockets_per_group_;
646 625
647 // Whether to use timer to cleanup idle sockets.
648 bool use_cleanup_timer_;
649
650 // The time to wait until closing idle sockets. 626 // The time to wait until closing idle sockets.
651 const base::TimeDelta unused_idle_socket_timeout_; 627 const base::TimeDelta unused_idle_socket_timeout_;
652 const base::TimeDelta used_idle_socket_timeout_; 628 const base::TimeDelta used_idle_socket_timeout_;
653 629
654 const std::unique_ptr<ConnectJobFactory> connect_job_factory_; 630 const std::unique_ptr<ConnectJobFactory> connect_job_factory_;
655 631
656 // TODO(vandebo) Remove when backup jobs move to TransportClientSocketPool 632 // TODO(vandebo) Remove when backup jobs move to TransportClientSocketPool
657 bool connect_backup_jobs_enabled_; 633 bool connect_backup_jobs_enabled_;
658 634
659 // A unique id for the pool. It gets incremented every time we 635 // A unique id for the pool. It gets incremented every time we
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
889 }; 865 };
890 866
891 internal::ClientSocketPoolBaseHelper helper_; 867 internal::ClientSocketPoolBaseHelper helper_;
892 868
893 DISALLOW_COPY_AND_ASSIGN(ClientSocketPoolBase); 869 DISALLOW_COPY_AND_ASSIGN(ClientSocketPoolBase);
894 }; 870 };
895 871
896 } // namespace net 872 } // namespace net
897 873
898 #endif // NET_SOCKET_CLIENT_SOCKET_POOL_BASE_H_ 874 #endif // NET_SOCKET_CLIENT_SOCKET_POOL_BASE_H_
OLDNEW
« no previous file with comments | « no previous file | net/socket/client_socket_pool_base.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698