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