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 |