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

Side by Side Diff: webrtc/modules/pacing/interval_budget_unittest.cc

Issue 2965233002: Let alr dectector use a budged to detect underuse. (Closed)
Patch Set: Response to comments Created 3 years, 5 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 unified diff | Download patch
OLDNEW
(Empty)
1 /*
2 * Copyright (c) 2016 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/modules/pacing/interval_budget.h"
12
13 #include "webrtc/test/gtest.h"
14
15 namespace webrtc {
16
17 namespace {
18 constexpr int kWindowMs = 500;
19 constexpr int kBitrateKbps = 100;
20 constexpr bool kCanBuildUpUnderuse = true;
21 constexpr bool kCanNotBuildUpUnderuse = false;
22 size_t TimeToBytes(int bitrate_kbps, int time_ms) {
23 return static_cast<size_t>(bitrate_kbps * time_ms / 8);
24 }
25 }
26
27 TEST(IntervalBudgetTest, InitailState) {
28 IntervalBudget interval_budget(kBitrateKbps);
29 EXPECT_EQ(interval_budget.budget_level_percent(), 0);
30 EXPECT_EQ(interval_budget.bytes_remaining(), 0u);
31 }
32
33 TEST(IntervalBudgetTest, Underuse) {
34 IntervalBudget interval_budget(kBitrateKbps);
35 int delta_time_ms = 50;
36 interval_budget.IncreaseBudget(delta_time_ms);
37 EXPECT_EQ(interval_budget.budget_level_percent(), kWindowMs / delta_time_ms);
38 EXPECT_EQ(interval_budget.bytes_remaining(),
39 TimeToBytes(kBitrateKbps, delta_time_ms));
40 }
41
42 TEST(IntervalBudgetTest, DontUnderuseMoreThanMaxWindow) {
43 IntervalBudget interval_budget(kBitrateKbps);
44 int delta_time_ms = 1000;
45 interval_budget.IncreaseBudget(delta_time_ms);
46 EXPECT_EQ(interval_budget.budget_level_percent(), 100);
47 EXPECT_EQ(interval_budget.bytes_remaining(),
48 TimeToBytes(kBitrateKbps, kWindowMs));
49 }
50
51 TEST(IntervalBudgetTest, DontUnderuseMoreThanMaxWindowWhenChangeBitrate) {
52 IntervalBudget interval_budget(kBitrateKbps);
53 int delta_time_ms = kWindowMs / 2;
54 interval_budget.IncreaseBudget(delta_time_ms);
55 interval_budget.set_target_rate_kbps(kBitrateKbps / 10);
56 EXPECT_EQ(interval_budget.budget_level_percent(), 100);
57 EXPECT_EQ(interval_budget.bytes_remaining(),
58 TimeToBytes(kBitrateKbps / 10, kWindowMs));
59 }
60
61 TEST(IntervalBudgetTest, BalanceChangeOnBitrateChange) {
62 IntervalBudget interval_budget(kBitrateKbps);
63 int delta_time_ms = kWindowMs;
64 interval_budget.IncreaseBudget(delta_time_ms);
65 interval_budget.set_target_rate_kbps(kBitrateKbps * 2);
66 EXPECT_EQ(interval_budget.budget_level_percent(), 50);
67 EXPECT_EQ(interval_budget.bytes_remaining(),
68 TimeToBytes(kBitrateKbps, kWindowMs));
69 }
70
71 TEST(IntervalBudgetTest, Overuse) {
72 IntervalBudget interval_budget(kBitrateKbps);
73 int overuse_time_ms = 50;
74 int used_bytes = TimeToBytes(kBitrateKbps, overuse_time_ms);
75 interval_budget.UseBudget(used_bytes);
76 EXPECT_EQ(interval_budget.budget_level_percent(),
77 -kWindowMs / overuse_time_ms);
78 EXPECT_EQ(interval_budget.bytes_remaining(), 0u);
79 }
80
81 TEST(IntervalBudgetTest, DontOveruseMoreThanMaxWindow) {
82 IntervalBudget interval_budget(kBitrateKbps);
83 int overuse_time_ms = 1000;
84 int used_bytes = TimeToBytes(kBitrateKbps, overuse_time_ms);
85 interval_budget.UseBudget(used_bytes);
86 EXPECT_EQ(interval_budget.budget_level_percent(), -100);
87 EXPECT_EQ(interval_budget.bytes_remaining(), 0u);
88 }
89
90 TEST(IntervalBudgetTest, CanBuildUpUnderuseWhenConfigured) {
91 IntervalBudget interval_budget(kBitrateKbps, kCanBuildUpUnderuse);
92 int delta_time_ms = 50;
93 interval_budget.IncreaseBudget(delta_time_ms);
94 EXPECT_EQ(interval_budget.budget_level_percent(), kWindowMs / delta_time_ms);
95 EXPECT_EQ(interval_budget.bytes_remaining(),
96 TimeToBytes(kBitrateKbps, delta_time_ms));
97
98 interval_budget.IncreaseBudget(delta_time_ms);
99 EXPECT_EQ(interval_budget.budget_level_percent(),
100 2 * kWindowMs / delta_time_ms);
101 EXPECT_EQ(interval_budget.bytes_remaining(),
102 TimeToBytes(kBitrateKbps, 2 * delta_time_ms));
103 }
104
105 TEST(IntervalBudgetTest, CanNotBuildUpUnderuseWhenConfigured) {
106 IntervalBudget interval_budget(kBitrateKbps, kCanNotBuildUpUnderuse);
107 int delta_time_ms = 50;
108 interval_budget.IncreaseBudget(delta_time_ms);
109 EXPECT_EQ(interval_budget.budget_level_percent(), kWindowMs / delta_time_ms);
110 EXPECT_EQ(interval_budget.bytes_remaining(),
111 TimeToBytes(kBitrateKbps, delta_time_ms));
112
113 interval_budget.IncreaseBudget(delta_time_ms);
114 EXPECT_EQ(interval_budget.budget_level_percent(), kWindowMs / delta_time_ms);
115 EXPECT_EQ(interval_budget.bytes_remaining(),
116 TimeToBytes(kBitrateKbps, delta_time_ms));
117 }
118
119 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698