Index: net/socket/ssl_client_socket_impl.cc |
diff --git a/net/socket/ssl_client_socket_impl.cc b/net/socket/ssl_client_socket_impl.cc |
index d042912d83bcff11d9492e2f07207d35419450c0..4fb0f3b68f6dff051cd6959ab9264ec6bf135a81 100644 |
--- a/net/socket/ssl_client_socket_impl.cc |
+++ b/net/socket/ssl_client_socket_impl.cc |
@@ -21,6 +21,7 @@ |
#include "base/lazy_instance.h" |
#include "base/macros.h" |
#include "base/memory/singleton.h" |
+#include "base/metrics/field_trial.h" |
#include "base/metrics/histogram_macros.h" |
#include "base/metrics/sparse_histogram.h" |
#include "base/profiler/scoped_tracker.h" |
@@ -74,7 +75,7 @@ const int kNoPendingResult = 1; |
const char kDefaultSupportedNPNProtocol[] = "http/1.1"; |
// Default size of the internal BoringSSL buffers. |
-const int KDefaultOpenSSLBufferSize = 17 * 1024; |
+const int kDefaultOpenSSLBufferSize = 17 * 1024; |
// TLS extension number use for Token Binding. |
const unsigned int kTbExtNum = 24; |
@@ -917,10 +918,35 @@ int SSLClientSocketImpl::Init() { |
if (session) |
SSL_set_session(ssl_, session.get()); |
+ // Get read and write buffer sizes from field trials, if possible. If values |
+ // not present, use default. Also make sure values are in reasonable range. |
+ int send_buffer_size = kDefaultOpenSSLBufferSize; |
+#if !defined(OS_NACL) |
+ int override_send_buffer_size; |
+ if (base::StringToInt(base::FieldTrialList::FindFullName("SSLBufferSizeSend"), |
+ &override_send_buffer_size)) { |
+ send_buffer_size = override_send_buffer_size; |
+ send_buffer_size = std::max(send_buffer_size, 1000); |
+ send_buffer_size = |
+ std::min(send_buffer_size, 2 * kDefaultOpenSSLBufferSize); |
+ } |
+#endif // !defined(OS_NACL) |
send_buffer_ = new GrowableIOBuffer(); |
- send_buffer_->SetCapacity(KDefaultOpenSSLBufferSize); |
+ send_buffer_->SetCapacity(send_buffer_size); |
+ |
+ int recv_buffer_size = kDefaultOpenSSLBufferSize; |
+#if !defined(OS_NACL) |
+ int override_recv_buffer_size; |
+ if (base::StringToInt(base::FieldTrialList::FindFullName("SSLBufferSizeRecv"), |
+ &override_recv_buffer_size)) { |
+ recv_buffer_size = override_recv_buffer_size; |
+ recv_buffer_size = std::max(recv_buffer_size, 1000); |
+ recv_buffer_size = |
+ std::min(recv_buffer_size, 2 * kDefaultOpenSSLBufferSize); |
+ } |
+#endif // !defined(OS_NACL) |
recv_buffer_ = new GrowableIOBuffer(); |
- recv_buffer_->SetCapacity(KDefaultOpenSSLBufferSize); |
+ recv_buffer_->SetCapacity(recv_buffer_size); |
BIO* ssl_bio = NULL; |