OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/nqe/throughput_analyzer.h" | 5 #include "net/nqe/throughput_analyzer.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include <deque> | 9 #include <deque> |
10 #include <map> | 10 #include <map> |
(...skipping 16 matching lines...) Expand all Loading... |
27 #include "testing/gtest/include/gtest/gtest.h" | 27 #include "testing/gtest/include/gtest/gtest.h" |
28 | 28 |
29 namespace net { | 29 namespace net { |
30 | 30 |
31 namespace nqe { | 31 namespace nqe { |
32 | 32 |
33 namespace { | 33 namespace { |
34 | 34 |
35 class TestThroughputAnalyzer : public internal::ThroughputAnalyzer { | 35 class TestThroughputAnalyzer : public internal::ThroughputAnalyzer { |
36 public: | 36 public: |
37 explicit TestThroughputAnalyzer( | 37 explicit TestThroughputAnalyzer(NetworkQualityEstimatorParams* params) |
38 internal::NetworkQualityEstimatorParams* params) | |
39 : internal::ThroughputAnalyzer( | 38 : internal::ThroughputAnalyzer( |
40 params, | 39 params, |
41 base::ThreadTaskRunnerHandle::Get(), | 40 base::ThreadTaskRunnerHandle::Get(), |
42 base::Bind( | 41 base::Bind( |
43 &TestThroughputAnalyzer::OnNewThroughputObservationAvailable, | 42 &TestThroughputAnalyzer::OnNewThroughputObservationAvailable, |
44 base::Unretained(this)), | 43 base::Unretained(this)), |
45 false, | 44 false, |
46 false), | 45 false), |
47 throughput_observations_received_(0), | 46 throughput_observations_received_(0), |
48 bits_received_(0) {} | 47 bits_received_(0) {} |
(...skipping 29 matching lines...) Expand all Loading... |
78 bool use_local_requests; | 77 bool use_local_requests; |
79 } tests[] = {{ | 78 } tests[] = {{ |
80 false, | 79 false, |
81 }, | 80 }, |
82 { | 81 { |
83 true, | 82 true, |
84 }}; | 83 }}; |
85 | 84 |
86 for (const auto& test : tests) { | 85 for (const auto& test : tests) { |
87 std::map<std::string, std::string> variation_params; | 86 std::map<std::string, std::string> variation_params; |
88 internal::NetworkQualityEstimatorParams params(variation_params); | 87 NetworkQualityEstimatorParams params(variation_params); |
89 TestThroughputAnalyzer throughput_analyzer(¶ms); | 88 TestThroughputAnalyzer throughput_analyzer(¶ms); |
90 | 89 |
91 TestDelegate test_delegate; | 90 TestDelegate test_delegate; |
92 TestURLRequestContext context; | 91 TestURLRequestContext context; |
93 | 92 |
94 ASSERT_FALSE(throughput_analyzer.disable_throughput_measurements()); | 93 ASSERT_FALSE(throughput_analyzer.disable_throughput_measurements()); |
95 std::deque<std::unique_ptr<URLRequest>> requests; | 94 std::deque<std::unique_ptr<URLRequest>> requests; |
96 | 95 |
97 // Start more requests than the maximum number of requests that can be held | 96 // Start more requests than the maximum number of requests that can be held |
98 // in the memory. | 97 // in the memory. |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
130 true, false, false, | 129 true, false, false, |
131 }, | 130 }, |
132 { | 131 { |
133 true, true, true, | 132 true, true, true, |
134 }, | 133 }, |
135 }; | 134 }; |
136 | 135 |
137 for (const auto& test : tests) { | 136 for (const auto& test : tests) { |
138 // Localhost requests are not allowed for estimation purposes. | 137 // Localhost requests are not allowed for estimation purposes. |
139 std::map<std::string, std::string> variation_params; | 138 std::map<std::string, std::string> variation_params; |
140 internal::NetworkQualityEstimatorParams params(variation_params); | 139 NetworkQualityEstimatorParams params(variation_params); |
141 TestThroughputAnalyzer throughput_analyzer(¶ms); | 140 TestThroughputAnalyzer throughput_analyzer(¶ms); |
142 | 141 |
143 TestDelegate test_delegate; | 142 TestDelegate test_delegate; |
144 TestURLRequestContext context; | 143 TestURLRequestContext context; |
145 | 144 |
146 std::unique_ptr<URLRequest> request_local; | 145 std::unique_ptr<URLRequest> request_local; |
147 | 146 |
148 std::unique_ptr<URLRequest> request_not_local(context.CreateRequest( | 147 std::unique_ptr<URLRequest> request_not_local(context.CreateRequest( |
149 GURL("http://example.com/echo.html"), DEFAULT_PRIORITY, &test_delegate, | 148 GURL("http://example.com/echo.html"), DEFAULT_PRIORITY, &test_delegate, |
150 TRAFFIC_ANNOTATION_FOR_TESTS)); | 149 TRAFFIC_ANNOTATION_FOR_TESTS)); |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
219 { | 218 { |
220 1, 2, 1, false, | 219 1, 2, 1, false, |
221 }, | 220 }, |
222 }; | 221 }; |
223 | 222 |
224 for (const auto& test : tests) { | 223 for (const auto& test : tests) { |
225 // Localhost requests are not allowed for estimation purposes. | 224 // Localhost requests are not allowed for estimation purposes. |
226 std::map<std::string, std::string> variation_params; | 225 std::map<std::string, std::string> variation_params; |
227 variation_params["throughput_min_requests_in_flight"] = | 226 variation_params["throughput_min_requests_in_flight"] = |
228 base::IntToString(test.throughput_min_requests_in_flight); | 227 base::IntToString(test.throughput_min_requests_in_flight); |
229 internal::NetworkQualityEstimatorParams params(variation_params); | 228 NetworkQualityEstimatorParams params(variation_params); |
230 TestThroughputAnalyzer throughput_analyzer(¶ms); | 229 TestThroughputAnalyzer throughput_analyzer(¶ms); |
231 TestDelegate test_delegate; | 230 TestDelegate test_delegate; |
232 TestURLRequestContext context; | 231 TestURLRequestContext context; |
233 | 232 |
234 EXPECT_EQ(0, throughput_analyzer.throughput_observations_received()); | 233 EXPECT_EQ(0, throughput_analyzer.throughput_observations_received()); |
235 | 234 |
236 std::vector<std::unique_ptr<URLRequest>> requests_in_flight; | 235 std::vector<std::unique_ptr<URLRequest>> requests_in_flight; |
237 | 236 |
238 for (size_t i = 0; i < test.number_requests_in_flight; ++i) { | 237 for (size_t i = 0; i < test.number_requests_in_flight; ++i) { |
239 std::unique_ptr<URLRequest> request_network_1 = context.CreateRequest( | 238 std::unique_ptr<URLRequest> request_network_1 = context.CreateRequest( |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
271 } | 270 } |
272 } | 271 } |
273 } | 272 } |
274 | 273 |
275 // Tests if the throughput observation is taken correctly when the start and end | 274 // Tests if the throughput observation is taken correctly when the start and end |
276 // of network requests overlap, and the minimum number of in flight requests | 275 // of network requests overlap, and the minimum number of in flight requests |
277 // when taking an observation is more than 1. | 276 // when taking an observation is more than 1. |
278 TEST(ThroughputAnalyzerTest, TestThroughputWithMultipleNetworkRequests) { | 277 TEST(ThroughputAnalyzerTest, TestThroughputWithMultipleNetworkRequests) { |
279 std::map<std::string, std::string> variation_params; | 278 std::map<std::string, std::string> variation_params; |
280 variation_params["throughput_min_requests_in_flight"] = "3"; | 279 variation_params["throughput_min_requests_in_flight"] = "3"; |
281 internal::NetworkQualityEstimatorParams params(variation_params); | 280 NetworkQualityEstimatorParams params(variation_params); |
282 TestThroughputAnalyzer throughput_analyzer(¶ms); | 281 TestThroughputAnalyzer throughput_analyzer(¶ms); |
283 TestDelegate test_delegate; | 282 TestDelegate test_delegate; |
284 TestURLRequestContext context; | 283 TestURLRequestContext context; |
285 | 284 |
286 EXPECT_EQ(0, throughput_analyzer.throughput_observations_received()); | 285 EXPECT_EQ(0, throughput_analyzer.throughput_observations_received()); |
287 | 286 |
288 std::unique_ptr<URLRequest> request_1 = context.CreateRequest( | 287 std::unique_ptr<URLRequest> request_1 = context.CreateRequest( |
289 GURL("http://example.com/echo.html"), DEFAULT_PRIORITY, &test_delegate, | 288 GURL("http://example.com/echo.html"), DEFAULT_PRIORITY, &test_delegate, |
290 TRAFFIC_ANNOTATION_FOR_TESTS); | 289 TRAFFIC_ANNOTATION_FOR_TESTS); |
291 std::unique_ptr<URLRequest> request_2 = context.CreateRequest( | 290 std::unique_ptr<URLRequest> request_2 = context.CreateRequest( |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
337 throughput_analyzer.NotifyRequestCompleted(*(request_3.get())); | 336 throughput_analyzer.NotifyRequestCompleted(*(request_3.get())); |
338 throughput_analyzer.NotifyRequestCompleted(*(request_4.get())); | 337 throughput_analyzer.NotifyRequestCompleted(*(request_4.get())); |
339 EXPECT_EQ(1, throughput_analyzer.throughput_observations_received()); | 338 EXPECT_EQ(1, throughput_analyzer.throughput_observations_received()); |
340 } | 339 } |
341 | 340 |
342 } // namespace | 341 } // namespace |
343 | 342 |
344 } // namespace nqe | 343 } // namespace nqe |
345 | 344 |
346 } // namespace net | 345 } // namespace net |
OLD | NEW |