OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2013 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 |
(...skipping 25 matching lines...) Expand all Loading... |
36 timer_ -= kReportIntervalMs; | 36 timer_ -= kReportIntervalMs; |
37 DCHECK_GE(timer_, 0); | 37 DCHECK_GE(timer_, 0); |
38 } | 38 } |
39 | 39 |
40 void StatisticsCalculator::DelayedPacketOutagesPerMinuteCounter::LogToUma() | 40 void StatisticsCalculator::DelayedPacketOutagesPerMinuteCounter::LogToUma() |
41 const { | 41 const { |
42 RTC_HISTOGRAM_COUNTS_100("WebRTC.Audio.DelayedPacketOutageEventsPerMinute", | 42 RTC_HISTOGRAM_COUNTS_100("WebRTC.Audio.DelayedPacketOutageEventsPerMinute", |
43 counter_); | 43 counter_); |
44 } | 44 } |
45 | 45 |
| 46 void StatisticsCalculator::AverageExcessBufferDelayMs:: |
| 47 RegisterPacketWaitingTime(int time_ms) { |
| 48 sum_ += time_ms; |
| 49 ++num_packets_; |
| 50 } |
| 51 |
| 52 void StatisticsCalculator::AverageExcessBufferDelayMs::AdvanceClock( |
| 53 int step_ms) { |
| 54 timer_ += step_ms; |
| 55 if (timer_ < kReportIntervalMs) { |
| 56 return; |
| 57 } |
| 58 LogToUma(); |
| 59 sum_ = 0.0; |
| 60 num_packets_ = 0; |
| 61 timer_ -= kReportIntervalMs; |
| 62 DCHECK_GE(timer_, 0); |
| 63 } |
| 64 |
| 65 void StatisticsCalculator::AverageExcessBufferDelayMs::LogToUma() { |
| 66 if (num_packets_ > 0) { |
| 67 RTC_HISTOGRAM_COUNTS_1000("WebRTC.Audio.AverageExcessBufferDelayMs", |
| 68 static_cast<int>(sum_ / num_packets_)); |
| 69 } |
| 70 } |
| 71 |
46 StatisticsCalculator::StatisticsCalculator() | 72 StatisticsCalculator::StatisticsCalculator() |
47 : preemptive_samples_(0), | 73 : preemptive_samples_(0), |
48 accelerate_samples_(0), | 74 accelerate_samples_(0), |
49 added_zero_samples_(0), | 75 added_zero_samples_(0), |
50 expanded_speech_samples_(0), | 76 expanded_speech_samples_(0), |
51 expanded_noise_samples_(0), | 77 expanded_noise_samples_(0), |
52 discarded_packets_(0), | 78 discarded_packets_(0), |
53 lost_timestamps_(0), | 79 lost_timestamps_(0), |
54 timestamps_since_last_report_(0), | 80 timestamps_since_last_report_(0), |
55 len_waiting_times_(0), | 81 len_waiting_times_(0), |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
101 | 127 |
102 void StatisticsCalculator::PacketsDiscarded(int num_packets) { | 128 void StatisticsCalculator::PacketsDiscarded(int num_packets) { |
103 discarded_packets_ += num_packets; | 129 discarded_packets_ += num_packets; |
104 } | 130 } |
105 | 131 |
106 void StatisticsCalculator::LostSamples(int num_samples) { | 132 void StatisticsCalculator::LostSamples(int num_samples) { |
107 lost_timestamps_ += num_samples; | 133 lost_timestamps_ += num_samples; |
108 } | 134 } |
109 | 135 |
110 void StatisticsCalculator::IncreaseCounter(int num_samples, int fs_hz) { | 136 void StatisticsCalculator::IncreaseCounter(int num_samples, int fs_hz) { |
111 delayed_packet_outage_counter_.AdvanceClock( | 137 const int time_step_ms = rtc::CheckedDivExact(1000 * num_samples, fs_hz); |
112 rtc::CheckedDivExact(1000 * num_samples, fs_hz)); | 138 delayed_packet_outage_counter_.AdvanceClock(time_step_ms); |
| 139 excess_buffer_delay_.AdvanceClock(time_step_ms); |
113 timestamps_since_last_report_ += static_cast<uint32_t>(num_samples); | 140 timestamps_since_last_report_ += static_cast<uint32_t>(num_samples); |
114 if (timestamps_since_last_report_ > | 141 if (timestamps_since_last_report_ > |
115 static_cast<uint32_t>(fs_hz * kMaxReportPeriod)) { | 142 static_cast<uint32_t>(fs_hz * kMaxReportPeriod)) { |
116 lost_timestamps_ = 0; | 143 lost_timestamps_ = 0; |
117 timestamps_since_last_report_ = 0; | 144 timestamps_since_last_report_ = 0; |
118 discarded_packets_ = 0; | 145 discarded_packets_ = 0; |
119 } | 146 } |
120 } | 147 } |
121 | 148 |
122 void StatisticsCalculator::SecondaryDecodedSamples(int num_samples) { | 149 void StatisticsCalculator::SecondaryDecodedSamples(int num_samples) { |
123 secondary_decoded_samples_ += num_samples; | 150 secondary_decoded_samples_ += num_samples; |
124 } | 151 } |
125 | 152 |
126 void StatisticsCalculator::LogDelayedPacketOutageEvent(int outage_duration_ms) { | 153 void StatisticsCalculator::LogDelayedPacketOutageEvent(int outage_duration_ms) { |
127 RTC_HISTOGRAM_COUNTS("WebRTC.Audio.DelayedPacketOutageEventMs", | 154 RTC_HISTOGRAM_COUNTS("WebRTC.Audio.DelayedPacketOutageEventMs", |
128 outage_duration_ms, 1 /* min */, 2000 /* max */, | 155 outage_duration_ms, 1 /* min */, 2000 /* max */, |
129 100 /* bucket count */); | 156 100 /* bucket count */); |
130 delayed_packet_outage_counter_.RegisterEvent(); | 157 delayed_packet_outage_counter_.RegisterEvent(); |
131 } | 158 } |
132 | 159 |
133 void StatisticsCalculator::StoreWaitingTime(int waiting_time_ms) { | 160 void StatisticsCalculator::StoreWaitingTime(int waiting_time_ms) { |
| 161 excess_buffer_delay_.RegisterPacketWaitingTime(waiting_time_ms); |
134 assert(next_waiting_time_index_ < kLenWaitingTimes); | 162 assert(next_waiting_time_index_ < kLenWaitingTimes); |
135 waiting_times_[next_waiting_time_index_] = waiting_time_ms; | 163 waiting_times_[next_waiting_time_index_] = waiting_time_ms; |
136 next_waiting_time_index_++; | 164 next_waiting_time_index_++; |
137 if (next_waiting_time_index_ >= kLenWaitingTimes) { | 165 if (next_waiting_time_index_ >= kLenWaitingTimes) { |
138 next_waiting_time_index_ = 0; | 166 next_waiting_time_index_ = 0; |
139 } | 167 } |
140 if (len_waiting_times_ < kLenWaitingTimes) { | 168 if (len_waiting_times_ < kLenWaitingTimes) { |
141 len_waiting_times_++; | 169 len_waiting_times_++; |
142 } | 170 } |
143 } | 171 } |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
210 // Ratio must be smaller than 1 in Q14. | 238 // Ratio must be smaller than 1 in Q14. |
211 assert((numerator << 14) / denominator < (1 << 14)); | 239 assert((numerator << 14) / denominator < (1 << 14)); |
212 return static_cast<uint16_t>((numerator << 14) / denominator); | 240 return static_cast<uint16_t>((numerator << 14) / denominator); |
213 } else { | 241 } else { |
214 // Will not produce a ratio larger than 1, since this is probably an error. | 242 // Will not produce a ratio larger than 1, since this is probably an error. |
215 return 1 << 14; | 243 return 1 << 14; |
216 } | 244 } |
217 } | 245 } |
218 | 246 |
219 } // namespace webrtc | 247 } // namespace webrtc |
OLD | NEW |