/* * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree.
*/
namespace webrtc { namespace { // Packet with a larger delay are removed and excluded from the delay stats. // Set to larger than max histogram delay which is 10 seconds.
constexpr TimeDelta kMaxSentPacketDelay = TimeDelta::Seconds(11);
constexpr size_t kMaxPacketMapSize = 2000;
// Limit for the maximum number of streams to calculate stats for.
constexpr size_t kMaxSsrcMapSize = 50;
constexpr int kMinRequiredPeriodicSamples = 5;
} // namespace
void SendDelayStats::OnSendPacket(uint16_t packet_id,
Timestamp capture_time,
uint32_t ssrc) { // Packet sent to transport.
MutexLock lock(&mutex_); auto it = send_delay_counters_.find(ssrc); if (it == send_delay_counters_.end()) return;
Timestamp now = clock_->CurrentTime();
RemoveOld(now);
if (packets_.size() > kMaxPacketMapSize) {
++num_skipped_packets_; return;
} // `send_delay_counters_` is an std::map - adding new entries doesn't // invalidate existent iterators, and it has pointer stability for values. // Entries are never remove from the `send_delay_counters_`. // Thus memorizing pointer to the AvgCounter is safe.
packets_.emplace(packet_id, Packet{.send_delay = &it->second,
.capture_time = capture_time,
.send_time = now});
}
MutexLock lock(&mutex_); auto it = packets_.find(packet_id); if (it == packets_.end()) returnfalse;
// TODO(asapersson): Remove SendSideDelayUpdated(), use capture -> sent. // Elapsed time from send (to transport) -> sent (leaving socket).
TimeDelta diff = time - it->second.send_time;
it->second.send_delay->Add(diff.ms());
packets_.erase(it); returntrue;
}
void SendDelayStats::RemoveOld(Timestamp now) { while (!packets_.empty()) { auto it = packets_.begin(); if (now - it->second.capture_time < kMaxSentPacketDelay) break;
packets_.erase(it);
++num_old_packets_;
}
}
} // namespace webrtc
Messung V0.5
¤ Dauer der Verarbeitung: 0.9 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.