OLD | NEW |
(Empty) | |
| 1 /* |
| 2 * Copyright 2015 The WebRTC Project Authors. All rights reserved. |
| 3 * |
| 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ |
| 10 |
| 11 #include "webrtc/base/gunit.h" |
| 12 #include "webrtc/base/bucketratetracker.h" |
| 13 |
| 14 namespace rtc { |
| 15 |
| 16 class BucketRateTrackerForTest : public BucketRateTracker { |
| 17 public: |
| 18 BucketRateTrackerForTest() : BucketRateTracker(100u, 10u), time_(0) {} |
| 19 virtual uint32 Time() const { return time_; } |
| 20 void AdvanceTime(uint32 delta) { time_ += delta; } |
| 21 |
| 22 private: |
| 23 uint32 time_; |
| 24 }; |
| 25 |
| 26 TEST(BucketRateTrackerTest, Test30FPS) { |
| 27 BucketRateTrackerForTest tracker; |
| 28 |
| 29 for (int i = 0; i < 300; ++i) { |
| 30 tracker.AddSamples(1); |
| 31 tracker.AdvanceTime(33); |
| 32 if (i % 3 == 0) { |
| 33 tracker.AdvanceTime(1); |
| 34 } |
| 35 } |
| 36 EXPECT_EQ(30u, tracker.ComputeCurrentRate(50000u)); |
| 37 } |
| 38 |
| 39 TEST(BucketRateTrackerTest, Test60FPS) { |
| 40 BucketRateTrackerForTest tracker; |
| 41 |
| 42 for (int i = 0; i < 300; ++i) { |
| 43 tracker.AddSamples(1); |
| 44 tracker.AdvanceTime(16); |
| 45 if (i % 3 != 0) { |
| 46 tracker.AdvanceTime(1); |
| 47 } |
| 48 } |
| 49 EXPECT_EQ(60u, tracker.ComputeCurrentRate(1000u)); |
| 50 } |
| 51 |
| 52 TEST(BucketRateTrackerTest, TestRateTrackerBasics) { |
| 53 BucketRateTrackerForTest tracker; |
| 54 EXPECT_EQ(0U, tracker.ComputeCurrentRate(1000u)); |
| 55 |
| 56 // Add a sample. |
| 57 tracker.AddSamples(1234); |
| 58 // Advance the clock by 100 ms. |
| 59 tracker.AdvanceTime(100); |
| 60 EXPECT_EQ(12340U, tracker.ComputeCurrentRate(1000u)); |
| 61 |
| 62 // Repeat. |
| 63 tracker.AddSamples(1234); |
| 64 tracker.AdvanceTime(100); |
| 65 EXPECT_EQ(12340U, tracker.ComputeCurrentRate(1000u)); |
| 66 |
| 67 // Advance the clock by 800 ms, so we've elapsed a full second. |
| 68 // units_second should now be filled in properly. |
| 69 tracker.AdvanceTime(800); |
| 70 EXPECT_EQ(1234U * 2, tracker.ComputeCurrentRate(1000u)); |
| 71 |
| 72 // Poll the tracker again immediately. The reported rate should stay the same. |
| 73 EXPECT_EQ(1234U * 2, tracker.ComputeCurrentRate(1000u)); |
| 74 |
| 75 // Do nothing and advance by a second. We should drop down to zero. |
| 76 tracker.AdvanceTime(1000); |
| 77 EXPECT_EQ(0U, tracker.ComputeCurrentRate(1000u)); |
| 78 |
| 79 // Send a bunch of data at a constant rate for 5.5 "seconds". |
| 80 // We should report the rate properly. |
| 81 for (int i = 0; i < 5500; i += 100) { |
| 82 tracker.AddSamples(9876U); |
| 83 tracker.AdvanceTime(100); |
| 84 } |
| 85 EXPECT_EQ(9876U * 10, tracker.ComputeCurrentRate(1000u)); |
| 86 |
| 87 // Advance the clock by 500 ms. Since we sent nothing over this half-second, |
| 88 // the reported rate should be reduced by half. |
| 89 tracker.AdvanceTime(500); |
| 90 EXPECT_EQ(9876U * 5, tracker.ComputeCurrentRate(1000u)); |
| 91 } |
| 92 |
| 93 TEST(BucketRateTrackerTest, TestGetUnitSecondsAfterInitialValue) { |
| 94 BucketRateTrackerForTest tracker; |
| 95 tracker.AddSamples(1234); |
| 96 tracker.AdvanceTime(1000); |
| 97 EXPECT_EQ(1234u, tracker.ComputeCurrentRate(1000u)); |
| 98 } |
| 99 |
| 100 class IntervalRateTrackerForTest : public IntervalRateTracker { |
| 101 public: |
| 102 IntervalRateTrackerForTest() : IntervalRateTracker(15u), time_(0) {} |
| 103 virtual uint32 Time() const { return time_; } |
| 104 void AdvanceTime(uint32 delta) { time_ += delta; } |
| 105 |
| 106 private: |
| 107 uint32 time_; |
| 108 }; |
| 109 |
| 110 TEST(IntervalRateTrackerTest, Test30FPS) { |
| 111 IntervalRateTrackerForTest tracker; |
| 112 |
| 113 for (int i = 0; i < 30*30; ++i) { |
| 114 tracker.AddSamples(1); |
| 115 tracker.AdvanceTime(33); |
| 116 if (i % 3 == 0) { |
| 117 tracker.AdvanceTime(1); |
| 118 } |
| 119 } |
| 120 EXPECT_EQ(30u, tracker.ComputeCurrentRate(1000u)); |
| 121 } |
| 122 |
| 123 } // namespace rtc |
OLD | NEW |