diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
commit | 36d22d82aa202bb199967e9512281e9a53db42c9 (patch) | |
tree | 105e8c98ddea1c1e4784a60a5a6410fa416be2de /third_party/libwebrtc/video/quality_limitation_reason_tracker.h | |
parent | Initial commit. (diff) | |
download | firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip |
Adding upstream version 115.7.0esr.upstream/115.7.0esr
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'third_party/libwebrtc/video/quality_limitation_reason_tracker.h')
-rw-r--r-- | third_party/libwebrtc/video/quality_limitation_reason_tracker.h | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/third_party/libwebrtc/video/quality_limitation_reason_tracker.h b/third_party/libwebrtc/video/quality_limitation_reason_tracker.h new file mode 100644 index 0000000000..15bc90773a --- /dev/null +++ b/third_party/libwebrtc/video/quality_limitation_reason_tracker.h @@ -0,0 +1,58 @@ +/* + * Copyright 2019 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. + */ + +#ifndef VIDEO_QUALITY_LIMITATION_REASON_TRACKER_H_ +#define VIDEO_QUALITY_LIMITATION_REASON_TRACKER_H_ + +#include <map> + +#include "common_video/include/quality_limitation_reason.h" +#include "system_wrappers/include/clock.h" + +namespace webrtc { + +// A tracker of quality limitation reasons. The quality limitation reason is the +// primary reason for limiting resolution and/or framerate (such as CPU or +// bandwidth limitations). The tracker keeps track of the current reason and the +// duration of time spent in each reason. See qualityLimitationReason[1], +// qualityLimitationDurations[2], and qualityLimitationResolutionChanges[3] in +// the webrtc-stats spec. +// Note that the specification defines the durations in seconds while the +// internal data structures defines it in milliseconds. +// [1] +// https://w3c.github.io/webrtc-stats/#dom-rtcoutboundrtpstreamstats-qualitylimitationreason +// [2] +// https://w3c.github.io/webrtc-stats/#dom-rtcoutboundrtpstreamstats-qualitylimitationdurations +// [3] +// https://w3c.github.io/webrtc-stats/#dom-rtcoutboundrtpstreamstats-qualitylimitationresolutionchanges +class QualityLimitationReasonTracker { + public: + // The caller is responsible for making sure `clock` outlives the tracker. + explicit QualityLimitationReasonTracker(Clock* clock); + + // The current reason defaults to QualityLimitationReason::kNone. + QualityLimitationReason current_reason() const; + void SetReason(QualityLimitationReason reason); + std::map<QualityLimitationReason, int64_t> DurationsMs() const; + + private: + Clock* const clock_; + QualityLimitationReason current_reason_; + int64_t current_reason_updated_timestamp_ms_; + // The total amount of time spent in each reason at time + // `current_reason_updated_timestamp_ms_`. To get the total amount duration + // so-far, including the time spent in `current_reason_` elapsed since the + // last time `current_reason_` was updated, see DurationsMs(). + std::map<QualityLimitationReason, int64_t> durations_ms_; +}; + +} // namespace webrtc + +#endif // VIDEO_QUALITY_LIMITATION_REASON_TRACKER_H_ |