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}
This commit is contained in:

committed by
Commit Bot

parent
46ac470d92
commit
dab21c6a91
@ -30,14 +30,12 @@ void CreateAnalyzedStream(Scenario* s,
|
||||
{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 @@ TEST(ScenarioAnalyzerTest, PsnrIsLowWhenNetworkIsBad) {
|
||||
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
|
||||
|
@ -105,9 +105,9 @@ void VideoFrameMatcher::HandleMatch(VideoFrameMatcher::CapturedFrame captured,
|
||||
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++;
|
||||
|
Reference in New Issue
Block a user