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

Side by Side Diff: net/spdy/spdy_session_pool.cc

Issue 2756503002: Allow SpdySessionPool to find/create SpdySession with IP pooling disabled. (Closed)
Patch Set: Created 3 years, 9 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 | « net/spdy/spdy_session_pool.h ('k') | net/spdy/spdy_session_pool_unittest.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 #include "net/spdy/spdy_session_pool.h" 5 #include "net/spdy/spdy_session_pool.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/memory/ptr_util.h" 10 #include "base/memory/ptr_util.h"
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 if (available_session->GetPeerAddress(&address) == OK) 123 if (available_session->GetPeerAddress(&address) == OK)
124 aliases_[address] = key; 124 aliases_[address] = key;
125 } 125 }
126 126
127 return available_session; 127 return available_session;
128 } 128 }
129 129
130 base::WeakPtr<SpdySession> SpdySessionPool::FindAvailableSession( 130 base::WeakPtr<SpdySession> SpdySessionPool::FindAvailableSession(
131 const SpdySessionKey& key, 131 const SpdySessionKey& key,
132 const GURL& url, 132 const GURL& url,
133 bool enable_ip_based_pooling,
133 const NetLogWithSource& net_log) { 134 const NetLogWithSource& net_log) {
134 UnclaimedPushedStreamMap::iterator url_it = 135 UnclaimedPushedStreamMap::iterator url_it =
135 unclaimed_pushed_streams_.find(url); 136 unclaimed_pushed_streams_.find(url);
136 if (!url.is_empty() && url_it != unclaimed_pushed_streams_.end()) { 137 if (!url.is_empty() && url_it != unclaimed_pushed_streams_.end()) {
137 DCHECK(url.SchemeIsCryptographic()); 138 DCHECK(url.SchemeIsCryptographic());
138 for (WeakSessionList::iterator it = url_it->second.begin(); 139 for (WeakSessionList::iterator it = url_it->second.begin();
139 it != url_it->second.end();) { 140 it != url_it->second.end();) {
140 base::WeakPtr<SpdySession> spdy_session = *it; 141 base::WeakPtr<SpdySession> spdy_session = *it;
141 // Lazy deletion of destroyed SpdySessions. 142 // Lazy deletion of destroyed SpdySessions.
142 if (!spdy_session) { 143 if (!spdy_session) {
(...skipping 19 matching lines...) Expand all
162 163
163 AvailableSessionMap::iterator it = LookupAvailableSessionByKey(key); 164 AvailableSessionMap::iterator it = LookupAvailableSessionByKey(key);
164 if (it != available_sessions_.end()) { 165 if (it != available_sessions_.end()) {
165 if (key.Equals(it->second->spdy_session_key())) { 166 if (key.Equals(it->second->spdy_session_key())) {
166 UMA_HISTOGRAM_ENUMERATION("Net.SpdySessionGet", FOUND_EXISTING, 167 UMA_HISTOGRAM_ENUMERATION("Net.SpdySessionGet", FOUND_EXISTING,
167 SPDY_SESSION_GET_MAX); 168 SPDY_SESSION_GET_MAX);
168 net_log.AddEvent( 169 net_log.AddEvent(
169 NetLogEventType::HTTP2_SESSION_POOL_FOUND_EXISTING_SESSION, 170 NetLogEventType::HTTP2_SESSION_POOL_FOUND_EXISTING_SESSION,
170 it->second->net_log().source().ToEventParametersCallback()); 171 it->second->net_log().source().ToEventParametersCallback());
171 } else { 172 } else {
173 if (!enable_ip_based_pooling) {
174 // Remove session from available sessions and from aliases, and remove
175 // key from the session's pooled alias set, so that a new session can be
176 // created with this |key|.
177 it->second->RemovePooledAlias(key);
178 UnmapKey(key);
179 RemoveAliases(key);
180 return base::WeakPtr<SpdySession>();
181 }
182
172 UMA_HISTOGRAM_ENUMERATION("Net.SpdySessionGet", 183 UMA_HISTOGRAM_ENUMERATION("Net.SpdySessionGet",
173 FOUND_EXISTING_FROM_IP_POOL, 184 FOUND_EXISTING_FROM_IP_POOL,
174 SPDY_SESSION_GET_MAX); 185 SPDY_SESSION_GET_MAX);
175 net_log.AddEvent( 186 net_log.AddEvent(
176 NetLogEventType:: 187 NetLogEventType::
177 HTTP2_SESSION_POOL_FOUND_EXISTING_SESSION_FROM_IP_POOL, 188 HTTP2_SESSION_POOL_FOUND_EXISTING_SESSION_FROM_IP_POOL,
178 it->second->net_log().source().ToEventParametersCallback()); 189 it->second->net_log().source().ToEventParametersCallback());
179 } 190 }
180 return it->second; 191 return it->second;
181 } 192 }
182 193
194 if (!enable_ip_based_pooling)
195 return base::WeakPtr<SpdySession>();
196
183 // Look up IP addresses from resolver cache. 197 // Look up IP addresses from resolver cache.
184 HostResolver::RequestInfo resolve_info(key.host_port_pair()); 198 HostResolver::RequestInfo resolve_info(key.host_port_pair());
185 AddressList addresses; 199 AddressList addresses;
186 int rv = resolver_->ResolveFromCache(resolve_info, &addresses, net_log); 200 int rv = resolver_->ResolveFromCache(resolve_info, &addresses, net_log);
187 DCHECK_NE(rv, ERR_IO_PENDING); 201 DCHECK_NE(rv, ERR_IO_PENDING);
188 if (rv != OK) 202 if (rv != OK)
189 return base::WeakPtr<SpdySession>(); 203 return base::WeakPtr<SpdySession>();
190 204
191 // Check if we have a session through a domain alias. 205 // Check if we have a session through a domain alias.
192 for (AddressList::const_iterator address_it = addresses.begin(); 206 for (AddressList::const_iterator address_it = addresses.begin();
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
493 507
494 if (idle_only && (*it)->is_active()) 508 if (idle_only && (*it)->is_active())
495 continue; 509 continue;
496 510
497 (*it)->CloseSessionOnError(error, description); 511 (*it)->CloseSessionOnError(error, description);
498 DCHECK(!IsSessionAvailable(*it)); 512 DCHECK(!IsSessionAvailable(*it));
499 } 513 }
500 } 514 }
501 515
502 } // namespace net 516 } // namespace net
OLDNEW
« no previous file with comments | « net/spdy/spdy_session_pool.h ('k') | net/spdy/spdy_session_pool_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698