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

Unified Diff: net/nqe/network_quality_estimator_unittest.cc

Issue 2654033010: NQE: Record the number of RTT and throughput samples received (Closed)
Patch Set: Created 3 years, 11 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 88863583f95bb84c30e726b54de653158d18666a..ec0e07e89fdad368c4a207d053df7923b5ee19e1 100644
--- a/net/nqe/network_quality_estimator_unittest.cc
+++ b/net/nqe/network_quality_estimator_unittest.cc
@@ -44,6 +44,26 @@
#include "testing/gtest/include/gtest/gtest.h"
#include "url/gurl.h"
+namespace {
+
+// Verifies that the number of samples in the bucket with minimum value
+// |bucket_min| in |histogram| are at least |expected_min_count_samples|.
+void VerifyBucketCountAtLeast(base::HistogramTester* histogram_tester,
RyanSturm 2017/01/31 19:57:57 I feel like this could be generalized in the Histo
tbansal1 2017/02/02 02:35:36 Done.
+ const std::string& histogram,
+ int32_t bucket_min,
+ int32_t expected_min_count_samples) {
+ std::vector<base::Bucket> buckets =
+ histogram_tester->GetAllSamples(histogram);
+ int actual_count_samples = 0;
+ for (const auto& bucket : buckets) {
+ if (bucket.min == bucket_min)
+ actual_count_samples += bucket.count;
+ }
+ EXPECT_LE(expected_min_count_samples, actual_count_samples);
+}
+
+} // namespace
+
namespace net {
namespace {
@@ -228,6 +248,10 @@ TEST(NetworkQualityEstimatorTest, TestKbpsRTTUpdates) {
"NQE.EstimateAvailable.MainFrame.TransportRTT", 0, 1);
histogram_tester.ExpectUniqueSample("NQE.EstimateAvailable.MainFrame.Kbps", 0,
1);
+ histogram_tester.ExpectBucketCount(
+ "NQE.RTT.ObservationSource", NETWORK_QUALITY_OBSERVATION_SOURCE_HTTP, 1);
+ histogram_tester.ExpectBucketCount(
+ "NQE.Kbps.ObservationSource", NETWORK_QUALITY_OBSERVATION_SOURCE_HTTP, 1);
std::unique_ptr<URLRequest> request2(context.CreateRequest(
estimator.GetEchoURL(), DEFAULT_PRIORITY, &test_delegate));
@@ -378,6 +402,12 @@ TEST(NetworkQualityEstimatorTest, Caching) {
estimator.SimulateNetworkChange(
NetworkChangeNotifier::ConnectionType::CONNECTION_2G, "test");
+ histogram_tester.ExpectBucketCount(
+ "NQE.RTT.ObservationSource",
+ NETWORK_QUALITY_OBSERVATION_SOURCE_HTTP_CACHED_ESTIMATE, 1);
+ histogram_tester.ExpectBucketCount(
+ "NQE.Kbps.ObservationSource",
+ NETWORK_QUALITY_OBSERVATION_SOURCE_HTTP_CACHED_ESTIMATE, 1);
// Verify the contents of the net log.
EXPECT_LE(
@@ -411,6 +441,21 @@ TEST(NetworkQualityEstimatorTest, Caching) {
EXPECT_EQ(1U, throughput_observer.observations().size());
}
+TEST(NetworkQualityEstimatorTest, QuicObservations) {
+ base::HistogramTester histogram_tester;
+ TestNetworkQualityEstimator estimator;
+ estimator.OnUpdatedRTTAvailable(SocketPerformanceWatcherFactory::PROTOCOL_TCP,
+ base::TimeDelta::FromMilliseconds(10));
+ estimator.OnUpdatedRTTAvailable(
+ SocketPerformanceWatcherFactory::PROTOCOL_QUIC,
+ base::TimeDelta::FromMilliseconds(10));
+ histogram_tester.ExpectBucketCount("NQE.RTT.ObservationSource",
+ NETWORK_QUALITY_OBSERVATION_SOURCE_TCP, 1);
+ histogram_tester.ExpectBucketCount(
+ "NQE.RTT.ObservationSource", NETWORK_QUALITY_OBSERVATION_SOURCE_QUIC, 1);
+ histogram_tester.ExpectTotalCount("NQE.RTT.ObservationSource", 2);
+}
+
TEST(NetworkQualityEstimatorTest, StoreObservations) {
TestNetworkQualityEstimator estimator;
@@ -505,6 +550,8 @@ TEST(NetworkQualityEstimatorTest, ComputedPercentiles) {
// Verifies that the observers receive the notifications when default estimates
// are added to the observations.
TEST(NetworkQualityEstimatorTest, DefaultObservations) {
+ base::HistogramTester histogram_tester;
+
TestEffectiveConnectionTypeObserver effective_connection_type_observer;
TestRTTAndThroughputEstimatesObserver rtt_throughput_estimates_observer;
TestRTTObserver rtt_observer;
@@ -514,6 +561,19 @@ TEST(NetworkQualityEstimatorTest, DefaultObservations) {
nullptr, variation_params, false, false,
true /* add_default_platform_observations */,
base::MakeUnique<BoundTestNetLog>());
+
+ histogram_tester.ExpectBucketCount(
+ "NQE.RTT.ObservationSource",
+ NETWORK_QUALITY_OBSERVATION_SOURCE_DEFAULT_HTTP_FROM_PLATFORM, 1);
+ histogram_tester.ExpectBucketCount(
+ "NQE.RTT.ObservationSource",
+ NETWORK_QUALITY_OBSERVATION_SOURCE_DEFAULT_TRANSPORT_FROM_PLATFORM, 1);
+ histogram_tester.ExpectBucketCount(
+ "NQE.Kbps.ObservationSource",
+ NETWORK_QUALITY_OBSERVATION_SOURCE_DEFAULT_HTTP_FROM_PLATFORM, 1);
+ histogram_tester.ExpectTotalCount("NQE.RTT.ObservationSource", 2);
+ histogram_tester.ExpectTotalCount("NQE.Kbps.ObservationSource", 1);
+
base::TimeDelta rtt;
int32_t kbps;
@@ -1408,6 +1468,12 @@ TEST(NetworkQualityEstimatorTest, TestExternalEstimateProvider) {
histogram_tester.ExpectUniqueSample("NQE.ExternalEstimateProvider.RTT", 1, 1);
histogram_tester.ExpectUniqueSample(
"NQE.ExternalEstimateProvider.DownlinkBandwidth", 100, 1);
+ histogram_tester.ExpectBucketCount(
+ "NQE.RTT.ObservationSource",
+ NETWORK_QUALITY_OBSERVATION_SOURCE_HTTP_EXTERNAL_ESTIMATE, 1);
+ histogram_tester.ExpectBucketCount(
+ "NQE.Kbps.ObservationSource",
+ NETWORK_QUALITY_OBSERVATION_SOURCE_HTTP_EXTERNAL_ESTIMATE, 1);
EXPECT_EQ(1U, test_external_estimate_provider->update_count());
@@ -1466,10 +1532,15 @@ TEST(NetworkQualityEstimatorTest, TestExternalEstimateProviderMergeEstimates) {
context.set_network_quality_estimator(&estimator);
context.Init();
- std::unique_ptr<URLRequest> request(context.CreateRequest(
- estimator.GetEchoURL(), DEFAULT_PRIORITY, &test_delegate));
- request->Start();
- base::RunLoop().Run();
+ for (size_t i = 0; i < 2; ++i) {
+ // Start 2 requests to ensure that the RTT estimate computed by the network
+ // quality estimator takes into account the RTT observations from the
+ // external estimate provider as well as organic observations.
+ std::unique_ptr<URLRequest> request(context.CreateRequest(
+ estimator.GetEchoURL(), DEFAULT_PRIORITY, &test_delegate));
+ request->Start();
+ base::RunLoop().Run();
+ }
EXPECT_TRUE(estimator.GetRecentHttpRTT(base::TimeTicks(), &rtt));
EXPECT_NE(external_estimate_provider_rtt, rtt);
@@ -1958,6 +2029,9 @@ TEST(NetworkQualityEstimatorTest, MAYBE_TestTCPSocketRTT) {
base::HistogramTester histogram_tester;
TestRTTObserver rtt_observer;
TestNetworkQualityEstimator estimator;
+ estimator.SimulateNetworkChange(
+ NetworkChangeNotifier::ConnectionType::CONNECTION_2G, "test");
+
estimator.AddRTTObserver(&rtt_observer);
TestDelegate test_delegate;
@@ -2009,14 +2083,13 @@ TEST(NetworkQualityEstimatorTest, MAYBE_TestTCPSocketRTT) {
estimator.SimulateNetworkChange(
NetworkChangeNotifier::ConnectionType::CONNECTION_WIFI, "test-1");
- histogram_tester.ExpectTotalCount("NQE.TransportRTT.Percentile50.Unknown", 1);
- histogram_tester.ExpectBucketCount("NQE.TransportRTT.Percentile50.Unknown",
+ histogram_tester.ExpectTotalCount("NQE.TransportRTT.Percentile50.2G", 1);
+ histogram_tester.ExpectBucketCount("NQE.TransportRTT.Percentile50.2G",
rtt.InMilliseconds(), 1);
- histogram_tester.ExpectTotalCount("NQE.TransportRTT.Percentile10.Unknown", 1);
- histogram_tester.ExpectTotalCount("NQE.TransportRTT.Percentile50.Unknown", 1);
- histogram_tester.ExpectTotalCount("NQE.TransportRTT.Percentile90.Unknown", 1);
- histogram_tester.ExpectTotalCount("NQE.TransportRTT.Percentile100.Unknown",
- 1);
+ histogram_tester.ExpectTotalCount("NQE.TransportRTT.Percentile10.2G", 1);
+ histogram_tester.ExpectTotalCount("NQE.TransportRTT.Percentile50.2G", 1);
+ histogram_tester.ExpectTotalCount("NQE.TransportRTT.Percentile90.2G", 1);
+ histogram_tester.ExpectTotalCount("NQE.TransportRTT.Percentile100.2G", 1);
// Verify that metrics are logged correctly on main-frame requests.
histogram_tester.ExpectTotalCount("NQE.MainFrame.TransportRTT.Percentile50",
@@ -2033,14 +2106,26 @@ TEST(NetworkQualityEstimatorTest, MAYBE_TestTCPSocketRTT) {
num_requests - 1);
histogram_tester.ExpectTotalCount(
- "NQE.MainFrame.TransportRTT.Percentile50.Unknown", num_requests);
+ "NQE.MainFrame.TransportRTT.Percentile50.2G", num_requests);
histogram_tester.ExpectTotalCount("NQE.MainFrame.EffectiveConnectionType",
num_requests);
- histogram_tester.ExpectTotalCount(
- "NQE.MainFrame.EffectiveConnectionType.Unknown", num_requests);
+ histogram_tester.ExpectTotalCount("NQE.MainFrame.EffectiveConnectionType.2G",
+ num_requests);
+ histogram_tester.ExpectBucketCount("NQE.MainFrame.EffectiveConnectionType.2G",
+ EFFECTIVE_CONNECTION_TYPE_UNKNOWN, 1);
+ VerifyBucketCountAtLeast(&histogram_tester, "NQE.RTT.ObservationSource",
+ NETWORK_QUALITY_OBSERVATION_SOURCE_TCP, 1);
+ VerifyBucketCountAtLeast(&histogram_tester, "NQE.Kbps.ObservationSource",
+ NETWORK_QUALITY_OBSERVATION_SOURCE_HTTP, 1);
histogram_tester.ExpectBucketCount(
- "NQE.MainFrame.EffectiveConnectionType.Unknown",
- EFFECTIVE_CONNECTION_TYPE_UNKNOWN, 1);
+ "NQE.Kbps.ObservationSource",
+ NETWORK_QUALITY_OBSERVATION_SOURCE_TRANSPORT_CACHED_ESTIMATE, 0);
+
+ estimator.SimulateNetworkChange(
+ NetworkChangeNotifier::ConnectionType::CONNECTION_2G, "test");
+ histogram_tester.ExpectBucketCount(
+ "NQE.RTT.ObservationSource",
+ NETWORK_QUALITY_OBSERVATION_SOURCE_TRANSPORT_CACHED_ESTIMATE, 1);
}
#if defined(OS_IOS)

Powered by Google App Engine
This is Rietveld 408576698