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

Unified Diff: net/spdy/chromium/spdy_session_pool.cc

Issue 2928763002: Move SpdySessionRequestMap to SpdySessionPool (Closed)
Patch Set: self Created 3 years, 6 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 side-by-side diff with in-line comments
Download patch
Index: net/spdy/chromium/spdy_session_pool.cc
diff --git a/net/spdy/chromium/spdy_session_pool.cc b/net/spdy/chromium/spdy_session_pool.cc
index 135138f4c269bf915c1ca615777dddb678985229..7266e20e04f54ebcdf57ca9bc474f34b2172a117 100644
--- a/net/spdy/chromium/spdy_session_pool.cc
+++ b/net/spdy/chromium/spdy_session_pool.cc
@@ -22,6 +22,8 @@
#include "net/log/net_log_event_type.h"
#include "net/log/net_log_source.h"
#include "net/log/net_log_with_source.h"
+#include "net/spdy/chromium/bidirectional_stream_spdy_impl.h"
+#include "net/spdy/chromium/spdy_http_stream.h"
#include "net/spdy/chromium/spdy_session.h"
#include "net/spdy/core/hpack/hpack_constants.h"
#include "net/spdy/core/hpack/hpack_huffman_table.h"
@@ -72,6 +74,7 @@ SpdySessionPool::SpdySessionPool(
}
SpdySessionPool::~SpdySessionPool() {
+ DCHECK(spdy_session_request_map_.empty());
CloseAllSessions();
while (!sessions_.empty()) {
@@ -395,6 +398,71 @@ void SpdySessionPool::OnCertDBChanged() {
CloseCurrentSessions(ERR_CERT_DATABASE_CHANGED);
}
+void SpdySessionPool::OnNewSpdySessionReady(
+ const base::WeakPtr<SpdySession>& spdy_session,
+ bool direct,
+ const SSLConfig& used_ssl_config,
+ const ProxyInfo& used_proxy_info,
+ bool was_alpn_negotiated,
+ NextProto negotiated_protocol,
+ bool using_spdy,
+ NetLogSource source_dependency) {
+ while (true) {
Bence 2017/06/07 17:41:43 Optional: while(spdy_session) {
xunjieli 2017/06/07 21:55:56 Done.
+ if (!spdy_session)
+ break;
+ const SpdySessionKey& spdy_session_key = spdy_session->spdy_session_key();
+ // Each iteration may empty out the RequestSet for |spdy_session_key| in
+ // |spdy_session_request_map_|. So each time, check for RequestSet and use
+ // the first one.
+ //
+ // TODO(willchan): If it's important, switch RequestSet out for a FIFO
+ // queue (Order by priority first, then FIFO within same priority). Unclear
+ // that it matters here.
+ if (!base::ContainsKey(spdy_session_request_map_, spdy_session_key))
Bence 2017/06/07 17:41:43 ContainsKey and operator[] below are two lookups,
xunjieli 2017/06/07 21:55:56 Done.
+ break;
Bence 2017/06/07 17:41:43 Optional: return instead of break might reflect ou
xunjieli 2017/06/07 21:55:56 Done.
+ HttpStreamFactoryImpl::Request* request =
+ *spdy_session_request_map_[spdy_session_key].begin();
+ request->Complete(was_alpn_negotiated, negotiated_protocol, using_spdy);
+ if (request->stream_type() == HttpStreamRequest::BIDIRECTIONAL_STREAM) {
+ request->OnBidirectionalStreamImplReady(
+ used_ssl_config, used_proxy_info,
+ new BidirectionalStreamSpdyImpl(spdy_session, source_dependency));
+ } else {
+ bool use_relative_url =
+ direct || request->url().SchemeIs(url::kHttpsScheme);
+ request->OnStreamReady(used_ssl_config, used_proxy_info,
+ new SpdyHttpStream(spdy_session, use_relative_url,
+ source_dependency));
+ }
+ }
+ // TODO(mbelshe): Alert other valid requests.
+}
+
+void SpdySessionPool::RemoveRequestFromSpdySessionRequestMap(
+ HttpStreamFactoryImpl::Request* request) {
+ if (request->HasSpdySessionKey()) {
Bence 2017/06/07 17:41:43 Optional: early return instead of wrapping entire
xunjieli 2017/06/07 21:55:56 Done.
+ const SpdySessionKey& spdy_session_key = request->GetSpdySessionKey();
+ DCHECK(base::ContainsKey(spdy_session_request_map_, spdy_session_key));
Bence 2017/06/07 17:41:43 Optional: do only one lookup instead of two in deb
xunjieli 2017/06/07 21:55:56 Done.
+ RequestSet& request_set = spdy_session_request_map_[spdy_session_key];
+ DCHECK(base::ContainsKey(request_set, request));
Bence 2017/06/07 17:41:43 Optional: do only one lookup instead of two in deb
xunjieli 2017/06/07 21:55:56 Acknowledged. One lookup is in |request_set| and t
+ request_set.erase(request);
+ if (request_set.empty())
+ spdy_session_request_map_.erase(spdy_session_key);
+ request->ResetSpdySessionKey();
+ }
+}
+
+void SpdySessionPool::AddRequestToSpdySessionRequestMap(
+ const SpdySessionKey& spdy_session_key,
+ HttpStreamFactoryImpl::Request* request) {
+ if (!request->HasSpdySessionKey()) {
Bence 2017/06/07 17:41:43 Optional: early return instead of wrapping entire
xunjieli 2017/06/07 21:55:56 Done.
+ RequestSet& request_set = spdy_session_request_map_[spdy_session_key];
+ DCHECK(!base::ContainsKey(request_set, request));
Bence 2017/06/07 17:41:42 Optional: cut down on lookups by auto result = ins
xunjieli 2017/06/07 21:55:56 Acknowledged. One lookup is in |request_set| and t
+ request_set.insert(request);
+ request->SetSpdySessionKey(spdy_session_key);
+ }
+}
+
void SpdySessionPool::DumpMemoryStats(
base::trace_event::ProcessMemoryDump* pmd,
const SpdyString& parent_dump_absolute_name) const {
« net/spdy/chromium/spdy_session_pool.h ('K') | « net/spdy/chromium/spdy_session_pool.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698