Commit 9976b0c7 authored by rch's avatar rch Committed by Commit bot

Add a new prefer_aes finch options for QUIC.

Review URL: https://codereview.chromium.org/1165283004

Cr-Commit-Position: refs/heads/master@{#333805}
parent 4f1226d3
...@@ -1174,6 +1174,7 @@ void IOThread::InitializeNetworkSessionParamsFromGlobals( ...@@ -1174,6 +1174,7 @@ void IOThread::InitializeNetworkSessionParamsFromGlobals(
&params->quic_enable_connection_racing); &params->quic_enable_connection_racing);
globals.quic_enable_non_blocking_io.CopyToIfSet( globals.quic_enable_non_blocking_io.CopyToIfSet(
&params->quic_enable_non_blocking_io); &params->quic_enable_non_blocking_io);
globals.quic_prefer_aes.CopyToIfSet(&params->quic_prefer_aes);
globals.quic_disable_disk_cache.CopyToIfSet( globals.quic_disable_disk_cache.CopyToIfSet(
&params->quic_disable_disk_cache); &params->quic_disable_disk_cache);
globals.quic_max_number_of_lossy_connections.CopyToIfSet( globals.quic_max_number_of_lossy_connections.CopyToIfSet(
...@@ -1321,6 +1322,8 @@ void IOThread::ConfigureQuicGlobals( ...@@ -1321,6 +1322,8 @@ void IOThread::ConfigureQuicGlobals(
ShouldQuicEnableNonBlockingIO(quic_trial_params)); ShouldQuicEnableNonBlockingIO(quic_trial_params));
globals->quic_disable_disk_cache.set( globals->quic_disable_disk_cache.set(
ShouldQuicDisableDiskCache(quic_trial_params)); ShouldQuicDisableDiskCache(quic_trial_params));
globals->quic_prefer_aes.set(
ShouldQuicPreferAes(quic_trial_params));
int max_number_of_lossy_connections = GetQuicMaxNumberOfLossyConnections( int max_number_of_lossy_connections = GetQuicMaxNumberOfLossyConnections(
quic_trial_params); quic_trial_params);
if (max_number_of_lossy_connections != 0) { if (max_number_of_lossy_connections != 0) {
...@@ -1531,6 +1534,13 @@ bool IOThread::ShouldQuicDisableDiskCache( ...@@ -1531,6 +1534,13 @@ bool IOThread::ShouldQuicDisableDiskCache(
GetVariationParam(quic_trial_params, "disable_disk_cache"), "true"); GetVariationParam(quic_trial_params, "disable_disk_cache"), "true");
} }
// static
bool IOThread::ShouldQuicPreferAes(
const VariationParameters& quic_trial_params) {
return base::LowerCaseEqualsASCII(
GetVariationParam(quic_trial_params, "prefer_aes"), "true");
}
// static // static
int IOThread::GetQuicMaxNumberOfLossyConnections( int IOThread::GetQuicMaxNumberOfLossyConnections(
const VariationParameters& quic_trial_params) { const VariationParameters& quic_trial_params) {
......
...@@ -189,6 +189,7 @@ class IOThread : public content::BrowserThreadDelegate { ...@@ -189,6 +189,7 @@ class IOThread : public content::BrowserThreadDelegate {
Optional<bool> quic_enable_connection_racing; Optional<bool> quic_enable_connection_racing;
Optional<bool> quic_enable_non_blocking_io; Optional<bool> quic_enable_non_blocking_io;
Optional<bool> quic_disable_disk_cache; Optional<bool> quic_disable_disk_cache;
Optional<bool> quic_prefer_aes;
Optional<int> quic_max_number_of_lossy_connections; Optional<int> quic_max_number_of_lossy_connections;
Optional<float> quic_packet_loss_threshold; Optional<float> quic_packet_loss_threshold;
Optional<int> quic_socket_receive_buffer_size; Optional<int> quic_socket_receive_buffer_size;
...@@ -375,6 +376,9 @@ class IOThread : public content::BrowserThreadDelegate { ...@@ -375,6 +376,9 @@ class IOThread : public content::BrowserThreadDelegate {
static bool ShouldQuicDisableDiskCache( static bool ShouldQuicDisableDiskCache(
const VariationParameters& quic_trial_params); const VariationParameters& quic_trial_params);
// Returns true if QUIC should prefer AES-GCN even without hardware support.
static bool ShouldQuicPreferAes(const VariationParameters& quic_trial_params);
// Returns the maximum number of QUIC connections with high packet loss in a // Returns the maximum number of QUIC connections with high packet loss in a
// row after which QUIC should be disabled. Returns 0 if the default value // row after which QUIC should be disabled. Returns 0 if the default value
// should be used. // should be used.
......
...@@ -188,6 +188,7 @@ TEST_F(IOThreadTest, EnableQuicFromFieldTrialGroup) { ...@@ -188,6 +188,7 @@ TEST_F(IOThreadTest, EnableQuicFromFieldTrialGroup) {
EXPECT_FALSE(params.quic_enable_connection_racing); EXPECT_FALSE(params.quic_enable_connection_racing);
EXPECT_FALSE(params.quic_enable_non_blocking_io); EXPECT_FALSE(params.quic_enable_non_blocking_io);
EXPECT_FALSE(params.quic_disable_disk_cache); EXPECT_FALSE(params.quic_disable_disk_cache);
EXPECT_FALSE(params.quic_prefer_aes);
EXPECT_EQ(0, params.quic_max_number_of_lossy_connections); EXPECT_EQ(0, params.quic_max_number_of_lossy_connections);
EXPECT_EQ(1.0f, params.quic_packet_loss_threshold); EXPECT_EQ(1.0f, params.quic_packet_loss_threshold);
EXPECT_FALSE(IOThread::ShouldEnableQuicForDataReductionProxy()); EXPECT_FALSE(IOThread::ShouldEnableQuicForDataReductionProxy());
...@@ -363,6 +364,15 @@ TEST_F(IOThreadTest, QuicDisableDiskCache) { ...@@ -363,6 +364,15 @@ TEST_F(IOThreadTest, QuicDisableDiskCache) {
EXPECT_TRUE(params.quic_disable_disk_cache); EXPECT_TRUE(params.quic_disable_disk_cache);
} }
TEST_F(IOThreadTest, QuicPreferAes) {
field_trial_group_ = "Enabled";
field_trial_params_["prefer_aes"] = "true";
ConfigureQuicGlobals();
net::HttpNetworkSession::Params params;
InitializeNetworkSessionParams(&params);
EXPECT_TRUE(params.quic_prefer_aes);
}
TEST_F(IOThreadTest, QuicMaxNumberOfLossyConnectionsFieldTrialParams) { TEST_F(IOThreadTest, QuicMaxNumberOfLossyConnectionsFieldTrialParams) {
field_trial_group_ = "Enabled"; field_trial_group_ = "Enabled";
field_trial_params_["max_number_of_lossy_connections"] = "5"; field_trial_params_["max_number_of_lossy_connections"] = "5";
......
...@@ -98,6 +98,7 @@ HttpNetworkSession::Params::Params() ...@@ -98,6 +98,7 @@ HttpNetworkSession::Params::Params()
quic_enable_connection_racing(false), quic_enable_connection_racing(false),
quic_enable_non_blocking_io(false), quic_enable_non_blocking_io(false),
quic_disable_disk_cache(false), quic_disable_disk_cache(false),
quic_prefer_aes(false),
quic_max_number_of_lossy_connections(0), quic_max_number_of_lossy_connections(0),
quic_packet_loss_threshold(1.0f), quic_packet_loss_threshold(1.0f),
quic_socket_receive_buffer_size(kQuicSocketReceiveBufferSize), quic_socket_receive_buffer_size(kQuicSocketReceiveBufferSize),
...@@ -147,6 +148,7 @@ HttpNetworkSession::HttpNetworkSession(const Params& params) ...@@ -147,6 +148,7 @@ HttpNetworkSession::HttpNetworkSession(const Params& params)
params.quic_enable_connection_racing, params.quic_enable_connection_racing,
params.quic_enable_non_blocking_io, params.quic_enable_non_blocking_io,
params.quic_disable_disk_cache, params.quic_disable_disk_cache,
params.quic_prefer_aes,
params.quic_max_number_of_lossy_connections, params.quic_max_number_of_lossy_connections,
params.quic_packet_loss_threshold, params.quic_packet_loss_threshold,
params.quic_socket_receive_buffer_size, params.quic_socket_receive_buffer_size,
......
...@@ -115,6 +115,7 @@ class NET_EXPORT HttpNetworkSession ...@@ -115,6 +115,7 @@ class NET_EXPORT HttpNetworkSession
bool quic_enable_connection_racing; bool quic_enable_connection_racing;
bool quic_enable_non_blocking_io; bool quic_enable_non_blocking_io;
bool quic_disable_disk_cache; bool quic_disable_disk_cache;
bool quic_prefer_aes;
int quic_max_number_of_lossy_connections; int quic_max_number_of_lossy_connections;
float quic_packet_loss_threshold; float quic_packet_loss_threshold;
int quic_socket_receive_buffer_size; int quic_socket_receive_buffer_size;
......
...@@ -553,6 +553,7 @@ QuicStreamFactory::QuicStreamFactory( ...@@ -553,6 +553,7 @@ QuicStreamFactory::QuicStreamFactory(
bool enable_connection_racing, bool enable_connection_racing,
bool enable_non_blocking_io, bool enable_non_blocking_io,
bool disable_disk_cache, bool disable_disk_cache,
bool prefer_aes,
int max_number_of_lossy_connections, int max_number_of_lossy_connections,
float packet_loss_threshold, float packet_loss_threshold,
int socket_receive_buffer_size, int socket_receive_buffer_size,
...@@ -578,6 +579,7 @@ QuicStreamFactory::QuicStreamFactory( ...@@ -578,6 +579,7 @@ QuicStreamFactory::QuicStreamFactory(
enable_connection_racing_(enable_connection_racing), enable_connection_racing_(enable_connection_racing),
enable_non_blocking_io_(enable_non_blocking_io), enable_non_blocking_io_(enable_non_blocking_io),
disable_disk_cache_(disable_disk_cache), disable_disk_cache_(disable_disk_cache),
prefer_aes_(prefer_aes),
max_number_of_lossy_connections_(max_number_of_lossy_connections), max_number_of_lossy_connections_(max_number_of_lossy_connections),
packet_loss_threshold_(packet_loss_threshold), packet_loss_threshold_(packet_loss_threshold),
socket_receive_buffer_size_(socket_receive_buffer_size), socket_receive_buffer_size_(socket_receive_buffer_size),
...@@ -602,7 +604,7 @@ QuicStreamFactory::QuicStreamFactory( ...@@ -602,7 +604,7 @@ QuicStreamFactory::QuicStreamFactory(
bool has_aes_hardware_support = cpu.has_aesni() && cpu.has_avx(); bool has_aes_hardware_support = cpu.has_aesni() && cpu.has_avx();
UMA_HISTOGRAM_BOOLEAN("Net.QuicSession.PreferAesGcm", UMA_HISTOGRAM_BOOLEAN("Net.QuicSession.PreferAesGcm",
has_aes_hardware_support); has_aes_hardware_support);
if (has_aes_hardware_support) if (has_aes_hardware_support || prefer_aes_)
crypto_config_.PreferAesGcm(); crypto_config_.PreferAesGcm();
if (!IsEcdsaSupported()) if (!IsEcdsaSupported())
crypto_config_.DisableEcdsa(); crypto_config_.DisableEcdsa();
......
...@@ -115,6 +115,7 @@ class NET_EXPORT_PRIVATE QuicStreamFactory ...@@ -115,6 +115,7 @@ class NET_EXPORT_PRIVATE QuicStreamFactory
bool enable_connection_racing, bool enable_connection_racing,
bool enable_non_blocking_io, bool enable_non_blocking_io,
bool disable_disk_cache, bool disable_disk_cache,
bool prefer_aes,
int max_number_of_lossy_connections, int max_number_of_lossy_connections,
float packet_loss_threshold, float packet_loss_threshold,
int socket_receive_buffer_size, int socket_receive_buffer_size,
...@@ -345,6 +346,9 @@ class NET_EXPORT_PRIVATE QuicStreamFactory ...@@ -345,6 +346,9 @@ class NET_EXPORT_PRIVATE QuicStreamFactory
// Set if we do not want to load server config from the disk cache. // Set if we do not want to load server config from the disk cache.
bool disable_disk_cache_; bool disable_disk_cache_;
// Set if AES-GCM should be preferred, even if there is no hardware support.
bool prefer_aes_;
// Set if we want to disable QUIC when there is high packet loss rate. // Set if we want to disable QUIC when there is high packet loss rate.
// Specifies the maximum number of connections with high packet loss in a row // Specifies the maximum number of connections with high packet loss in a row
// after which QUIC will be disabled. // after which QUIC will be disabled.
......
...@@ -218,6 +218,7 @@ class QuicStreamFactoryTest : public ::testing::TestWithParam<TestParams> { ...@@ -218,6 +218,7 @@ class QuicStreamFactoryTest : public ::testing::TestWithParam<TestParams> {
/*enable_connection_racing=*/false, /*enable_connection_racing=*/false,
/*enable_non_blocking_io=*/true, /*enable_non_blocking_io=*/true,
/*disable_disk_cache=*/false, /*disable_disk_cache=*/false,
/*prefer_aes=*/false,
/*max_number_of_lossy_connections=*/0, /*max_number_of_lossy_connections=*/0,
/*packet_loss_threshold=*/1.0f, /*packet_loss_threshold=*/1.0f,
/*receive_buffer_size=*/0, /*receive_buffer_size=*/0,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment