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

Unified Diff: net/nqe/network_quality_estimator_unittest.cc

Issue 2107243003: NQE: Record correlation metric in UMA (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed kundaji's comments Created 4 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/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),
bengr 2016/07/08 16:49:52 larger -> larger than
tbansal1 2016/07/08 17:45:51 Done.
+ // it is rounded down to
+ // (2^(kBitsPerMetric + kTrimBits) - 1) >> kTrimBits.
+ 1.0, base::TimeDelta::FromSeconds(10), 4095 >> kTrimBits,
bengr 2016/07/08 16:49:52 I guess there's no way to test a probability great
tbansal1 2016/07/08 17:45:51 Done. Moved random number to a different function,
+ 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
bengr 2016/07/08 16:49:52 which -> that
tbansal1 2016/07/08 17:45:51 Done.
+ // 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
« net/nqe/network_quality_estimator.cc ('K') | « net/nqe/network_quality_estimator.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698