| 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 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 28 // bps. Result is in milliseconds. | 28 // bps. Result is in milliseconds. |
| 29 return static_cast<int>(1000ll * static_cast<int64_t>(packet_size) * 8ll / | 29 return static_cast<int>(1000ll * static_cast<int64_t>(packet_size) * 8ll / |
| 30 bitrate_bps); | 30 bitrate_bps); |
| 31 } | 31 } |
| 32 } // namespace | 32 } // namespace |
| 33 | 33 |
| 34 BitrateProber::BitrateProber() | 34 BitrateProber::BitrateProber() |
| 35 : probing_state_(kDisabled), | 35 : probing_state_(kDisabled), |
| 36 packet_size_last_send_(0), | 36 packet_size_last_send_(0), |
| 37 time_last_send_ms_(-1), | 37 time_last_send_ms_(-1), |
| 38 cluster_id_(0) {} | 38 next_cluster_id_(0) {} |
| 39 | 39 |
| 40 void BitrateProber::SetEnabled(bool enable) { | 40 void BitrateProber::SetEnabled(bool enable) { |
| 41 if (enable) { | 41 if (enable) { |
| 42 if (probing_state_ == kDisabled) { | 42 if (probing_state_ == kDisabled) { |
| 43 probing_state_ = kAllowedToProbe; | 43 probing_state_ = kAllowedToProbe; |
| 44 LOG(LS_INFO) << "Initial bandwidth probing enabled"; | 44 LOG(LS_INFO) << "Initial bandwidth probing enabled"; |
| 45 } | 45 } |
| 46 } else { | 46 } else { |
| 47 probing_state_ = kDisabled; | 47 probing_state_ = kDisabled; |
| 48 LOG(LS_INFO) << "Initial bandwidth probing disabled"; | 48 LOG(LS_INFO) << "Initial bandwidth probing disabled"; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 60 // probing. | 60 // probing. |
| 61 if (packet_size < PacedSender::kMinProbePacketSize) | 61 if (packet_size < PacedSender::kMinProbePacketSize) |
| 62 return; | 62 return; |
| 63 if (probing_state_ != kAllowedToProbe) | 63 if (probing_state_ != kAllowedToProbe) |
| 64 return; | 64 return; |
| 65 // Max number of packets used for probing. | 65 // Max number of packets used for probing. |
| 66 const int kMaxNumProbes = 2; | 66 const int kMaxNumProbes = 2; |
| 67 const int kPacketsPerProbe = 5; | 67 const int kPacketsPerProbe = 5; |
| 68 const float kProbeBitrateMultipliers[kMaxNumProbes] = {3, 6}; | 68 const float kProbeBitrateMultipliers[kMaxNumProbes] = {3, 6}; |
| 69 std::stringstream bitrate_log; | 69 std::stringstream bitrate_log; |
| 70 bitrate_log << "Start probing for bandwidth, bitrates:"; | 70 bitrate_log << "Start probing for bandwidth, (bitrate:packets): "; |
| 71 for (int i = 0; i < kMaxNumProbes; ++i) { | 71 for (int i = 0; i < kMaxNumProbes; ++i) { |
| 72 ProbeCluster cluster; | 72 ProbeCluster cluster; |
| 73 // We need one extra to get 5 deltas for the first probe, therefore (i == 0) | 73 // We need one extra to get 5 deltas for the first probe, therefore (i == 0) |
| 74 cluster.max_probe_packets = kPacketsPerProbe + (i == 0 ? 1 : 0); | 74 cluster.max_probe_packets = kPacketsPerProbe + (i == 0 ? 1 : 0); |
| 75 cluster.probe_bitrate_bps = kProbeBitrateMultipliers[i] * bitrate_bps; | 75 cluster.probe_bitrate_bps = kProbeBitrateMultipliers[i] * bitrate_bps; |
| 76 cluster.id = cluster_id_++; | 76 cluster.id = next_cluster_id_++; |
| 77 | 77 |
| 78 bitrate_log << " " << cluster.probe_bitrate_bps; | 78 bitrate_log << "(" << cluster.probe_bitrate_bps << ":" |
| 79 bitrate_log << ", num packets: " << cluster.max_probe_packets; | 79 << cluster.max_probe_packets << ") "; |
| 80 | 80 |
| 81 clusters_.push(cluster); | 81 clusters_.push(cluster); |
| 82 } | 82 } |
| 83 LOG(LS_INFO) << bitrate_log.str().c_str(); | 83 LOG(LS_INFO) << bitrate_log.str().c_str(); |
| 84 // Set last send time to current time so TimeUntilNextProbe doesn't short | 84 // Set last send time to current time so TimeUntilNextProbe doesn't short |
| 85 // circuit due to inactivity. | 85 // circuit due to inactivity. |
| 86 time_last_send_ms_ = now_ms; | 86 time_last_send_ms_ = now_ms; |
| 87 probing_state_ = kProbing; | 87 probing_state_ = kProbing; |
| 88 } | 88 } |
| 89 | 89 |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 150 if (probing_state_ != kProbing) | 150 if (probing_state_ != kProbing) |
| 151 return; | 151 return; |
| 152 if (!clusters_.empty()) { | 152 if (!clusters_.empty()) { |
| 153 ProbeCluster* cluster = &clusters_.front(); | 153 ProbeCluster* cluster = &clusters_.front(); |
| 154 ++cluster->sent_probe_packets; | 154 ++cluster->sent_probe_packets; |
| 155 if (cluster->sent_probe_packets == cluster->max_probe_packets) | 155 if (cluster->sent_probe_packets == cluster->max_probe_packets) |
| 156 clusters_.pop(); | 156 clusters_.pop(); |
| 157 } | 157 } |
| 158 } | 158 } |
| 159 } // namespace webrtc | 159 } // namespace webrtc |
| OLD | NEW |