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