123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- /*
- * 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_PERFORMANCE_STATS_H_
- #define TEST_SCENARIO_PERFORMANCE_STATS_H_
- #include "api/units/data_rate.h"
- #include "api/units/time_delta.h"
- #include "api/units/timestamp.h"
- #include "api/video/video_frame_buffer.h"
- #include "rtc_base/numerics/event_rate_counter.h"
- #include "rtc_base/numerics/sample_stats.h"
- namespace webrtc {
- namespace test {
- struct VideoFramePair {
- rtc::scoped_refptr<VideoFrameBuffer> captured;
- rtc::scoped_refptr<VideoFrameBuffer> decoded;
- Timestamp capture_time = Timestamp::MinusInfinity();
- Timestamp decoded_time = Timestamp::PlusInfinity();
- Timestamp render_time = Timestamp::PlusInfinity();
- // A unique identifier for the spatial/temporal layer the decoded frame
- // belongs to. Note that this does not reflect the id as defined by the
- // underlying layer setup.
- int layer_id = 0;
- int capture_id = 0;
- int decode_id = 0;
- // Indicates the repeat count for the decoded frame. Meaning that the same
- // decoded frame has matched differend captured frames.
- int repeated = 0;
- };
- struct VideoFramesStats {
- int count = 0;
- SampleStats<double> pixels;
- SampleStats<double> resolution;
- EventRateCounter frames;
- void AddFrameInfo(const VideoFrameBuffer& frame, Timestamp at_time);
- void AddStats(const VideoFramesStats& other);
- };
- struct VideoQualityStats {
- int lost_count = 0;
- int freeze_count = 0;
- VideoFramesStats capture;
- VideoFramesStats render;
- // Time from frame was captured on device to time frame was delivered from
- // decoder.
- SampleStats<TimeDelta> capture_to_decoded_delay;
- // Time from frame was captured on device to time frame was displayed on
- // device.
- SampleStats<TimeDelta> end_to_end_delay;
- // PSNR for delivered frames. Note that this might go up for a worse
- // connection due to frame dropping.
- SampleStats<double> psnr;
- // PSNR for all frames, dropped or lost frames are compared to the last
- // successfully delivered frame
- SampleStats<double> psnr_with_freeze;
- // Frames skipped between two nearest.
- SampleStats<double> skipped_between_rendered;
- // In the next 2 metrics freeze is a pause that is longer, than maximum:
- // 1. 150ms
- // 2. 3 * average time between two sequential frames.
- // Item 1 will cover high fps video and is a duration, that is noticeable by
- // human eye. Item 2 will cover low fps video like screen sharing.
- SampleStats<TimeDelta> freeze_duration;
- // Mean time between one freeze end and next freeze start.
- SampleStats<TimeDelta> time_between_freezes;
- void AddStats(const VideoQualityStats& other);
- };
- struct CollectedCallStats {
- SampleStats<DataRate> target_rate;
- SampleStats<TimeDelta> pacer_delay;
- SampleStats<TimeDelta> round_trip_time;
- SampleStats<double> memory_usage;
- };
- struct CollectedAudioReceiveStats {
- SampleStats<double> expand_rate;
- SampleStats<double> accelerate_rate;
- SampleStats<TimeDelta> jitter_buffer;
- };
- struct CollectedVideoSendStats {
- SampleStats<double> encode_frame_rate;
- SampleStats<TimeDelta> encode_time;
- SampleStats<double> encode_usage;
- SampleStats<DataRate> media_bitrate;
- SampleStats<DataRate> fec_bitrate;
- };
- struct CollectedVideoReceiveStats {
- SampleStats<TimeDelta> decode_time;
- SampleStats<TimeDelta> decode_time_max;
- SampleStats<double> decode_pixels;
- SampleStats<double> resolution;
- };
- } // namespace test
- } // namespace webrtc
- #endif // TEST_SCENARIO_PERFORMANCE_STATS_H_
|