Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(350)

Unified Diff: webrtc/modules/video_coding/codecs/test/stats.cc

Issue 3011923002: Clean up Stats class used in VideoProcessor tests. (Closed)
Patch Set: Fix VS compile. Created 3 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/modules/video_coding/codecs/test/stats.cc
diff --git a/webrtc/modules/video_coding/codecs/test/stats.cc b/webrtc/modules/video_coding/codecs/test/stats.cc
index 649c0d549a80735fbdbf689b7adcfcf58608a58e..b2950ae35da328412b3b290ce4a5bbc45bd53c23 100644
--- a/webrtc/modules/video_coding/codecs/test/stats.cc
+++ b/webrtc/modules/video_coding/codecs/test/stats.cc
@@ -12,88 +12,93 @@
#include <stdio.h>
-#include <algorithm> // min_element, max_element
+#include <algorithm>
#include "webrtc/rtc_base/checks.h"
#include "webrtc/rtc_base/format_macros.h"
namespace webrtc {
namespace test {
+
namespace {
+
bool LessForEncodeTime(const FrameStatistic& s1, const FrameStatistic& s2) {
- return s1.encode_time_in_us < s2.encode_time_in_us;
+ RTC_DCHECK_NE(s1.frame_number, s2.frame_number);
+ return s1.encode_time_us < s2.encode_time_us;
}
bool LessForDecodeTime(const FrameStatistic& s1, const FrameStatistic& s2) {
- return s1.decode_time_in_us < s2.decode_time_in_us;
+ RTC_DCHECK_NE(s1.frame_number, s2.frame_number);
+ return s1.decode_time_us < s2.decode_time_us;
}
bool LessForEncodedSize(const FrameStatistic& s1, const FrameStatistic& s2) {
- return s1.encoded_frame_length_in_bytes < s2.encoded_frame_length_in_bytes;
+ RTC_DCHECK_NE(s1.frame_number, s2.frame_number);
+ return s1.encoded_frame_size_bytes < s2.encoded_frame_size_bytes;
}
bool LessForBitRate(const FrameStatistic& s1, const FrameStatistic& s2) {
- return s1.bit_rate_in_kbps < s2.bit_rate_in_kbps;
+ RTC_DCHECK_NE(s1.frame_number, s2.frame_number);
+ return s1.bitrate_kbps < s2.bitrate_kbps;
}
+
} // namespace
-Stats::Stats() {}
+FrameStatistic* Stats::AddFrame() {
+ // We don't expect more frames than what can be stored in an int.
+ stats_.emplace_back(static_cast<int>(stats_.size()));
+ return &stats_.back();
+}
-Stats::~Stats() {}
+FrameStatistic* Stats::GetFrame(int frame_number) {
+ RTC_CHECK_GE(frame_number, 0);
+ RTC_CHECK_LT(frame_number, stats_.size());
+ return &stats_[frame_number];
+}
-FrameStatistic& Stats::NewFrame(int frame_number) {
- RTC_DCHECK_GE(frame_number, 0);
- FrameStatistic stat;
- stat.frame_number = frame_number;
- stats_.push_back(stat);
- return stats_[frame_number];
+size_t Stats::size() const {
+ return stats_.size();
}
-void Stats::PrintSummary() {
+void Stats::PrintSummary() const {
if (stats_.empty()) {
printf("No frame statistics have been logged yet.\n");
return;
}
// Calculate min, max, average and total encoding time.
- int total_encoding_time_in_us = 0;
- int total_decoding_time_in_us = 0;
- int total_qp = 0;
- int total_qp_count = 0;
- size_t total_encoded_frames_lengths = 0;
- size_t total_encoded_key_frames_lengths = 0;
- size_t total_encoded_nonkey_frames_lengths = 0;
- size_t num_keyframes = 0;
- size_t num_nonkeyframes = 0;
+ int total_encoding_time_us = 0;
+ int total_decoding_time_us = 0;
+ size_t total_encoded_frame_size_bytes = 0;
+ size_t total_encoded_key_frame_size_bytes = 0;
+ size_t total_encoded_delta_frame_size_bytes = 0;
+ size_t num_key_frames = 0;
+ size_t num_delta_frames = 0;
for (const FrameStatistic& stat : stats_) {
- total_encoding_time_in_us += stat.encode_time_in_us;
- total_decoding_time_in_us += stat.decode_time_in_us;
- total_encoded_frames_lengths += stat.encoded_frame_length_in_bytes;
+ total_encoding_time_us += stat.encode_time_us;
+ total_decoding_time_us += stat.decode_time_us;
+ total_encoded_frame_size_bytes += stat.encoded_frame_size_bytes;
if (stat.frame_type == webrtc::kVideoFrameKey) {
- total_encoded_key_frames_lengths += stat.encoded_frame_length_in_bytes;
- ++num_keyframes;
+ total_encoded_key_frame_size_bytes += stat.encoded_frame_size_bytes;
+ ++num_key_frames;
} else {
- total_encoded_nonkey_frames_lengths += stat.encoded_frame_length_in_bytes;
- ++num_nonkeyframes;
- }
- if (stat.qp >= 0) {
- total_qp += stat.qp;
- ++total_qp_count;
+ total_encoded_delta_frame_size_bytes += stat.encoded_frame_size_bytes;
+ ++num_delta_frames;
}
}
// Encoding stats.
printf("Encoding time:\n");
- FrameStatisticsIterator frame;
- frame = std::min_element(stats_.begin(), stats_.end(), LessForEncodeTime);
- printf(" Min : %7d us (frame %d)\n", frame->encode_time_in_us,
- frame->frame_number);
- frame = std::max_element(stats_.begin(), stats_.end(), LessForEncodeTime);
- printf(" Max : %7d us (frame %d)\n", frame->encode_time_in_us,
- frame->frame_number);
+ auto frame_it =
+ std::min_element(stats_.begin(), stats_.end(), LessForEncodeTime);
+ printf(" Min : %7d us (frame %d)\n", frame_it->encode_time_us,
+ frame_it->frame_number);
+ frame_it = std::max_element(stats_.begin(), stats_.end(), LessForEncodeTime);
+ printf(" Max : %7d us (frame %d)\n", frame_it->encode_time_us,
+ frame_it->frame_number);
printf(" Average : %7d us\n",
- static_cast<int>(total_encoding_time_in_us / stats_.size()));
+ static_cast<int>(total_encoding_time_us / stats_.size()));
// Decoding stats.
printf("Decoding time:\n");
@@ -107,57 +112,66 @@ void Stats::PrintSummary() {
if (decoded_frames.empty()) {
printf("No successfully decoded frames exist in this statistics.\n");
} else {
- frame = std::min_element(decoded_frames.begin(), decoded_frames.end(),
- LessForDecodeTime);
- printf(" Min : %7d us (frame %d)\n", frame->decode_time_in_us,
- frame->frame_number);
- frame = std::max_element(decoded_frames.begin(), decoded_frames.end(),
- LessForDecodeTime);
- printf(" Max : %7d us (frame %d)\n", frame->decode_time_in_us,
- frame->frame_number);
+ frame_it = std::min_element(decoded_frames.begin(), decoded_frames.end(),
+ LessForDecodeTime);
+ printf(" Min : %7d us (frame %d)\n", frame_it->decode_time_us,
+ frame_it->frame_number);
+ frame_it = std::max_element(decoded_frames.begin(), decoded_frames.end(),
+ LessForDecodeTime);
+ printf(" Max : %7d us (frame %d)\n", frame_it->decode_time_us,
+ frame_it->frame_number);
printf(" Average : %7d us\n",
- static_cast<int>(total_decoding_time_in_us / decoded_frames.size()));
+ static_cast<int>(total_decoding_time_us / decoded_frames.size()));
printf(" Failures: %d frames failed to decode.\n",
static_cast<int>(stats_.size() - decoded_frames.size()));
}
// Frame size stats.
printf("Frame sizes:\n");
- frame = std::min_element(stats_.begin(), stats_.end(), LessForEncodedSize);
+ frame_it = std::min_element(stats_.begin(), stats_.end(), LessForEncodedSize);
printf(" Min : %7" PRIuS " bytes (frame %d)\n",
- frame->encoded_frame_length_in_bytes, frame->frame_number);
- frame = std::max_element(stats_.begin(), stats_.end(), LessForEncodedSize);
+ frame_it->encoded_frame_size_bytes, frame_it->frame_number);
+ frame_it = std::max_element(stats_.begin(), stats_.end(), LessForEncodedSize);
printf(" Max : %7" PRIuS " bytes (frame %d)\n",
- frame->encoded_frame_length_in_bytes, frame->frame_number);
+ frame_it->encoded_frame_size_bytes, frame_it->frame_number);
printf(" Average : %7" PRIuS " bytes\n",
- total_encoded_frames_lengths / stats_.size());
- if (num_keyframes > 0) {
+ total_encoded_frame_size_bytes / stats_.size());
+ if (num_key_frames > 0) {
printf(" Average key frame size : %7" PRIuS " bytes (%" PRIuS
" keyframes)\n",
- total_encoded_key_frames_lengths / num_keyframes, num_keyframes);
+ total_encoded_key_frame_size_bytes / num_key_frames, num_key_frames);
}
- if (num_nonkeyframes > 0) {
+ if (num_delta_frames > 0) {
printf(" Average non-key frame size: %7" PRIuS " bytes (%" PRIuS
" frames)\n",
- total_encoded_nonkey_frames_lengths / num_nonkeyframes,
- num_nonkeyframes);
+ total_encoded_delta_frame_size_bytes / num_delta_frames,
+ num_delta_frames);
}
// Bitrate stats.
printf("Bitrates:\n");
- frame = std::min_element(stats_.begin(), stats_.end(), LessForBitRate);
- printf(" Min bitrate: %7d kbps (frame %d)\n", frame->bit_rate_in_kbps,
- frame->frame_number);
- frame = std::max_element(stats_.begin(), stats_.end(), LessForBitRate);
- printf(" Max bitrate: %7d kbps (frame %d)\n", frame->bit_rate_in_kbps,
- frame->frame_number);
+ frame_it = std::min_element(stats_.begin(), stats_.end(), LessForBitRate);
+ printf(" Min bitrate: %7d kbps (frame %d)\n", frame_it->bitrate_kbps,
+ frame_it->frame_number);
+ frame_it = std::max_element(stats_.begin(), stats_.end(), LessForBitRate);
+ printf(" Max bitrate: %7d kbps (frame %d)\n", frame_it->bitrate_kbps,
+ frame_it->frame_number);
printf("\n");
- printf("Total encoding time : %7d ms.\n", total_encoding_time_in_us / 1000);
- printf("Total decoding time : %7d ms.\n", total_decoding_time_in_us / 1000);
+ printf("Total encoding time : %7d ms.\n", total_encoding_time_us / 1000);
+ printf("Total decoding time : %7d ms.\n", total_decoding_time_us / 1000);
printf("Total processing time: %7d ms.\n",
- (total_encoding_time_in_us + total_decoding_time_in_us) / 1000);
+ (total_encoding_time_us + total_decoding_time_us) / 1000);
+ // QP stats.
+ int total_qp = 0;
+ int total_qp_count = 0;
+ for (const FrameStatistic& stat : stats_) {
+ if (stat.qp >= 0) {
+ total_qp += stat.qp;
+ ++total_qp_count;
+ }
+ }
int avg_qp = (total_qp_count > 0) ? (total_qp / total_qp_count) : -1;
printf("Average QP: %d\n", avg_qp);
}
« no previous file with comments | « webrtc/modules/video_coding/codecs/test/stats.h ('k') | webrtc/modules/video_coding/codecs/test/stats_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698