| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "base/basictypes.h" | 5 #include "base/basictypes.h" |
| 6 #include "base/logging.h" | 6 #include "base/logging.h" |
| 7 #include "net/quic/congestion_control/cubic.h" | 7 #include "net/quic/congestion_control/cubic.h" |
| 8 #include "net/quic/quic_connection_stats.h" | 8 #include "net/quic/quic_connection_stats.h" |
| 9 #include "net/quic/test_tools/mock_clock.h" | 9 #include "net/quic/test_tools/mock_clock.h" |
| 10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 59 for (uint32 n = 1; n < current_cwnd; ++n) { | 59 for (uint32 n = 1; n < current_cwnd; ++n) { |
| 60 // Call once per ACK. | 60 // Call once per ACK. |
| 61 EXPECT_EQ(current_cwnd, | 61 EXPECT_EQ(current_cwnd, |
| 62 cubic_.CongestionWindowAfterAck(current_cwnd, rtt_min)); | 62 cubic_.CongestionWindowAfterAck(current_cwnd, rtt_min)); |
| 63 } | 63 } |
| 64 clock_.AdvanceTime(hundred_ms_); | 64 clock_.AdvanceTime(hundred_ms_); |
| 65 current_cwnd = cubic_.CongestionWindowAfterAck(current_cwnd, rtt_min); | 65 current_cwnd = cubic_.CongestionWindowAfterAck(current_cwnd, rtt_min); |
| 66 } | 66 } |
| 67 // Total time elapsed so far; add min_rtt (0.1s) here as well. | 67 // Total time elapsed so far; add min_rtt (0.1s) here as well. |
| 68 float elapsed_time_s = 10.0f + 0.1f; | 68 float elapsed_time_s = 10.0f + 0.1f; |
| 69 // expected_cwnd is initial value of cwnd + K * t^3, where K = 0.4. | 69 // |expected_cwnd| is initial value of cwnd + K * t^3, where K = 0.4. |
| 70 expected_cwnd = 11 + (elapsed_time_s * elapsed_time_s * elapsed_time_s * 410) | 70 expected_cwnd = 11 + (elapsed_time_s * elapsed_time_s * elapsed_time_s * 410) |
| 71 / 1024; | 71 / 1024; |
| 72 EXPECT_EQ(expected_cwnd, current_cwnd); | 72 EXPECT_EQ(expected_cwnd, current_cwnd); |
| 73 } | 73 } |
| 74 | 74 |
| 75 TEST_F(CubicTest, CwndIncreaseStatsDuringConvexRegion) { | 75 TEST_F(CubicTest, CwndIncreaseStatsDuringConvexRegion) { |
| 76 const QuicTime::Delta rtt_min = hundred_ms_; | 76 const QuicTime::Delta rtt_min = hundred_ms_; |
| 77 uint32 current_cwnd = 10; | 77 uint32 current_cwnd = 10; |
| 78 uint32 expected_cwnd = current_cwnd + 1; | 78 uint32 expected_cwnd = current_cwnd + 1; |
| 79 // Initialize controller state. | 79 // Initialize controller state. |
| (...skipping 21 matching lines...) Expand all Loading... |
| 101 for (int i = 0; i < 52; ++i) { | 101 for (int i = 0; i < 52; ++i) { |
| 102 for (uint32 n = 1; n < current_cwnd; ++n) { | 102 for (uint32 n = 1; n < current_cwnd; ++n) { |
| 103 // Call once per ACK. | 103 // Call once per ACK. |
| 104 cubic_.CongestionWindowAfterAck(current_cwnd, rtt_min); | 104 cubic_.CongestionWindowAfterAck(current_cwnd, rtt_min); |
| 105 } | 105 } |
| 106 clock_.AdvanceTime(hundred_ms_); | 106 clock_.AdvanceTime(hundred_ms_); |
| 107 current_cwnd = cubic_.CongestionWindowAfterAck(current_cwnd, rtt_min); | 107 current_cwnd = cubic_.CongestionWindowAfterAck(current_cwnd, rtt_min); |
| 108 } | 108 } |
| 109 // Total time elapsed so far; add min_rtt (0.1s) here as well. | 109 // Total time elapsed so far; add min_rtt (0.1s) here as well. |
| 110 float elapsed_time_s = 10.0f + 0.1f; | 110 float elapsed_time_s = 10.0f + 0.1f; |
| 111 // expected_cwnd is initial value of cwnd + K * t^3, where K = 0.4. | 111 // |expected_cwnd| is initial value of cwnd + K * t^3, where K = 0.4. |
| 112 expected_cwnd = 11 + (elapsed_time_s * elapsed_time_s * elapsed_time_s * 410) | 112 expected_cwnd = 11 + (elapsed_time_s * elapsed_time_s * elapsed_time_s * 410) |
| 113 / 1024; | 113 / 1024; |
| 114 EXPECT_EQ(expected_cwnd - old_cwnd, stats_.cwnd_increase_cubic_mode); | 114 EXPECT_EQ(expected_cwnd - old_cwnd, stats_.cwnd_increase_cubic_mode); |
| 115 EXPECT_EQ(0u, stats_.cwnd_increase_reno_mode); | 115 EXPECT_EQ(0u, stats_.cwnd_increase_reno_mode); |
| 116 } | 116 } |
| 117 | 117 |
| 118 | 118 |
| 119 TEST_F(CubicTest, LossEvents) { | 119 TEST_F(CubicTest, LossEvents) { |
| 120 const QuicTime::Delta rtt_min = hundred_ms_; | 120 const QuicTime::Delta rtt_min = hundred_ms_; |
| 121 uint32 current_cwnd = 422; | 121 uint32 current_cwnd = 422; |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 156 current_cwnd = cubic_.CongestionWindowAfterAck(current_cwnd, rtt_min); | 156 current_cwnd = cubic_.CongestionWindowAfterAck(current_cwnd, rtt_min); |
| 157 } | 157 } |
| 158 expected_cwnd = 422; | 158 expected_cwnd = 422; |
| 159 EXPECT_EQ(expected_cwnd, current_cwnd); | 159 EXPECT_EQ(expected_cwnd, current_cwnd); |
| 160 EXPECT_EQ(expected_cwnd - old_cwnd, stats_.cwnd_increase_cubic_mode); | 160 EXPECT_EQ(expected_cwnd - old_cwnd, stats_.cwnd_increase_cubic_mode); |
| 161 EXPECT_EQ(0u, stats_.cwnd_increase_reno_mode); | 161 EXPECT_EQ(0u, stats_.cwnd_increase_reno_mode); |
| 162 } | 162 } |
| 163 | 163 |
| 164 } // namespace test | 164 } // namespace test |
| 165 } // namespace net | 165 } // namespace net |
| OLD | NEW |