diff options
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_ |