Fix for crash in frame matcher on short runs.
The capture time stamp was not set when finalizing a simulation where
no frames were delivered, this triggered a DCHECK.
Also adding a unit test that would have caught this.
Bug: webrtc:10365
Change-Id: I839d1c01dbf260723ed30d3e846efff280d7744f
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/136585
Reviewed-by: Rasmus Brandt <brandtr@webrtc.org>
Commit-Queue: Sebastian Jansson <srte@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#27929}
diff --git a/test/scenario/stats_collection_unittest.cc b/test/scenario/stats_collection_unittest.cc
index b4b31cc..2d8fa39 100644
--- a/test/scenario/stats_collection_unittest.cc
+++ b/test/scenario/stats_collection_unittest.cc
@@ -30,14 +30,12 @@
{s->CreateSimulationNode(NetworkSimulationConfig())});
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());
- });
- }
+ 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());
+ });
}
} // namespace
@@ -82,5 +80,19 @@
EXPECT_NEAR(stats.audio_receive.stats().jitter_buffer.Mean().ms(), 45, 20);
}
+TEST(ScenarioAnalyzerTest, CountsCapturedButNotRendered) {
+ VideoQualityAnalyzer analyzer;
+ CallStatsCollectors stats;
+ {
+ Scenario s;
+ NetworkSimulationConfig long_delays;
+ long_delays.delay = TimeDelta::seconds(5);
+ CreateAnalyzedStream(&s, long_delays, &analyzer, &stats);
+ // Enough time to send frames but not enough to deliver.
+ s.RunFor(TimeDelta::ms(100));
+ }
+ EXPECT_GE(analyzer.stats().capture.count, 1);
+ EXPECT_EQ(analyzer.stats().render.count, 0);
+}
} // namespace test
} // namespace webrtc
diff --git a/test/scenario/video_frame_matcher.cc b/test/scenario/video_frame_matcher.cc
index 82b3b3e..1a5d4b4 100644
--- a/test/scenario/video_frame_matcher.cc
+++ b/test/scenario/video_frame_matcher.cc
@@ -105,9 +105,9 @@
frame_pair.layer_id = layer_id;
frame_pair.captured = captured.frame;
frame_pair.capture_id = captured.id;
+ frame_pair.capture_time = captured.capture_time;
if (captured.best_decode) {
frame_pair.decode_id = captured.best_decode->id;
- frame_pair.capture_time = captured.capture_time;
frame_pair.decoded = captured.best_decode->frame;
frame_pair.render_time = captured.best_decode->render_time;
frame_pair.repeated = captured.best_decode->repeat_count++;