Revert "Adds more performance stats collection to scenario tests."
This reverts commit 63b0b2cf307b47bae3c10b295ece9a5f6d9bd7a4.
Reason for revert: ScenarioAnalyzerTest.* are broken at HEAD.
Original change's description:
> Adds more performance stats collection to scenario tests.
>
> Bug: webrtc:10365
> Change-Id: I66dce6ff21242c30af674f89fc9fd19172d4a3af
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/131948
> Commit-Queue: Sebastian Jansson <srte@webrtc.org>
> Reviewed-by: Rasmus Brandt <brandtr@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#27585}
TBR=brandtr@webrtc.org,srte@webrtc.org
Change-Id: Idb60431dfd859c4328c5c81d0570948463ec3262
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: webrtc:10365
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/132709
Reviewed-by: Artem Titov <titovartem@webrtc.org>
Commit-Queue: Artem Titov <titovartem@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#27587}
diff --git a/test/scenario/BUILD.gn b/test/scenario/BUILD.gn
index 1918a2b..aafafa5 100644
--- a/test/scenario/BUILD.gn
+++ b/test/scenario/BUILD.gn
@@ -59,7 +59,6 @@
"hardware_codecs.h",
"network_node.cc",
"network_node.h",
- "performance_stats.cc",
"performance_stats.h",
"scenario.cc",
"scenario.h",
@@ -129,7 +128,6 @@
"../../rtc_base:checks",
"../../rtc_base:rtc_base_approved",
"../../rtc_base:rtc_base_tests_utils",
- "../../rtc_base:rtc_numerics",
"../../rtc_base:rtc_task_queue",
"../../rtc_base:safe_minmax",
"../../rtc_base:task_queue_for_test",
diff --git a/test/scenario/performance_stats.cc b/test/scenario/performance_stats.cc
deleted file mode 100644
index 3ff66cd..0000000
--- a/test/scenario/performance_stats.cc
+++ /dev/null
@@ -1,193 +0,0 @@
-/*
- * 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.
- */
-#include "test/scenario/performance_stats.h"
-
-#include <algorithm>
-
-namespace webrtc {
-namespace test {
-void EventRateCounter::AddEvent(Timestamp event_time) {
- if (first_time_.IsInfinite()) {
- first_time_ = event_time;
- } else {
- RTC_DCHECK(event_time >= last_time_);
- interval_.AddSample(event_time - last_time_);
- }
- last_time_ = event_time;
- event_count_++;
-}
-
-void EventRateCounter::AddEvents(EventRateCounter other) {
- first_time_ = std::min(first_time_, other.first_time_);
- last_time_ = std::max(last_time_, other.last_time_);
- event_count_ += other.event_count_;
- interval_.AddSamples(other.interval_);
-}
-
-bool EventRateCounter::IsEmpty() const {
- return first_time_ == last_time_;
-}
-
-double EventRateCounter::Rate() const {
- if (event_count_ == 0)
- return 0;
- if (event_count_ == 1)
- return NAN;
- return (event_count_ - 1) / (last_time_ - first_time_).seconds<double>();
-}
-
-double SampleStats<double>::Max() {
- if (IsEmpty())
- return INFINITY;
- return GetMax();
-}
-
-double SampleStats<double>::Mean() {
- if (IsEmpty())
- return 0;
- return GetAverage();
-}
-
-double SampleStats<double>::Median() {
- return Quantile(0.5);
-}
-
-double SampleStats<double>::Quantile(double quantile) {
- if (IsEmpty())
- return 0;
- return GetPercentile(quantile);
-}
-
-double SampleStats<double>::Min() {
- if (IsEmpty())
- return -INFINITY;
- return GetMin();
-}
-
-double SampleStats<double>::Variance() {
- if (IsEmpty())
- return 0;
- return GetVariance();
-}
-
-double SampleStats<double>::StandardDeviation() {
- return sqrt(Variance());
-}
-
-void SampleStats<TimeDelta>::AddSample(TimeDelta delta) {
- RTC_DCHECK(delta.IsFinite());
- stats_.AddSample(delta.seconds<double>());
-}
-
-void SampleStats<TimeDelta>::AddSampleMs(double delta_ms) {
- AddSample(TimeDelta::ms(delta_ms));
-}
-void SampleStats<TimeDelta>::AddSamples(const SampleStats<TimeDelta>& other) {
- stats_.AddSamples(other.stats_);
-}
-
-TimeDelta SampleStats<TimeDelta>::Max() {
- return TimeDelta::seconds(stats_.Max());
-}
-
-TimeDelta SampleStats<TimeDelta>::Mean() {
- return TimeDelta::seconds(stats_.Mean());
-}
-
-TimeDelta SampleStats<TimeDelta>::Median() {
- return Quantile(0.5);
-}
-
-TimeDelta SampleStats<TimeDelta>::Quantile(double quantile) {
- return TimeDelta::seconds(stats_.Quantile(quantile));
-}
-
-TimeDelta SampleStats<TimeDelta>::Min() {
- return TimeDelta::seconds(stats_.Min());
-}
-
-TimeDelta SampleStats<TimeDelta>::Variance() {
- return TimeDelta::seconds(stats_.Variance());
-}
-
-TimeDelta SampleStats<TimeDelta>::StandardDeviation() {
- return TimeDelta::seconds(stats_.StandardDeviation());
-}
-
-void SampleStats<DataRate>::AddSample(DataRate sample) {
- stats_.AddSample(sample.bps<double>());
-}
-
-void SampleStats<DataRate>::AddSampleBps(double rate_bps) {
- stats_.AddSample(rate_bps);
-}
-
-void SampleStats<DataRate>::AddSamples(const SampleStats<DataRate>& other) {
- stats_.AddSamples(other.stats_);
-}
-
-DataRate SampleStats<DataRate>::Max() {
- return DataRate::bps(stats_.Max());
-}
-
-DataRate SampleStats<DataRate>::Mean() {
- return DataRate::bps(stats_.Mean());
-}
-
-DataRate SampleStats<DataRate>::Median() {
- return Quantile(0.5);
-}
-
-DataRate SampleStats<DataRate>::Quantile(double quantile) {
- return DataRate::bps(stats_.Quantile(quantile));
-}
-
-DataRate SampleStats<DataRate>::Min() {
- return DataRate::bps(stats_.Min());
-}
-
-DataRate SampleStats<DataRate>::Variance() {
- return DataRate::bps(stats_.Variance());
-}
-
-DataRate SampleStats<DataRate>::StandardDeviation() {
- return DataRate::bps(stats_.StandardDeviation());
-}
-
-void VideoFramesStats::AddFrameInfo(const VideoFrameBuffer& frame,
- Timestamp at_time) {
- ++count;
- RTC_DCHECK(at_time.IsFinite());
- pixels.AddSample(frame.width() * frame.height());
- resolution.AddSample(std::max(frame.width(), frame.height()));
- frames.AddEvent(at_time);
-}
-
-void VideoFramesStats::AddStats(const VideoFramesStats& other) {
- count += other.count;
- pixels.AddSamples(other.pixels);
- resolution.AddSamples(other.resolution);
- frames.AddEvents(other.frames);
-}
-
-void VideoQualityStats::AddStats(const VideoQualityStats& other) {
- capture.AddStats(other.capture);
- render.AddStats(other.render);
- lost_count += other.lost_count;
- freeze_count += other.freeze_count;
- end_to_end_delay.AddSamples(other.end_to_end_delay);
- psnr.AddSamples(other.psnr);
- skipped_between_rendered.AddSamples(other.skipped_between_rendered);
- freeze_duration.AddSamples(other.freeze_duration);
- time_between_freezes.AddSamples(other.time_between_freezes);
-}
-
-} // namespace test
-} // namespace webrtc
diff --git a/test/scenario/performance_stats.h b/test/scenario/performance_stats.h
index 1979876..e58dab3 100644
--- a/test/scenario/performance_stats.h
+++ b/test/scenario/performance_stats.h
@@ -14,7 +14,7 @@
#include "api/units/time_delta.h"
#include "api/units/timestamp.h"
#include "api/video/video_frame_buffer.h"
-#include "rtc_base/numerics/samples_stats_counter.h"
+#include "test/statistics.h"
namespace webrtc {
namespace test {
@@ -35,125 +35,13 @@
int repeated = 0;
};
-template <typename T>
-class SampleStats;
-
-template <>
-class SampleStats<double> : public SamplesStatsCounter {
- public:
- double Max();
- double Mean();
- double Median();
- double Quantile(double quantile);
- double Min();
- double Variance();
- double StandardDeviation();
-};
-
-template <>
-class SampleStats<TimeDelta> {
- public:
- void AddSample(TimeDelta delta);
- void AddSampleMs(double delta_ms);
- void AddSamples(const SampleStats<TimeDelta>& other);
- TimeDelta Max();
- TimeDelta Mean();
- TimeDelta Median();
- TimeDelta Quantile(double quantile);
- TimeDelta Min();
- TimeDelta Variance();
- TimeDelta StandardDeviation();
-
- private:
- SampleStats<double> stats_;
-};
-
-template <>
-class SampleStats<DataRate> {
- public:
- void AddSample(DataRate rate);
- void AddSampleBps(double rate_bps);
- void AddSamples(const SampleStats<DataRate>& other);
- DataRate Max();
- DataRate Mean();
- DataRate Median();
- DataRate Quantile(double quantile);
- DataRate Min();
- DataRate Variance();
- DataRate StandardDeviation();
-
- private:
- SampleStats<double> stats_;
-};
-
-class EventRateCounter {
- public:
- void AddEvent(Timestamp event_time);
- void AddEvents(EventRateCounter other);
- bool IsEmpty() const;
- double Rate() const;
- SampleStats<TimeDelta>& interval() { return interval_; }
-
- private:
- Timestamp first_time_ = Timestamp::PlusInfinity();
- Timestamp last_time_ = Timestamp::MinusInfinity();
- int64_t event_count_ = 0;
- SampleStats<TimeDelta> interval_;
-};
-
-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 captures_count = 0;
+ int valid_count = 0;
int lost_count = 0;
- int freeze_count = 0;
- VideoFramesStats capture;
- VideoFramesStats render;
- // Time from frame was captured on device to time frame was displayed on
- // device.
- SampleStats<TimeDelta> end_to_end_delay;
- SampleStats<double> psnr;
- // 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<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;
+ Statistics end_to_end_seconds;
+ Statistics frame_size;
+ Statistics psnr;
};
} // namespace test
diff --git a/test/scenario/stats_collection.cc b/test/scenario/stats_collection.cc
index 104c824..77b2ae0 100644
--- a/test/scenario/stats_collection.cc
+++ b/test/scenario/stats_collection.cc
@@ -9,8 +9,10 @@
*/
#include "test/scenario/stats_collection.h"
+
+#include <utility>
+
#include "common_video/libyuv/include/webrtc_libyuv.h"
-#include "rtc_base/memory_usage.h"
namespace webrtc {
namespace test {
@@ -37,47 +39,20 @@
}
void VideoQualityAnalyzer::HandleFramePair(VideoFramePair sample) {
- layer_analyzers_[sample.layer_id].HandleFramePair(sample, writer_.get());
- cached_.reset();
-}
-
-std::vector<VideoQualityStats> VideoQualityAnalyzer::layer_stats() const {
- std::vector<VideoQualityStats> res;
- for (auto& layer : layer_analyzers_)
- res.push_back(layer.second.stats_);
- return res;
-}
-
-VideoQualityStats& VideoQualityAnalyzer::stats() {
- if (!cached_) {
- cached_ = VideoQualityStats();
- for (auto& layer : layer_analyzers_)
- cached_->AddStats(layer.second.stats_);
- }
- return *cached_;
-}
-
-void VideoLayerAnalyzer::HandleFramePair(VideoFramePair sample,
- RtcEventLogOutput* writer) {
double psnr = NAN;
RTC_CHECK(sample.captured);
- HandleCapturedFrame(sample);
+ ++stats_.captures_count;
if (!sample.decoded) {
++stats_.lost_count;
- ++skip_count_;
} else {
psnr = I420PSNR(*sample.captured->ToI420(), *sample.decoded->ToI420());
- stats_.end_to_end_delay.AddSample(sample.render_time - sample.capture_time);
+ ++stats_.valid_count;
+ stats_.end_to_end_seconds.AddSample(
+ (sample.render_time - sample.capture_time).seconds<double>());
stats_.psnr.AddSample(psnr);
- if (sample.repeated) {
- ++stats_.freeze_count;
- ++skip_count_;
- } else {
- HandleRenderedFrame(sample);
- }
}
- if (writer) {
- LogWriteFormat(writer, "%.3f %.3f %.3f %i %i %i %i %.3f\n",
+ if (writer_) {
+ LogWriteFormat(writer_.get(), "%.3f %.3f %.3f %i %i %i %i %.3f\n",
sample.capture_time.seconds<double>(),
sample.render_time.seconds<double>(),
sample.captured->width(), sample.captured->height(),
@@ -85,78 +60,9 @@
}
}
-void VideoLayerAnalyzer::HandleCapturedFrame(const VideoFramePair& sample) {
- stats_.capture.AddFrameInfo(*sample.captured, sample.capture_time);
- if (last_freeze_time_.IsInfinite())
- last_freeze_time_ = sample.capture_time;
+VideoQualityStats VideoQualityAnalyzer::stats() const {
+ return stats_;
}
-void VideoLayerAnalyzer::HandleRenderedFrame(const VideoFramePair& sample) {
- stats_.render.AddFrameInfo(*sample.decoded, sample.render_time);
- stats_.skipped_between_rendered.AddSample(skip_count_);
- skip_count_ = 0;
-
- if (last_render_time_.IsFinite()) {
- RTC_DCHECK(sample.render_time.IsFinite());
- TimeDelta render_interval = sample.render_time - last_render_time_;
- TimeDelta mean_interval = stats_.render.frames.interval().Mean();
- if (render_interval > TimeDelta::ms(150) + mean_interval ||
- render_interval > 3 * mean_interval) {
- stats_.freeze_duration.AddSample(render_interval);
- stats_.time_between_freezes.AddSample(last_render_time_ -
- last_freeze_time_);
- last_freeze_time_ = sample.render_time;
- }
- }
- last_render_time_ = sample.render_time;
-}
-
-void CallStatsCollector::AddStats(Call::Stats sample) {
- stats_.target_rate.AddSampleBps(sample.send_bandwidth_bps);
- stats_.memory_usage.AddSample(rtc::GetProcessResidentSizeBytes());
-}
-
-void AudioReceiveStatsCollector::AddStats(AudioReceiveStream::Stats sample) {
- stats_.expand_rate.AddSample(sample.expand_rate);
- stats_.accelerate_rate.AddSample(sample.accelerate_rate);
- stats_.jitter_buffer.AddSampleMs(sample.jitter_buffer_ms);
-}
-
-void VideoSendStatsCollector::AddStats(VideoSendStream::Stats sample,
- Timestamp at_time) {
- // It's not certain that we yet have estimates for any of these stats.
- // Check that they are positive before mixing them in.
- if (sample.encode_frame_rate <= 0)
- return;
-
- stats_.encode_frame_rate.AddSample(sample.encode_frame_rate);
- stats_.encode_time.AddSampleMs(sample.avg_encode_time_ms);
- stats_.encode_usage.AddSample(sample.encode_usage_percent / 100.0);
- stats_.media_bitrate.AddSampleBps(sample.media_bitrate_bps);
-
- size_t fec_bytes = 0;
- for (const auto& kv : sample.substreams) {
- fec_bytes += kv.second.rtp_stats.fec.payload_bytes +
- kv.second.rtp_stats.fec.padding_bytes;
- }
- if (last_update_.IsFinite()) {
- auto fec_delta = DataSize::bytes(fec_bytes - last_fec_bytes_);
- auto time_delta = at_time - last_update_;
- stats_.fec_bitrate.AddSample(fec_delta / time_delta);
- }
- last_fec_bytes_ = fec_bytes;
- last_update_ = at_time;
-}
-
-void VideoReceiveStatsCollector::AddStats(VideoReceiveStream::Stats sample) {
- if (sample.decode_ms > 0)
- stats_.decode_time.AddSampleMs(sample.decode_ms);
- if (sample.max_decode_ms > 0)
- stats_.decode_time_max.AddSampleMs(sample.max_decode_ms);
- if (sample.width > 0 && sample.height > 0) {
- stats_.decode_pixels.AddSample(sample.width * sample.height);
- stats_.resolution.AddSample(sample.height);
- }
-}
} // namespace test
} // namespace webrtc
diff --git a/test/scenario/stats_collection.h b/test/scenario/stats_collection.h
index 0b8b4a3..d1b46e4 100644
--- a/test/scenario/stats_collection.h
+++ b/test/scenario/stats_collection.h
@@ -10,11 +10,8 @@
#ifndef TEST_SCENARIO_STATS_COLLECTION_H_
#define TEST_SCENARIO_STATS_COLLECTION_H_
-#include <map>
#include <memory>
-#include "absl/types/optional.h"
-#include "call/call.h"
#include "test/logging/log_writer.h"
#include "test/scenario/performance_stats.h"
@@ -25,18 +22,6 @@
double psnr_coverage = 1;
};
-class VideoLayerAnalyzer {
- public:
- void HandleCapturedFrame(const VideoFramePair& sample);
- void HandleRenderedFrame(const VideoFramePair& sample);
- void HandleFramePair(VideoFramePair sample, RtcEventLogOutput* writer);
- VideoQualityStats stats_;
- Timestamp last_capture_time_ = Timestamp::MinusInfinity();
- Timestamp last_render_time_ = Timestamp::MinusInfinity();
- Timestamp last_freeze_time_ = Timestamp::MinusInfinity();
- int skip_count_ = 0;
-};
-
class VideoQualityAnalyzer {
public:
explicit VideoQualityAnalyzer(
@@ -44,59 +29,15 @@
std::unique_ptr<RtcEventLogOutput> writer = nullptr);
~VideoQualityAnalyzer();
void HandleFramePair(VideoFramePair sample);
- std::vector<VideoQualityStats> layer_stats() const;
- VideoQualityStats& stats();
+ VideoQualityStats stats() const;
void PrintHeaders();
void PrintFrameInfo(const VideoFramePair& sample);
std::function<void(const VideoFramePair&)> Handler();
private:
const VideoQualityAnalyzerConfig config_;
- std::map<int, VideoLayerAnalyzer> layer_analyzers_;
+ VideoQualityStats stats_;
const std::unique_ptr<RtcEventLogOutput> writer_;
- absl::optional<VideoQualityStats> cached_;
-};
-
-class CallStatsCollector {
- public:
- void AddStats(Call::Stats sample);
- CollectedCallStats& stats() { return stats_; }
-
- private:
- CollectedCallStats stats_;
-};
-class AudioReceiveStatsCollector {
- public:
- void AddStats(AudioReceiveStream::Stats sample);
- CollectedAudioReceiveStats& stats() { return stats_; }
-
- private:
- CollectedAudioReceiveStats stats_;
-};
-class VideoSendStatsCollector {
- public:
- void AddStats(VideoSendStream::Stats sample, Timestamp at_time);
- CollectedVideoSendStats& stats() { return stats_; }
-
- private:
- CollectedVideoSendStats stats_;
- Timestamp last_update_ = Timestamp::MinusInfinity();
- size_t last_fec_bytes_ = 0;
-};
-class VideoReceiveStatsCollector {
- public:
- void AddStats(VideoReceiveStream::Stats sample);
- CollectedVideoReceiveStats& stats() { return stats_; }
-
- private:
- CollectedVideoReceiveStats stats_;
-};
-
-struct CallStatsCollectors {
- CallStatsCollector call;
- AudioReceiveStatsCollector audio_receive;
- VideoSendStatsCollector video_send;
- VideoReceiveStatsCollector video_receive;
};
} // namespace test
diff --git a/test/scenario/stats_collection_unittest.cc b/test/scenario/stats_collection_unittest.cc
index 48a4bc3..ee01ad5 100644
--- a/test/scenario/stats_collection_unittest.cc
+++ b/test/scenario/stats_collection_unittest.cc
@@ -16,71 +16,47 @@
namespace {
void CreateAnalyzedStream(Scenario* s,
NetworkNodeConfig network_config,
- VideoQualityAnalyzer* analyzer,
- CallStatsCollectors* collectors) {
+ VideoQualityAnalyzer* analyzer) {
VideoStreamConfig config;
config.encoder.codec = VideoStreamConfig::Encoder::Codec::kVideoCodecVP8;
config.encoder.implementation =
VideoStreamConfig::Encoder::Implementation::kSoftware;
config.hooks.frame_pair_handlers = {analyzer->Handler()};
- auto* caller = s->CreateClient("caller", CallClientConfig());
- auto route =
- s->CreateRoutes(caller, {s->CreateSimulationNode(network_config)},
- s->CreateClient("callee", CallClientConfig()),
- {s->CreateSimulationNode(NetworkNodeConfig())});
- auto* video = s->CreateVideoStream(route->forward(), config);
- auto* audio = s->CreateAudioStream(route->forward(), AudioStreamConfig());
- if (collectors) {
- s->Every(TimeDelta::seconds(1), [=] {
- collectors->call.AddStats(caller->GetStats());
- collectors->audio_receive.AddStats(audio->receive()->GetStats());
- collectors->video_send.AddStats(video->send()->GetStats(), s->Now());
- collectors->video_receive.AddStats(video->receive()->GetStats());
- });
- }
+ auto route = s->CreateRoutes(s->CreateClient("caller", CallClientConfig()),
+ {s->CreateSimulationNode(network_config)},
+ s->CreateClient("callee", CallClientConfig()),
+ {s->CreateSimulationNode(NetworkNodeConfig())});
+ s->CreateVideoStream(route->forward(), config);
}
} // namespace
TEST(ScenarioAnalyzerTest, PsnrIsHighWhenNetworkIsGood) {
VideoQualityAnalyzer analyzer;
- CallStatsCollectors stats;
{
- Scenario s;
+ Scenario s("", /*real_time*/ false);
NetworkNodeConfig good_network;
good_network.simulation.bandwidth = DataRate::kbps(1000);
- CreateAnalyzedStream(&s, good_network, &analyzer, &stats);
- s.RunFor(TimeDelta::seconds(3));
+ CreateAnalyzedStream(&s, good_network, &analyzer);
+ s.RunFor(TimeDelta::seconds(1));
}
- // This is a change detecting test, the targets are based on previous runs and
- // might change due to changes in configuration and encoder etc. The main
- // purpose is to show how the stats can be used. To avoid being overly
- // sensistive to change, the ranges are chosen to be quite large.
- EXPECT_NEAR(analyzer.stats().psnr.Mean(), 43, 10);
- EXPECT_NEAR(stats.call.stats().target_rate.Mean().kbps(), 700, 300);
- EXPECT_NEAR(stats.video_send.stats().media_bitrate.Mean().kbps(), 500, 200);
- EXPECT_NEAR(stats.video_receive.stats().resolution.Mean(), 180, 10);
- EXPECT_NEAR(stats.audio_receive.stats().jitter_buffer.Mean().ms(), 40, 20);
+ // This is mainty a regression test, the target is based on previous runs and
+ // might change due to changes in configuration and encoder etc.
+ EXPECT_GT(analyzer.stats().psnr.Mean(), 40);
}
TEST(ScenarioAnalyzerTest, PsnrIsLowWhenNetworkIsBad) {
VideoQualityAnalyzer analyzer;
- CallStatsCollectors stats;
{
- Scenario s;
+ Scenario s("", /*real_time*/ false);
NetworkNodeConfig bad_network;
bad_network.simulation.bandwidth = DataRate::kbps(100);
bad_network.simulation.loss_rate = 0.02;
- CreateAnalyzedStream(&s, bad_network, &analyzer, &stats);
- s.RunFor(TimeDelta::seconds(3));
+ CreateAnalyzedStream(&s, bad_network, &analyzer);
+ s.RunFor(TimeDelta::seconds(1));
}
- // This is a change detecting test, the targets are based on previous runs and
+ // This is mainty a regression test, the target is based on previous runs and
// might change due to changes in configuration and encoder etc.
- EXPECT_NEAR(analyzer.stats().psnr.Mean(), 16, 10);
- EXPECT_NEAR(stats.call.stats().target_rate.Mean().kbps(), 75, 50);
- EXPECT_NEAR(stats.video_send.stats().media_bitrate.Mean().kbps(), 100, 50);
- EXPECT_NEAR(stats.video_receive.stats().resolution.Mean(), 180, 10);
- EXPECT_NEAR(stats.audio_receive.stats().jitter_buffer.Mean().ms(), 45, 20);
+ EXPECT_LT(analyzer.stats().psnr.Mean(), 30);
}
-
} // namespace test
} // namespace webrtc