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())});
|
{s->CreateSimulationNode(NetworkSimulationConfig())});
|
||||||
auto* video = s->CreateVideoStream(route->forward(), config);
|
auto* video = s->CreateVideoStream(route->forward(), config);
|
||||||
auto* audio = s->CreateAudioStream(route->forward(), AudioStreamConfig());
|
auto* audio = s->CreateAudioStream(route->forward(), AudioStreamConfig());
|
||||||
if (collectors) {
|
|
||||||
s->Every(TimeDelta::seconds(1), [=] {
|
s->Every(TimeDelta::seconds(1), [=] {
|
||||||
collectors->call.AddStats(caller->GetStats());
|
collectors->call.AddStats(caller->GetStats());
|
||||||
collectors->audio_receive.AddStats(audio->receive()->GetStats());
|
collectors->audio_receive.AddStats(audio->receive()->GetStats());
|
||||||
collectors->video_send.AddStats(video->send()->GetStats(), s->Now());
|
collectors->video_send.AddStats(video->send()->GetStats(), s->Now());
|
||||||
collectors->video_receive.AddStats(video->receive()->GetStats());
|
collectors->video_receive.AddStats(video->receive()->GetStats());
|
||||||
});
|
});
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
@ -82,5 +80,19 @@ TEST(ScenarioAnalyzerTest, PsnrIsLowWhenNetworkIsBad) {
|
|||||||
EXPECT_NEAR(stats.audio_receive.stats().jitter_buffer.Mean().ms(), 45, 20);
|
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 test
|
||||||
} // namespace webrtc
|
} // namespace webrtc
|
||||||
|
@ -105,9 +105,9 @@ void VideoFrameMatcher::HandleMatch(VideoFrameMatcher::CapturedFrame captured,
|
|||||||
frame_pair.layer_id = layer_id;
|
frame_pair.layer_id = layer_id;
|
||||||
frame_pair.captured = captured.frame;
|
frame_pair.captured = captured.frame;
|
||||||
frame_pair.capture_id = captured.id;
|
frame_pair.capture_id = captured.id;
|
||||||
|
frame_pair.capture_time = captured.capture_time;
|
||||||
if (captured.best_decode) {
|
if (captured.best_decode) {
|
||||||
frame_pair.decode_id = captured.best_decode->id;
|
frame_pair.decode_id = captured.best_decode->id;
|
||||||
frame_pair.capture_time = captured.capture_time;
|
|
||||||
frame_pair.decoded = captured.best_decode->frame;
|
frame_pair.decoded = captured.best_decode->frame;
|
||||||
frame_pair.render_time = captured.best_decode->render_time;
|
frame_pair.render_time = captured.best_decode->render_time;
|
||||||
frame_pair.repeated = captured.best_decode->repeat_count++;
|
frame_pair.repeated = captured.best_decode->repeat_count++;
|
||||||
|
Reference in New Issue
Block a user