diff options
Diffstat (limited to 'third_party/libwebrtc/test/scenario/stats_collection.h')
-rw-r--r-- | third_party/libwebrtc/test/scenario/stats_collection.h | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/third_party/libwebrtc/test/scenario/stats_collection.h b/third_party/libwebrtc/test/scenario/stats_collection.h new file mode 100644 index 0000000000..1f5d8daea7 --- /dev/null +++ b/third_party/libwebrtc/test/scenario/stats_collection.h @@ -0,0 +1,110 @@ +/* + * 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 TEST_SCENARIO_STATS_COLLECTION_H_ +#define TEST_SCENARIO_STATS_COLLECTION_H_ + +#include <map> +#include <memory> + +#include "absl/types/optional.h" +#include "call/call.h" +#include "rtc_base/thread.h" +#include "test/logging/log_writer.h" +#include "test/scenario/performance_stats.h" + +namespace webrtc { +namespace test { + +struct VideoQualityAnalyzerConfig { + double psnr_coverage = 1; + rtc::Thread* thread = nullptr; +}; + +class VideoLayerAnalyzer { + public: + void HandleCapturedFrame(const VideoFramePair& sample); + void HandleRenderedFrame(const VideoFramePair& sample); + void HandleFramePair(VideoFramePair sample, + double psnr, + RtcEventLogOutput* writer); + VideoQualityStats stats_; + Timestamp last_capture_time_ = Timestamp::MinusInfinity(); + Timestamp last_render_time_ = Timestamp::MinusInfinity(); + Timestamp last_freeze_time_ = Timestamp::MinusInfinity(); + int skip_count_ = 0; +}; + +class VideoQualityAnalyzer { + public: + explicit VideoQualityAnalyzer( + VideoQualityAnalyzerConfig config = VideoQualityAnalyzerConfig(), + std::unique_ptr<RtcEventLogOutput> writer = nullptr); + ~VideoQualityAnalyzer(); + void HandleFramePair(VideoFramePair sample); + std::vector<VideoQualityStats> layer_stats() const; + VideoQualityStats& stats(); + void PrintHeaders(); + void PrintFrameInfo(const VideoFramePair& sample); + std::function<void(const VideoFramePair&)> Handler(); + + private: + void HandleFramePair(VideoFramePair sample, double psnr); + const VideoQualityAnalyzerConfig config_; + std::map<int, VideoLayerAnalyzer> layer_analyzers_; + const std::unique_ptr<RtcEventLogOutput> writer_; + absl::optional<VideoQualityStats> cached_; +}; + +class CallStatsCollector { + public: + void AddStats(Call::Stats sample); + CollectedCallStats& stats() { return stats_; } + + private: + CollectedCallStats stats_; +}; +class AudioReceiveStatsCollector { + public: + void AddStats(AudioReceiveStreamInterface::Stats sample); + CollectedAudioReceiveStats& stats() { return stats_; } + + private: + CollectedAudioReceiveStats stats_; +}; +class VideoSendStatsCollector { + public: + void AddStats(VideoSendStream::Stats sample, Timestamp at_time); + CollectedVideoSendStats& stats() { return stats_; } + + private: + CollectedVideoSendStats stats_; + Timestamp last_update_ = Timestamp::MinusInfinity(); + size_t last_fec_bytes_ = 0; +}; +class VideoReceiveStatsCollector { + public: + void AddStats(VideoReceiveStreamInterface::Stats sample); + CollectedVideoReceiveStats& stats() { return stats_; } + + private: + CollectedVideoReceiveStats stats_; +}; + +struct CallStatsCollectors { + CallStatsCollector call; + AudioReceiveStatsCollector audio_receive; + VideoSendStatsCollector video_send; + VideoReceiveStatsCollector video_receive; +}; + +} // namespace test +} // namespace webrtc + +#endif // TEST_SCENARIO_STATS_COLLECTION_H_ |