OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 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 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
63 // the field trial string to "WebRTC-AdaptiveBweThreshold/Disabled/". | 63 // the field trial string to "WebRTC-AdaptiveBweThreshold/Disabled/". |
64 : in_experiment_(!AdaptiveThresholdExperimentIsDisabled()), | 64 : in_experiment_(!AdaptiveThresholdExperimentIsDisabled()), |
65 k_up_(0.0087), | 65 k_up_(0.0087), |
66 k_down_(0.039), | 66 k_down_(0.039), |
67 overusing_time_threshold_(100), | 67 overusing_time_threshold_(100), |
68 threshold_(12.5), | 68 threshold_(12.5), |
69 last_update_ms_(-1), | 69 last_update_ms_(-1), |
70 prev_offset_(0.0), | 70 prev_offset_(0.0), |
71 time_over_using_(-1), | 71 time_over_using_(-1), |
72 overuse_counter_(0), | 72 overuse_counter_(0), |
73 hypothesis_(kBwNormal) { | 73 hypothesis_(BandwidthUsage::kBwNormal) { |
74 if (!AdaptiveThresholdExperimentIsDisabled()) | 74 if (!AdaptiveThresholdExperimentIsDisabled()) |
75 InitializeExperiment(); | 75 InitializeExperiment(); |
76 } | 76 } |
77 | 77 |
78 OveruseDetector::~OveruseDetector() {} | 78 OveruseDetector::~OveruseDetector() {} |
79 | 79 |
80 BandwidthUsage OveruseDetector::State() const { | 80 BandwidthUsage OveruseDetector::State() const { |
81 return hypothesis_; | 81 return hypothesis_; |
82 } | 82 } |
83 | 83 |
84 BandwidthUsage OveruseDetector::Detect(double offset, | 84 BandwidthUsage OveruseDetector::Detect(double offset, |
85 double ts_delta, | 85 double ts_delta, |
86 int num_of_deltas, | 86 int num_of_deltas, |
87 int64_t now_ms) { | 87 int64_t now_ms) { |
88 if (num_of_deltas < 2) { | 88 if (num_of_deltas < 2) { |
89 return kBwNormal; | 89 return BandwidthUsage::kBwNormal; |
90 } | 90 } |
91 const double T = std::min(num_of_deltas, kMinNumDeltas) * offset; | 91 const double T = std::min(num_of_deltas, kMinNumDeltas) * offset; |
92 BWE_TEST_LOGGING_PLOT(1, "offset_ms#1", now_ms, offset); | 92 BWE_TEST_LOGGING_PLOT(1, "offset_ms#1", now_ms, offset); |
93 BWE_TEST_LOGGING_PLOT(1, "gamma_ms#1", now_ms, threshold_ / kMinNumDeltas); | 93 BWE_TEST_LOGGING_PLOT(1, "gamma_ms#1", now_ms, threshold_ / kMinNumDeltas); |
94 if (T > threshold_) { | 94 if (T > threshold_) { |
95 if (time_over_using_ == -1) { | 95 if (time_over_using_ == -1) { |
96 // Initialize the timer. Assume that we've been | 96 // Initialize the timer. Assume that we've been |
97 // over-using half of the time since the previous | 97 // over-using half of the time since the previous |
98 // sample. | 98 // sample. |
99 time_over_using_ = ts_delta / 2; | 99 time_over_using_ = ts_delta / 2; |
100 } else { | 100 } else { |
101 // Increment timer | 101 // Increment timer |
102 time_over_using_ += ts_delta; | 102 time_over_using_ += ts_delta; |
103 } | 103 } |
104 overuse_counter_++; | 104 overuse_counter_++; |
105 if (time_over_using_ > overusing_time_threshold_ && overuse_counter_ > 1) { | 105 if (time_over_using_ > overusing_time_threshold_ && overuse_counter_ > 1) { |
106 if (offset >= prev_offset_) { | 106 if (offset >= prev_offset_) { |
107 time_over_using_ = 0; | 107 time_over_using_ = 0; |
108 overuse_counter_ = 0; | 108 overuse_counter_ = 0; |
109 hypothesis_ = kBwOverusing; | 109 hypothesis_ = BandwidthUsage::kBwOverusing; |
110 } | 110 } |
111 } | 111 } |
112 } else if (T < -threshold_) { | 112 } else if (T < -threshold_) { |
113 time_over_using_ = -1; | 113 time_over_using_ = -1; |
114 overuse_counter_ = 0; | 114 overuse_counter_ = 0; |
115 hypothesis_ = kBwUnderusing; | 115 hypothesis_ = BandwidthUsage::kBwUnderusing; |
116 } else { | 116 } else { |
117 time_over_using_ = -1; | 117 time_over_using_ = -1; |
118 overuse_counter_ = 0; | 118 overuse_counter_ = 0; |
119 hypothesis_ = kBwNormal; | 119 hypothesis_ = BandwidthUsage::kBwNormal; |
120 } | 120 } |
121 prev_offset_ = offset; | 121 prev_offset_ = offset; |
122 | 122 |
123 UpdateThreshold(T, now_ms); | 123 UpdateThreshold(T, now_ms); |
124 | 124 |
125 return hypothesis_; | 125 return hypothesis_; |
126 } | 126 } |
127 | 127 |
128 void OveruseDetector::UpdateThreshold(double modified_offset, int64_t now_ms) { | 128 void OveruseDetector::UpdateThreshold(double modified_offset, int64_t now_ms) { |
129 if (!in_experiment_) | 129 if (!in_experiment_) |
(...skipping 26 matching lines...) Expand all Loading... |
156 RTC_DCHECK(in_experiment_); | 156 RTC_DCHECK(in_experiment_); |
157 double k_up = 0.0; | 157 double k_up = 0.0; |
158 double k_down = 0.0; | 158 double k_down = 0.0; |
159 overusing_time_threshold_ = kOverUsingTimeThreshold; | 159 overusing_time_threshold_ = kOverUsingTimeThreshold; |
160 if (ReadExperimentConstants(&k_up, &k_down)) { | 160 if (ReadExperimentConstants(&k_up, &k_down)) { |
161 k_up_ = k_up; | 161 k_up_ = k_up; |
162 k_down_ = k_down; | 162 k_down_ = k_down; |
163 } | 163 } |
164 } | 164 } |
165 } // namespace webrtc | 165 } // namespace webrtc |
OLD | NEW |