Add AudioFrame::ResetWithoutMuting() to address performance regression.
Prior to https://codereview.webrtc.org/2750783004/ Reset() intentionally did not zero out the buffer. After that change, callers calling Reset() and then mutable_data() were performing a wasteful zeroing. This change adds ResetWithoutMuting() to match the old behavior and switches the sole non-test caller of Reset() to use ResetWithoutMuting() instead. Prior to this change (optimized, Linux): $ out/Default/webrtc_perf_tests --gtest_filter=NetEqPerformanceTest.Run* \ --gtest_repeat=10 | grep neteq_performance *RESULT neteq_performance: 10_pl_10_drift= 4051 ms *RESULT neteq_performance: 0_pl_0_drift= 1768 ms *RESULT neteq_performance: 10_pl_10_drift= 3666 ms *RESULT neteq_performance: 0_pl_0_drift= 1690 ms *RESULT neteq_performance: 10_pl_10_drift= 3685 ms *RESULT neteq_performance: 0_pl_0_drift= 1693 ms *RESULT neteq_performance: 10_pl_10_drift= 3720 ms *RESULT neteq_performance: 0_pl_0_drift= 1690 ms *RESULT neteq_performance: 10_pl_10_drift= 3780 ms *RESULT neteq_performance: 0_pl_0_drift= 1728 ms *RESULT neteq_performance: 10_pl_10_drift= 3733 ms *RESULT neteq_performance: 0_pl_0_drift= 1737 ms *RESULT neteq_performance: 10_pl_10_drift= 3781 ms *RESULT neteq_performance: 0_pl_0_drift= 1744 ms *RESULT neteq_performance: 10_pl_10_drift= 3712 ms *RESULT neteq_performance: 0_pl_0_drift= 1731 ms *RESULT neteq_performance: 10_pl_10_drift= 3681 ms *RESULT neteq_performance: 0_pl_0_drift= 1691 ms *RESULT neteq_performance: 10_pl_10_drift= 3681 ms *RESULT neteq_performance: 0_pl_0_drift= 1690 ms With this change: $ out/Default/webrtc_perf_tests --gtest_filter=NetEqPerformanceTest.Run* \ --gtest_repeat=10 | grep neteq_performance *RESULT neteq_performance: 10_pl_10_drift= 3824 ms *RESULT neteq_performance: 0_pl_0_drift= 1632 ms *RESULT neteq_performance: 10_pl_10_drift= 3502 ms *RESULT neteq_performance: 0_pl_0_drift= 1521 ms *RESULT neteq_performance: 10_pl_10_drift= 3520 ms *RESULT neteq_performance: 0_pl_0_drift= 1534 ms *RESULT neteq_performance: 10_pl_10_drift= 3517 ms *RESULT neteq_performance: 0_pl_0_drift= 1530 ms *RESULT neteq_performance: 10_pl_10_drift= 3521 ms *RESULT neteq_performance: 0_pl_0_drift= 1527 ms *RESULT neteq_performance: 10_pl_10_drift= 3511 ms *RESULT neteq_performance: 0_pl_0_drift= 1533 ms *RESULT neteq_performance: 10_pl_10_drift= 3518 ms *RESULT neteq_performance: 0_pl_0_drift= 1523 ms *RESULT neteq_performance: 10_pl_10_drift= 3503 ms *RESULT neteq_performance: 0_pl_0_drift= 1524 ms *RESULT neteq_performance: 10_pl_10_drift= 3514 ms *RESULT neteq_performance: 0_pl_0_drift= 1534 ms *RESULT neteq_performance: 10_pl_10_drift= 3501 ms *RESULT neteq_performance: 0_pl_0_drift= 1530 ms BUG=webrtc:7343,chromium:738852,chromium:738839 Change-Id: Idcbb276ca0ed27fff95164a73f1c1fa310175ee5 Reviewed-on: https://chromium-review.googlesource.com/563021 Reviewed-by: Henrik Lundin <henrik.lundin@webrtc.org> Reviewed-by: Olga Sharonova <olka@webrtc.org> Reviewed-by: Tommi <tommi@webrtc.org> Commit-Queue: Tommi <tommi@webrtc.org> Cr-Commit-Position: refs/heads/master@{#18939}
This commit is contained in:
@ -74,7 +74,7 @@ void SyncBuffer::GetNextAudioInterleaved(size_t requested_len,
|
||||
AudioFrame* output) {
|
||||
RTC_DCHECK(output);
|
||||
const size_t samples_to_read = std::min(FutureLength(), requested_len);
|
||||
output->Reset();
|
||||
output->ResetWithoutMuting();
|
||||
const size_t tot_samples_read =
|
||||
ReadInterleavedFromIndex(next_index_, samples_to_read,
|
||||
output->mutable_data());
|
||||
|
||||
Reference in New Issue
Block a user