OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 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 | 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 | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
11 #include "webrtc/test/gtest.h" | 11 #include "webrtc/test/gtest.h" |
12 #include "webrtc/video/report_block_stats.h" | 12 #include "webrtc/video/report_block_stats.h" |
13 | 13 |
14 namespace webrtc { | 14 namespace webrtc { |
15 | 15 |
16 class ReportBlockStatsTest : public ::testing::Test { | 16 class ReportBlockStatsTest : public ::testing::Test { |
17 protected: | 17 protected: |
18 ReportBlockStatsTest() : kSsrc1(0x12345), kSsrc2(0x23456) {} | 18 ReportBlockStatsTest() : kSsrc1(0x12345), kSsrc2(0x23456) {} |
19 | 19 |
20 void SetUp() override { | 20 void SetUp() override { |
21 // kSsrc1: block 1-3. | 21 // kSsrc1: block 1-3. |
22 block1_1_.cumulativeLost = 10; | 22 block1_1_.packets_lost = 10; |
23 block1_1_.fractionLost = 123; | 23 block1_1_.fraction_lost = 123; |
24 block1_1_.extendedHighSeqNum = 24000; | 24 block1_1_.extended_highest_sequence_number = 24000; |
25 block1_1_.jitter = 777; | 25 block1_1_.jitter = 777; |
26 block1_1_.sourceSSRC = kSsrc1; | 26 block1_1_.source_ssrc = kSsrc1; |
27 block1_2_.cumulativeLost = 15; | 27 block1_2_.packets_lost = 15; |
28 block1_2_.fractionLost = 0; | 28 block1_2_.fraction_lost = 0; |
29 block1_2_.extendedHighSeqNum = 24100; | 29 block1_2_.extended_highest_sequence_number = 24100; |
30 block1_2_.jitter = 222; | 30 block1_2_.jitter = 222; |
31 block1_2_.sourceSSRC = kSsrc1; | 31 block1_2_.source_ssrc = kSsrc1; |
32 block1_3_.cumulativeLost = 50; | 32 block1_3_.packets_lost = 50; |
33 block1_3_.fractionLost = 0; | 33 block1_3_.fraction_lost = 0; |
34 block1_3_.extendedHighSeqNum = 24200; | 34 block1_3_.extended_highest_sequence_number = 24200; |
35 block1_3_.jitter = 333; | 35 block1_3_.jitter = 333; |
36 block1_3_.sourceSSRC = kSsrc1; | 36 block1_3_.source_ssrc = kSsrc1; |
37 // kSsrc2: block 1,2. | 37 // kSsrc2: block 1,2. |
38 block2_1_.cumulativeLost = 111; | 38 block2_1_.packets_lost = 111; |
39 block2_1_.fractionLost = 222; | 39 block2_1_.fraction_lost = 222; |
40 block2_1_.extendedHighSeqNum = 8500; | 40 block2_1_.extended_highest_sequence_number = 8500; |
41 block2_1_.jitter = 555; | 41 block2_1_.jitter = 555; |
42 block2_1_.sourceSSRC = kSsrc2; | 42 block2_1_.source_ssrc = kSsrc2; |
43 block2_2_.cumulativeLost = 136; | 43 block2_2_.packets_lost = 136; |
44 block2_2_.fractionLost = 0; | 44 block2_2_.fraction_lost = 0; |
45 block2_2_.extendedHighSeqNum = 8800; | 45 block2_2_.extended_highest_sequence_number = 8800; |
46 block2_2_.jitter = 888; | 46 block2_2_.jitter = 888; |
47 block2_2_.sourceSSRC = kSsrc2; | 47 block2_2_.source_ssrc = kSsrc2; |
48 | 48 |
49 ssrc1block1_.push_back(block1_1_); | 49 ssrc1block1_.push_back(block1_1_); |
50 ssrc1block2_.push_back(block1_2_); | 50 ssrc1block2_.push_back(block1_2_); |
51 ssrc12block1_.push_back(block1_1_); | 51 ssrc12block1_.push_back(block1_1_); |
52 ssrc12block1_.push_back(block2_1_); | 52 ssrc12block1_.push_back(block2_1_); |
53 ssrc12block2_.push_back(block1_2_); | 53 ssrc12block2_.push_back(block1_2_); |
54 ssrc12block2_.push_back(block2_2_); | 54 ssrc12block2_.push_back(block2_2_); |
55 } | 55 } |
56 | 56 |
57 RtcpStatistics RtcpReportBlockToRtcpStatistics( | 57 RtcpStatistics RtcpReportBlockToRtcpStatistics( |
58 const RTCPReportBlock& stats) { | 58 const RTCPReportBlock& stats) { |
59 RtcpStatistics block; | 59 RtcpStatistics block; |
60 block.packets_lost = stats.cumulativeLost; | 60 block.packets_lost = stats.packets_lost; |
61 block.fraction_lost = stats.fractionLost; | 61 block.fraction_lost = stats.fraction_lost; |
62 block.extended_highest_sequence_number = stats.extendedHighSeqNum; | 62 block.extended_highest_sequence_number = |
| 63 stats.extended_highest_sequence_number; |
63 block.jitter = stats.jitter; | 64 block.jitter = stats.jitter; |
64 return block; | 65 return block; |
65 } | 66 } |
66 | 67 |
67 const uint32_t kSsrc1; | 68 const uint32_t kSsrc1; |
68 const uint32_t kSsrc2; | 69 const uint32_t kSsrc2; |
69 RTCPReportBlock block1_1_; | 70 RTCPReportBlock block1_1_; |
70 RTCPReportBlock block1_2_; | 71 RTCPReportBlock block1_2_; |
71 RTCPReportBlock block1_3_; | 72 RTCPReportBlock block1_3_; |
72 RTCPReportBlock block2_1_; | 73 RTCPReportBlock block2_1_; |
73 RTCPReportBlock block2_2_; | 74 RTCPReportBlock block2_2_; |
74 std::vector<RTCPReportBlock> ssrc1block1_; | 75 std::vector<RTCPReportBlock> ssrc1block1_; |
75 std::vector<RTCPReportBlock> ssrc1block2_; | 76 std::vector<RTCPReportBlock> ssrc1block2_; |
76 std::vector<RTCPReportBlock> ssrc12block1_; | 77 std::vector<RTCPReportBlock> ssrc12block1_; |
77 std::vector<RTCPReportBlock> ssrc12block2_; | 78 std::vector<RTCPReportBlock> ssrc12block2_; |
78 }; | 79 }; |
79 | 80 |
80 TEST_F(ReportBlockStatsTest, AggregateAndStore_NoSsrc) { | 81 TEST_F(ReportBlockStatsTest, AggregateAndStore_NoSsrc) { |
81 ReportBlockStats stats; | 82 ReportBlockStats stats; |
82 std::vector<RTCPReportBlock> empty; | 83 std::vector<RTCPReportBlock> empty; |
83 RTCPReportBlock aggregated = stats.AggregateAndStore(empty); | 84 RTCPReportBlock aggregated = stats.AggregateAndStore(empty); |
84 EXPECT_EQ(0U, aggregated.fractionLost); | 85 EXPECT_EQ(0U, aggregated.fraction_lost); |
85 EXPECT_EQ(0U, aggregated.cumulativeLost); | 86 EXPECT_EQ(0U, aggregated.packets_lost); |
86 EXPECT_EQ(0U, aggregated.jitter); | 87 EXPECT_EQ(0U, aggregated.jitter); |
87 EXPECT_EQ(0U, aggregated.extendedHighSeqNum); | 88 EXPECT_EQ(0U, aggregated.extended_highest_sequence_number); |
88 } | 89 } |
89 | 90 |
90 TEST_F(ReportBlockStatsTest, AggregateAndStore_OneSsrc) { | 91 TEST_F(ReportBlockStatsTest, AggregateAndStore_OneSsrc) { |
91 ReportBlockStats stats; | 92 ReportBlockStats stats; |
92 RTCPReportBlock aggregated = stats.AggregateAndStore(ssrc1block1_); | 93 RTCPReportBlock aggregated = stats.AggregateAndStore(ssrc1block1_); |
93 // One ssrc, no aggregation done. | 94 // One ssrc, no aggregation done. |
94 EXPECT_EQ(123U, aggregated.fractionLost); | 95 EXPECT_EQ(123U, aggregated.fraction_lost); |
95 EXPECT_EQ(10U, aggregated.cumulativeLost); | 96 EXPECT_EQ(10U, aggregated.packets_lost); |
96 EXPECT_EQ(777U, aggregated.jitter); | 97 EXPECT_EQ(777U, aggregated.jitter); |
97 EXPECT_EQ(24000U, aggregated.extendedHighSeqNum); | 98 EXPECT_EQ(24000U, aggregated.extended_highest_sequence_number); |
98 | 99 |
99 aggregated = stats.AggregateAndStore(ssrc1block2_); | 100 aggregated = stats.AggregateAndStore(ssrc1block2_); |
100 EXPECT_EQ(0U, aggregated.fractionLost); | 101 EXPECT_EQ(0U, aggregated.fraction_lost); |
101 EXPECT_EQ(15U, aggregated.cumulativeLost); | 102 EXPECT_EQ(15U, aggregated.packets_lost); |
102 EXPECT_EQ(222U, aggregated.jitter); | 103 EXPECT_EQ(222U, aggregated.jitter); |
103 EXPECT_EQ(24100U, aggregated.extendedHighSeqNum); | 104 EXPECT_EQ(24100U, aggregated.extended_highest_sequence_number); |
104 | 105 |
105 // fl: 100 * (15-10) / (24100-24000) = 5% | 106 // fl: 100 * (15-10) / (24100-24000) = 5% |
106 EXPECT_EQ(5, stats.FractionLostInPercent()); | 107 EXPECT_EQ(5, stats.FractionLostInPercent()); |
107 } | 108 } |
108 | 109 |
109 TEST_F(ReportBlockStatsTest, AggregateAndStore_TwoSsrcs) { | 110 TEST_F(ReportBlockStatsTest, AggregateAndStore_TwoSsrcs) { |
110 ReportBlockStats stats; | 111 ReportBlockStats stats; |
111 RTCPReportBlock aggregated = stats.AggregateAndStore(ssrc12block1_); | 112 RTCPReportBlock aggregated = stats.AggregateAndStore(ssrc12block1_); |
112 EXPECT_EQ(0U, aggregated.fractionLost); | 113 EXPECT_EQ(0U, aggregated.fraction_lost); |
113 EXPECT_EQ(10U + 111U, aggregated.cumulativeLost); | 114 EXPECT_EQ(10U + 111U, aggregated.packets_lost); |
114 EXPECT_EQ((777U + 555U) / 2, aggregated.jitter); | 115 EXPECT_EQ((777U + 555U) / 2, aggregated.jitter); |
115 EXPECT_EQ(0U, aggregated.extendedHighSeqNum); | 116 EXPECT_EQ(0U, aggregated.extended_highest_sequence_number); |
116 | 117 |
117 aggregated = stats.AggregateAndStore(ssrc12block2_); | 118 aggregated = stats.AggregateAndStore(ssrc12block2_); |
118 // fl: 255 * ((15-10) + (136-111)) / ((24100-24000) + (8800-8500)) = 19 | 119 // fl: 255 * ((15-10) + (136-111)) / ((24100-24000) + (8800-8500)) = 19 |
119 EXPECT_EQ(19U, aggregated.fractionLost); | 120 EXPECT_EQ(19U, aggregated.fraction_lost); |
120 EXPECT_EQ(15U + 136U, aggregated.cumulativeLost); | 121 EXPECT_EQ(15U + 136U, aggregated.packets_lost); |
121 EXPECT_EQ((222U + 888U) / 2, aggregated.jitter); | 122 EXPECT_EQ((222U + 888U) / 2, aggregated.jitter); |
122 EXPECT_EQ(0U, aggregated.extendedHighSeqNum); | 123 EXPECT_EQ(0U, aggregated.extended_highest_sequence_number); |
123 | 124 |
124 // fl: 100 * ((15-10) + (136-111)) / ((24100-24000) + (8800-8500)) = 7% | 125 // fl: 100 * ((15-10) + (136-111)) / ((24100-24000) + (8800-8500)) = 7% |
125 EXPECT_EQ(7, stats.FractionLostInPercent()); | 126 EXPECT_EQ(7, stats.FractionLostInPercent()); |
126 } | 127 } |
127 | 128 |
128 TEST_F(ReportBlockStatsTest, StoreAndGetFractionLost) { | 129 TEST_F(ReportBlockStatsTest, StoreAndGetFractionLost) { |
129 const uint32_t kRemoteSsrc = 1; | 130 const uint32_t kRemoteSsrc = 1; |
130 ReportBlockStats stats; | 131 ReportBlockStats stats; |
131 EXPECT_EQ(-1, stats.FractionLostInPercent()); | 132 EXPECT_EQ(-1, stats.FractionLostInPercent()); |
132 | 133 |
133 // First block. | 134 // First block. |
134 stats.Store(RtcpReportBlockToRtcpStatistics(block1_1_), kRemoteSsrc, kSsrc1); | 135 stats.Store(RtcpReportBlockToRtcpStatistics(block1_1_), kRemoteSsrc, kSsrc1); |
135 EXPECT_EQ(-1, stats.FractionLostInPercent()); | 136 EXPECT_EQ(-1, stats.FractionLostInPercent()); |
136 // fl: 100 * (15-10) / (24100-24000) = 5% | 137 // fl: 100 * (15-10) / (24100-24000) = 5% |
137 stats.Store(RtcpReportBlockToRtcpStatistics(block1_2_), kRemoteSsrc, kSsrc1); | 138 stats.Store(RtcpReportBlockToRtcpStatistics(block1_2_), kRemoteSsrc, kSsrc1); |
138 EXPECT_EQ(5, stats.FractionLostInPercent()); | 139 EXPECT_EQ(5, stats.FractionLostInPercent()); |
139 // fl: 100 * (50-10) / (24200-24000) = 20% | 140 // fl: 100 * (50-10) / (24200-24000) = 20% |
140 stats.Store(RtcpReportBlockToRtcpStatistics(block1_3_), kRemoteSsrc, kSsrc1); | 141 stats.Store(RtcpReportBlockToRtcpStatistics(block1_3_), kRemoteSsrc, kSsrc1); |
141 EXPECT_EQ(20, stats.FractionLostInPercent()); | 142 EXPECT_EQ(20, stats.FractionLostInPercent()); |
142 } | 143 } |
143 | 144 |
144 } // namespace webrtc | 145 } // namespace webrtc |
145 | 146 |
OLD | NEW |