Index: net/spdy/spdy_session.cc |
diff --git a/net/spdy/spdy_session.cc b/net/spdy/spdy_session.cc |
index 2e3a31a457d7007b28022827c9cf73296ca9202e..8f6d1b8e82ff11a1d8f8b738a22ce1fc00af57f1 100644 |
--- a/net/spdy/spdy_session.cc |
+++ b/net/spdy/spdy_session.cc |
@@ -11,6 +11,7 @@ |
#include "base/bind.h" |
#include "base/compiler_specific.h" |
+#include "base/feature_list.h" |
#include "base/location.h" |
#include "base/logging.h" |
#include "base/memory/ptr_util.h" |
@@ -73,6 +74,10 @@ const uint32_t kDefaultInitialEnablePush = 1; |
const uint32_t kDefaultInitialInitialWindowSize = 65535; |
const uint32_t kDefaultInitialMaxFrameSize = 16384; |
+// Experiment to close idle H2 sockets when SpdySession is initialized. |
+const base::Feature kCloseIdleH2SocketsEarlyExperiment{ |
+ "CloseIdleH2SocketsEarly", base::FEATURE_DISABLED_BY_DEFAULT}; |
+ |
bool IsSpdySettingAtDefaultInitialValue(SpdySettingsIds setting_id, |
uint32_t value) { |
switch (setting_id) { |
@@ -712,6 +717,7 @@ bool SpdySession::CanPool(TransportSecurityState* transport_security_state, |
SpdySession::SpdySession(const SpdySessionKey& spdy_session_key, |
HttpServerProperties* http_server_properties, |
TransportSecurityState* transport_security_state, |
+ HttpNetworkSession* http_network_session, |
bool enable_sending_initial_data, |
bool enable_ping_based_connection_checking, |
size_t session_max_recv_window_size, |
@@ -725,6 +731,7 @@ SpdySession::SpdySession(const SpdySessionKey& spdy_session_key, |
pool_(NULL), |
http_server_properties_(http_server_properties), |
transport_security_state_(transport_security_state), |
+ http_network_session_(http_network_session), |
read_buffer_(new IOBuffer(kReadBufferSize)), |
stream_hi_water_mark_(kFirstStreamId), |
last_accepted_push_stream_id_(0), |
@@ -890,6 +897,13 @@ void SpdySession::InitializeWithSocket( |
SendInitialData(); |
pool_ = pool; |
+ if (base::FeatureList::IsEnabled(kCloseIdleH2SocketsEarlyExperiment)) { |
+ // Close idle sockets in this group, since subsequent requests will go over |
+ // this HTTP/2 connection. |
+ http_network_session_->CloseIdleConnectionsInGroup( |
+ connection_->group_name()); |
+ } |
+ |
// Bootstrap the read loop. |
base::ThreadTaskRunnerHandle::Get()->PostTask( |
FROM_HERE, |