| Index: net/nqe/network_quality_estimator_unittest.cc
|
| diff --git a/net/nqe/network_quality_estimator_unittest.cc b/net/nqe/network_quality_estimator_unittest.cc
|
| index 87de5f174485ae3b7c27a8ca8be57e374dd8a9de..06e45e7a9d59b2c66408ed88c82e271e1e7cfe06 100644
|
| --- a/net/nqe/network_quality_estimator_unittest.cc
|
| +++ b/net/nqe/network_quality_estimator_unittest.cc
|
| @@ -1728,4 +1728,101 @@ TEST(NetworkQualityEstimatorTest, NameConnectionTypeConversion) {
|
| }
|
| }
|
|
|
| +// Tests that the correlation histogram is recorded correctly based on
|
| +// correlation logging probability set in the variation params.
|
| +TEST(NetworkQualityEstimatorTest, CorrelationHistogram) {
|
| + // Match the values set in network_quality_estimator.cc.
|
| + static const int32_t kTrimBits = 5;
|
| + static const int32_t kBitsPerMetric = 7;
|
| +
|
| + const struct {
|
| + double correlation_logging_probability;
|
| + base::TimeDelta transport_rtt;
|
| + int32_t expected_transport_rtt_milliseconds;
|
| + base::TimeDelta http_rtt;
|
| + int32_t expected_http_rtt_milliseconds;
|
| + int32_t downstream_throughput_kbps;
|
| + int32_t expected_downstream_throughput_kbps;
|
| +
|
| + } tests[] = {
|
| + {
|
| + // Verify that the metric is not recorded if the logging probability
|
| + // is set to 0.0.
|
| + 0.0, base::TimeDelta::FromSeconds(1), 1000 >> kTrimBits,
|
| + base::TimeDelta::FromSeconds(2), 2000 >> kTrimBits, 3000,
|
| + 3000 >> kTrimBits,
|
| + },
|
| + {
|
| + 1.0, base::TimeDelta::FromSeconds(1), 1000 >> kTrimBits,
|
| + base::TimeDelta::FromSeconds(2), 2000 >> kTrimBits, 3000,
|
| + 3000 >> kTrimBits,
|
| + },
|
| + {
|
| + // Verify that if the metric is larger 2^(kBitsPerMetric + kTrimBits),
|
| + // it is rounded down to
|
| + // (2^(kBitsPerMetric + kTrimBits) - 1) >> kTrimBits.
|
| + 1.0, base::TimeDelta::FromSeconds(10), 4095 >> kTrimBits,
|
| + base::TimeDelta::FromSeconds(20), 4095 >> kTrimBits, 30000,
|
| + 4095 >> kTrimBits,
|
| + },
|
| + };
|
| +
|
| + for (const auto& test : tests) {
|
| + base::HistogramTester histogram_tester;
|
| +
|
| + std::map<std::string, std::string> variation_params;
|
| + variation_params["correlation_logging_probability"] =
|
| + base::DoubleToString(test.correlation_logging_probability);
|
| + TestNetworkQualityEstimator estimator(variation_params);
|
| +
|
| + estimator.set_transport_rtt(test.transport_rtt);
|
| + estimator.set_recent_transport_rtt(test.transport_rtt);
|
| + estimator.set_http_rtt(test.http_rtt);
|
| + estimator.set_recent_http_rtt(test.http_rtt);
|
| + estimator.set_downlink_throughput_kbps(test.downstream_throughput_kbps);
|
| +
|
| + TestDelegate test_delegate;
|
| + TestURLRequestContext context(true);
|
| + context.set_network_quality_estimator(&estimator);
|
| + context.Init();
|
| +
|
| + // Start a main-frame request which should cause network quality estimator
|
| + // to record the network quality at the last main frame request.
|
| + std::unique_ptr<URLRequest> request_1(context.CreateRequest(
|
| + estimator.GetEchoURL(), DEFAULT_PRIORITY, &test_delegate));
|
| + request_1->SetLoadFlags(request_1->load_flags() | LOAD_MAIN_FRAME);
|
| + request_1->Start();
|
| + base::RunLoop().Run();
|
| + histogram_tester.ExpectTotalCount("NQE.Correlation.ResourceLoadTime", 0);
|
| +
|
| + // Start another main-frame request which should cause network quality
|
| + // estimator to record the correlation UMA.
|
| + std::unique_ptr<URLRequest> request_2(context.CreateRequest(
|
| + estimator.GetEchoURL(), DEFAULT_PRIORITY, &test_delegate));
|
| + request_2->Start();
|
| + base::RunLoop().Run();
|
| +
|
| + if (test.correlation_logging_probability == 0.0) {
|
| + histogram_tester.ExpectTotalCount("NQE.Correlation.ResourceLoadTime", 0);
|
| + continue;
|
| + }
|
| + histogram_tester.ExpectTotalCount("NQE.Correlation.ResourceLoadTime", 1);
|
| + std::vector<base::Bucket> buckets =
|
| + histogram_tester.GetAllSamples("NQE.Correlation.ResourceLoadTime");
|
| + // Get the bits at index 0-10 which contain the transport RTT.
|
| + // 128 is 2^kBitsPerMetric.
|
| + EXPECT_EQ(test.expected_transport_rtt_milliseconds,
|
| + buckets.at(0).min >> kBitsPerMetric >> kBitsPerMetric >>
|
| + kBitsPerMetric);
|
| + // Get the bits at index 11-17 which contain the HTTP RTT.
|
| + EXPECT_EQ(test.expected_http_rtt_milliseconds,
|
| + (buckets.at(0).min >> kBitsPerMetric >> kBitsPerMetric) % 128);
|
| + // Get the bits at index 18-24 which contain the downstream throughput.
|
| + EXPECT_EQ(test.expected_downstream_throughput_kbps,
|
| + (buckets.at(0).min >> kBitsPerMetric) % 128);
|
| + // Get the bits at index 25-31 which contain the resource fetch time.
|
| + EXPECT_LE(0, buckets.at(0).min % 128);
|
| + }
|
| +}
|
| +
|
| } // namespace net
|
|
|