[DVQA] Add detailed printout of when frame was dropped
Bug: b/196229820 Change-Id: I5ed463f1cc9694db7b9a0a0564a5b1784d6ba724 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/229381 Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org> Commit-Queue: Artem Titov <titovartem@webrtc.org> Cr-Commit-Position: refs/heads/master@{#34811}
This commit is contained in:

committed by
WebRTC LUCI CQ

parent
c68796e260
commit
34cc986b4e
@ -45,9 +45,28 @@ void LogFrameCounters(const std::string& name, const FrameCounters& counters) {
|
|||||||
RTC_LOG(INFO) << "[" << name << "] Dropped : " << counters.dropped;
|
RTC_LOG(INFO) << "[" << name << "] Dropped : " << counters.dropped;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
absl::string_view ToString(FrameDropPhase phase) {
|
||||||
|
switch (phase) {
|
||||||
|
case FrameDropPhase::kBeforeEncoder:
|
||||||
|
return "kBeforeEncoder";
|
||||||
|
case FrameDropPhase::kByEncoder:
|
||||||
|
return "kByEncoder";
|
||||||
|
case FrameDropPhase::kTransport:
|
||||||
|
return "kTransport";
|
||||||
|
case FrameDropPhase::kAfterDecoder:
|
||||||
|
return "kAfterDecoder";
|
||||||
|
case FrameDropPhase::kLastValue:
|
||||||
|
RTC_CHECK(false) << "FrameDropPhase::kLastValue mustn't be used";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void LogStreamInternalStats(const std::string& name,
|
void LogStreamInternalStats(const std::string& name,
|
||||||
const StreamStats& stats,
|
const StreamStats& stats,
|
||||||
Timestamp start_time) {
|
Timestamp start_time) {
|
||||||
|
for (const auto& entry : stats.dropped_by_phase) {
|
||||||
|
RTC_LOG(INFO) << "[" << name << "] Dropped at " << ToString(entry.first)
|
||||||
|
<< ": " << entry.second;
|
||||||
|
}
|
||||||
RTC_LOG(INFO) << "[" << name
|
RTC_LOG(INFO) << "[" << name
|
||||||
<< "] Dropped by encoder : " << stats.dropped_by_encoder;
|
<< "] Dropped by encoder : " << stats.dropped_by_encoder;
|
||||||
RTC_LOG(INFO) << "[" << name << "] Dropped before encoder : "
|
RTC_LOG(INFO) << "[" << name << "] Dropped before encoder : "
|
||||||
|
@ -405,6 +405,21 @@ void DefaultVideoQualityAnalyzerFramesComparator::ProcessComparison(
|
|||||||
stats->ssim.AddSample(StatsSample(ssim, frame_stats.received_time));
|
stats->ssim.AddSample(StatsSample(ssim, frame_stats.received_time));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Compute dropped phase for dropped frame
|
||||||
|
if (comparison.type == FrameComparisonType::kDroppedFrame) {
|
||||||
|
webrtc_pc_e2e::FrameDropPhase dropped_phase;
|
||||||
|
if (frame_stats.decode_end_time.IsFinite()) {
|
||||||
|
dropped_phase = webrtc_pc_e2e::FrameDropPhase::kAfterDecoder;
|
||||||
|
} else if (frame_stats.encoded_time.IsFinite()) {
|
||||||
|
dropped_phase = webrtc_pc_e2e::FrameDropPhase::kTransport;
|
||||||
|
} else if (frame_stats.pre_encode_time.IsFinite()) {
|
||||||
|
dropped_phase = webrtc_pc_e2e::FrameDropPhase::kByEncoder;
|
||||||
|
} else {
|
||||||
|
dropped_phase = webrtc_pc_e2e::FrameDropPhase::kBeforeEncoder;
|
||||||
|
}
|
||||||
|
stats->dropped_by_phase[dropped_phase]++;
|
||||||
|
}
|
||||||
|
|
||||||
if (frame_stats.encoded_time.IsFinite()) {
|
if (frame_stats.encoded_time.IsFinite()) {
|
||||||
stats->encode_time_ms.AddSample(StatsSample(
|
stats->encode_time_ms.AddSample(StatsSample(
|
||||||
(frame_stats.encoded_time - frame_stats.pre_encode_time).ms(),
|
(frame_stats.encoded_time - frame_stats.pre_encode_time).ms(),
|
||||||
|
@ -38,6 +38,14 @@ double RateCounter::GetEventsPerSecond() const {
|
|||||||
(event_last_time_ - event_first_time_).us() * kMicrosPerSecond;
|
(event_last_time_ - event_first_time_).us() * kMicrosPerSecond;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
StreamStats::StreamStats(Timestamp stream_started_time)
|
||||||
|
: stream_started_time(stream_started_time) {
|
||||||
|
for (int i = static_cast<int>(FrameDropPhase::kBeforeEncoder);
|
||||||
|
i < static_cast<int>(FrameDropPhase::kLastValue); ++i) {
|
||||||
|
dropped_by_phase.emplace(static_cast<FrameDropPhase>(i), 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
std::string StatsKey::ToString() const {
|
std::string StatsKey::ToString() const {
|
||||||
rtc::StringBuilder out;
|
rtc::StringBuilder out;
|
||||||
out << stream_label << "_" << sender << "_" << receiver;
|
out << stream_label << "_" << sender << "_" << receiver;
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
#ifndef TEST_PC_E2E_ANALYZER_VIDEO_DEFAULT_VIDEO_QUALITY_ANALYZER_SHARED_OBJECTS_H_
|
#ifndef TEST_PC_E2E_ANALYZER_VIDEO_DEFAULT_VIDEO_QUALITY_ANALYZER_SHARED_OBJECTS_H_
|
||||||
#define TEST_PC_E2E_ANALYZER_VIDEO_DEFAULT_VIDEO_QUALITY_ANALYZER_SHARED_OBJECTS_H_
|
#define TEST_PC_E2E_ANALYZER_VIDEO_DEFAULT_VIDEO_QUALITY_ANALYZER_SHARED_OBJECTS_H_
|
||||||
|
|
||||||
|
#include <map>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
@ -78,9 +79,19 @@ struct StreamCodecInfo {
|
|||||||
Timestamp switched_from_at = Timestamp::PlusInfinity();
|
Timestamp switched_from_at = Timestamp::PlusInfinity();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Represents phases where video frame can be dropped and such drop will be
|
||||||
|
// detected by analyzer.
|
||||||
|
enum class FrameDropPhase : int {
|
||||||
|
kBeforeEncoder,
|
||||||
|
kByEncoder,
|
||||||
|
kTransport,
|
||||||
|
kAfterDecoder,
|
||||||
|
// kLastValue must be the last value in this enumeration.
|
||||||
|
kLastValue
|
||||||
|
};
|
||||||
|
|
||||||
struct StreamStats {
|
struct StreamStats {
|
||||||
explicit StreamStats(Timestamp stream_started_time)
|
explicit StreamStats(Timestamp stream_started_time);
|
||||||
: stream_started_time(stream_started_time) {}
|
|
||||||
|
|
||||||
// The time when the first frame of this stream was captured.
|
// The time when the first frame of this stream was captured.
|
||||||
Timestamp stream_started_time;
|
Timestamp stream_started_time;
|
||||||
@ -117,6 +128,8 @@ struct StreamStats {
|
|||||||
int64_t total_encoded_images_payload = 0;
|
int64_t total_encoded_images_payload = 0;
|
||||||
int64_t dropped_by_encoder = 0;
|
int64_t dropped_by_encoder = 0;
|
||||||
int64_t dropped_before_encoder = 0;
|
int64_t dropped_before_encoder = 0;
|
||||||
|
// Counters on which phase how many frames were dropped.
|
||||||
|
std::map<FrameDropPhase, int64_t> dropped_by_phase;
|
||||||
|
|
||||||
// Vector of encoders used for this stream by sending client.
|
// Vector of encoders used for this stream by sending client.
|
||||||
std::vector<StreamCodecInfo> encoders;
|
std::vector<StreamCodecInfo> encoders;
|
||||||
|
Reference in New Issue
Block a user