| /* |
| * 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_ |