Made ViE standard tests runnable under valgrind.
Ensured there are bugs for all open valgrind issues in the standard tests and suppressed the known issues. This way, we can get it running in continuous integration and keep new issues from entering. Removed bad check in codec test, added suppressions. Fixed simple memory leaks in tests. BUG=Related to bug 329 TEST=Ran the vie_auto_test standard suite many times under valgrind to root out flakiness. Ran the standard suite without valgrind to ensure I didn't break anything. Review URL: https://webrtc-codereview.appspot.com/843005 git-svn-id: http://webrtc.googlecode.com/svn/trunk@2854 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
parent
133f5d06aa
commit
8ff3ff1a8b
@ -142,7 +142,7 @@ WebRtc_Word32 DeviceInfoLinux::GetDeviceName(
|
||||
|
||||
if (cap.bus_info[0] != 0) // may not available in all drivers
|
||||
{
|
||||
// copy device id
|
||||
// copy device id
|
||||
if (deviceUniqueIdUTF8Length >= strlen((const char*) cap.bus_info))
|
||||
{
|
||||
memset(deviceUniqueIdUTF8, 0, deviceUniqueIdUTF8Length);
|
||||
|
@ -16,24 +16,22 @@
|
||||
#define WEBRTC_VIDEO_ENGINE_MAIN_TEST_AUTOTEST_INTERFACE_VIE_AUTOTEST_H_
|
||||
|
||||
#include "common_types.h"
|
||||
|
||||
#include "voe_base.h"
|
||||
#include "voe_codec.h"
|
||||
#include "voe_hardware.h"
|
||||
#include "voe_audio_processing.h"
|
||||
|
||||
#include "vie_base.h"
|
||||
#include "vie_capture.h"
|
||||
#include "vie_codec.h"
|
||||
#include "vie_file.h"
|
||||
#include "vie_network.h"
|
||||
#include "vie_render.h"
|
||||
#include "vie_rtp_rtcp.h"
|
||||
#include "vie_defines.h"
|
||||
#include "vie_errors.h"
|
||||
#include "video_render_defines.h"
|
||||
|
||||
#include "vie_autotest_defines.h"
|
||||
#include "gflags/gflags.h"
|
||||
#include "modules/video_render/main/interface/video_render_defines.h"
|
||||
#include "video_engine/test/auto_test/interface/vie_autotest_defines.h"
|
||||
#include "video_engine/include/vie_base.h"
|
||||
#include "video_engine/include/vie_capture.h"
|
||||
#include "video_engine/include/vie_codec.h"
|
||||
#include "video_engine/include/vie_file.h"
|
||||
#include "video_engine/include/vie_network.h"
|
||||
#include "video_engine/include/vie_render.h"
|
||||
#include "video_engine/include/vie_rtp_rtcp.h"
|
||||
#include "video_engine/include/vie_errors.h"
|
||||
#include "video_engine/vie_defines.h"
|
||||
#include "voice_engine/include/voe_audio_processing.h"
|
||||
#include "voice_engine/include/voe_base.h"
|
||||
#include "voice_engine/include/voe_codec.h"
|
||||
#include "voice_engine/include/voe_hardware.h"
|
||||
|
||||
#ifndef WEBRTC_ANDROID
|
||||
#include <string>
|
||||
@ -44,6 +42,8 @@ class TbInterfaces;
|
||||
class TbVideoChannel;
|
||||
class ViEToFileRenderer;
|
||||
|
||||
DECLARE_bool(include_timing_dependent_tests);
|
||||
|
||||
// This class provides a bunch of methods, implemented across several .cc
|
||||
// files, which runs tests on the video engine. All methods will report
|
||||
// errors using standard googletest macros, except when marked otherwise.
|
||||
|
@ -25,6 +25,10 @@
|
||||
#include "video_engine/test/libvietest/include/tb_interfaces.h"
|
||||
#include "video_engine/test/libvietest/include/tb_video_channel.h"
|
||||
|
||||
DEFINE_bool(include_timing_dependent_tests, true,
|
||||
"If true, we will include tests / parts of tests that are known "
|
||||
"to break in slow execution environments (such as valgrind).");
|
||||
|
||||
// ViETest implementation
|
||||
FILE* ViETest::log_file_ = NULL;
|
||||
char* ViETest::log_str_ = NULL;
|
||||
|
@ -237,6 +237,7 @@ void ViEAutoTest::ViECaptureStandardTest() {
|
||||
/// **************************************************************
|
||||
// Testing finished. Tear down Video Engine
|
||||
/// **************************************************************
|
||||
delete dev_info;
|
||||
|
||||
// Stop all started capture devices.
|
||||
for (int device_index = 0; device_index < number_of_capture_devices;
|
||||
|
@ -203,20 +203,10 @@ void ViEAutoTest::ViECodecStandardTest() {
|
||||
EXPECT_EQ(video_codec.codecType,
|
||||
codec_observer.incoming_codec_.codecType);
|
||||
|
||||
int max_number_of_possible_frames = video_codec.maxFramerate
|
||||
* KAutoTestSleepTimeMs / 1000;
|
||||
|
||||
if (video_codec.codecType == webrtc::kVideoCodecI420) {
|
||||
// Don't expect too much from I420, it requires a lot of bandwidth.
|
||||
EXPECT_GT(frame_counter.num_frames_, 0);
|
||||
} else {
|
||||
#ifdef WEBRTC_ANDROID
|
||||
// To get the autotest to pass on some slow devices
|
||||
EXPECT_GT(frame_counter.num_frames_, max_number_of_possible_frames / 6);
|
||||
#else
|
||||
EXPECT_GT(frame_counter.num_frames_, max_number_of_possible_frames / 4);
|
||||
#endif
|
||||
}
|
||||
// This requirement is quite relaxed, but it's hard to say what's an
|
||||
// acceptable number of received frames when we take into account the
|
||||
// wide variety of devices (and that we run under valgrind).
|
||||
EXPECT_GT(frame_counter.num_frames_, 0);
|
||||
|
||||
EXPECT_EQ(0, image_process->DeregisterRenderEffectFilter(
|
||||
video_channel));
|
||||
|
@ -271,6 +271,7 @@ void ViEAutoTest::ViEFileStandardTest()
|
||||
AutoTestSleep(TEST_SPACING);
|
||||
|
||||
// GetCaptureDeviceSnapshot
|
||||
if (FLAGS_include_timing_dependent_tests)
|
||||
{
|
||||
ViETest::Log("Testing GetCaptureDeviceSnapshot(int, ViEPicture)");
|
||||
ViETest::Log("Taking a picture to use for displaying ViEPictures "
|
||||
@ -318,6 +319,7 @@ void ViEAutoTest::ViEFileStandardTest()
|
||||
AutoTestSleep(TEST_SPACING);
|
||||
|
||||
// GetCaptureDeviceSnapshot
|
||||
if (FLAGS_include_timing_dependent_tests)
|
||||
{
|
||||
ViETest::Log("Testing GetCaptureDeviceSnapshot(int, char*)");
|
||||
ViETest::Log("Taking snapshot from capture device %d", captureId);
|
||||
@ -346,6 +348,7 @@ void ViEAutoTest::ViEFileStandardTest()
|
||||
AutoTestSleep(TEST_SPACING);
|
||||
|
||||
// Testing: SetCaptureDeviceImage
|
||||
if (FLAGS_include_timing_dependent_tests)
|
||||
{
|
||||
ViETest::Log("Testing SetCaptureDeviceImage(int, ViEPicture)");
|
||||
EXPECT_EQ(0, ptrViECapture->StopCapture(captureId));
|
||||
@ -361,6 +364,7 @@ void ViEAutoTest::ViEFileStandardTest()
|
||||
AutoTestSleep(TEST_SPACING);
|
||||
|
||||
// testing SetRenderStartImage(videoChannel, renderStartImage);
|
||||
if (FLAGS_include_timing_dependent_tests)
|
||||
{
|
||||
ViETest::Log("Testing SetRenderStartImage(int, char*)");
|
||||
// set render image, then stop capture and stop render to display it
|
||||
@ -406,6 +410,7 @@ void ViEAutoTest::ViEFileStandardTest()
|
||||
|
||||
// testing SetRenderTimeoutImage(videoChannel, renderTimeoutFile,
|
||||
// RENDER_TIMEOUT);
|
||||
if (FLAGS_include_timing_dependent_tests)
|
||||
{
|
||||
ViETest::Log("Testing SetRenderTimeoutImage(int, char*)");
|
||||
ViETest::Log("Stopping capture device to induce timeout of %d ms",
|
||||
|
@ -8,19 +8,16 @@
|
||||
* be found in the AUTHORS file in the root of the source tree.
|
||||
*/
|
||||
|
||||
//
|
||||
// vie_autotest_rtp_rtcp.cc
|
||||
//
|
||||
#include <iostream>
|
||||
|
||||
#include "engine_configurations.h"
|
||||
#include "tb_capture_device.h"
|
||||
#include "tb_external_transport.h"
|
||||
#include "tb_interfaces.h"
|
||||
#include "tb_video_channel.h"
|
||||
#include "testsupport/fileutils.h"
|
||||
#include "vie_autotest.h"
|
||||
#include "vie_autotest_defines.h"
|
||||
#include "video_engine/test/libvietest/include/tb_capture_device.h"
|
||||
#include "video_engine/test/libvietest/include/tb_external_transport.h"
|
||||
#include "video_engine/test/libvietest/include/tb_interfaces.h"
|
||||
#include "video_engine/test/libvietest/include/tb_video_channel.h"
|
||||
#include "test/testsupport/fileutils.h"
|
||||
#include "video_engine/test/auto_test/interface/vie_autotest.h"
|
||||
#include "video_engine/test/auto_test/interface/vie_autotest_defines.h"
|
||||
|
||||
class ViERtpObserver: public webrtc::ViERTPObserver
|
||||
{
|
||||
@ -150,11 +147,13 @@ void ViEAutoTest::ViERtpRtcpStandardTest()
|
||||
|
||||
AutoTestSleep(1000);
|
||||
|
||||
char remoteCName[webrtc::ViERTP_RTCP::KMaxRTCPCNameLength];
|
||||
memset(remoteCName, 0, webrtc::ViERTP_RTCP::KMaxRTCPCNameLength);
|
||||
EXPECT_EQ(0, ViE.rtp_rtcp->GetRemoteRTCPCName(
|
||||
tbChannel.videoChannel, remoteCName));
|
||||
EXPECT_STRCASEEQ(sendCName, remoteCName);
|
||||
if (FLAGS_include_timing_dependent_tests) {
|
||||
char remoteCName[webrtc::ViERTP_RTCP::KMaxRTCPCNameLength];
|
||||
memset(remoteCName, 0, webrtc::ViERTP_RTCP::KMaxRTCPCNameLength);
|
||||
EXPECT_EQ(0, ViE.rtp_rtcp->GetRemoteRTCPCName(
|
||||
tbChannel.videoChannel, remoteCName));
|
||||
EXPECT_STRCASEEQ(sendCName, remoteCName);
|
||||
}
|
||||
|
||||
//
|
||||
// Statistics
|
||||
@ -228,10 +227,12 @@ void ViEAutoTest::ViERtpRtcpStandardTest()
|
||||
&estimated_bandwidth));
|
||||
EXPECT_GT(estimated_bandwidth, 0u);
|
||||
|
||||
EXPECT_EQ(0, ViE.rtp_rtcp->GetEstimatedReceiveBandwidth(
|
||||
tbChannel.videoChannel,
|
||||
&estimated_bandwidth));
|
||||
EXPECT_GT(estimated_bandwidth, 0u);
|
||||
if (FLAGS_include_timing_dependent_tests) {
|
||||
EXPECT_EQ(0, ViE.rtp_rtcp->GetEstimatedReceiveBandwidth(
|
||||
tbChannel.videoChannel,
|
||||
&estimated_bandwidth));
|
||||
EXPECT_GT(estimated_bandwidth, 0u);
|
||||
}
|
||||
|
||||
// Check that rec stats extended max is greater than what we've sent.
|
||||
EXPECT_GE(recExtendedMax, sentExtendedMax);
|
||||
@ -298,16 +299,20 @@ void ViEAutoTest::ViERtpRtcpStandardTest()
|
||||
AutoTestSleep(2000);
|
||||
unsigned int receivedSSRC = myTransport.ReceivedSSRC();
|
||||
ViETest::Log("Received SSRC %u\n", receivedSSRC);
|
||||
EXPECT_EQ(setSSRC, receivedSSRC);
|
||||
|
||||
unsigned int localSSRC = 0;
|
||||
EXPECT_EQ(0, ViE.rtp_rtcp->GetLocalSSRC(tbChannel.videoChannel, localSSRC));
|
||||
EXPECT_EQ(setSSRC, localSSRC);
|
||||
if (FLAGS_include_timing_dependent_tests) {
|
||||
EXPECT_EQ(setSSRC, receivedSSRC);
|
||||
|
||||
unsigned int remoteSSRC = 0;
|
||||
EXPECT_EQ(0, ViE.rtp_rtcp->GetRemoteSSRC(
|
||||
tbChannel.videoChannel, remoteSSRC));
|
||||
EXPECT_EQ(setSSRC, remoteSSRC);
|
||||
unsigned int localSSRC = 0;
|
||||
EXPECT_EQ(0, ViE.rtp_rtcp->GetLocalSSRC(
|
||||
tbChannel.videoChannel, localSSRC));
|
||||
EXPECT_EQ(setSSRC, localSSRC);
|
||||
|
||||
unsigned int remoteSSRC = 0;
|
||||
EXPECT_EQ(0, ViE.rtp_rtcp->GetRemoteSSRC(
|
||||
tbChannel.videoChannel, remoteSSRC));
|
||||
EXPECT_EQ(setSSRC, remoteSSRC);
|
||||
}
|
||||
|
||||
EXPECT_EQ(0, ViE.base->StopSend(tbChannel.videoChannel));
|
||||
|
||||
|
@ -21,4 +21,109 @@
|
||||
fun:_ZN6webrtc14ViECaptureImpl12StartCaptureEiRKNS_17CaptureCapabilityE
|
||||
fun:_ZN15TbCaptureDeviceC1ER12TbInterfaces
|
||||
fun:_ZN12_GLOBAL__N_114ViERtpFuzzTest5SetUpEv
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
bug_329_1
|
||||
Memcheck:Unaddressable
|
||||
fun:I422ToARGBRow_SSSE3
|
||||
fun:I420ToARGB
|
||||
fun:ConvertFromI420
|
||||
fun:_ZN6webrtc15ConvertFromI420EPKhiNS_9VideoTypeEiiiPh
|
||||
fun:_ZN6webrtc15VideoX11Channel12DeliverFrameEPhij
|
||||
fun:_ZN6webrtc15VideoX11Channel11RenderFrameEjRNS_10VideoFrameE
|
||||
fun:_ZN6webrtc19IncomingVideoStream26IncomingVideoStreamProcessEv
|
||||
fun:_ZN6webrtc19IncomingVideoStream28IncomingVideoStreamThreadFunEPv
|
||||
fun:_ZN6webrtc11ThreadPosix3RunEv
|
||||
fun:StartThread
|
||||
}
|
||||
|
||||
{
|
||||
bug_329_2
|
||||
Memcheck:Leak
|
||||
fun:_Znw*
|
||||
fun:_ZN6webrtc18videocapturemodule16VideoCaptureImpl16CreateDeviceInfoEi
|
||||
fun:_ZN6webrtc19VideoCaptureFactory16CreateDeviceInfoEi
|
||||
fun:_ZN11ViEAutoTest22ViECaptureStandardTestEv
|
||||
fun:_ZN12_GLOBAL__N_160ViEStandardIntegrationTest_RunsCaptureTestWithoutErrors_Test8TestBodyEv
|
||||
}
|
||||
|
||||
{
|
||||
bug_329_3
|
||||
Memcheck:Unaddressable
|
||||
fun:I422ToARGBRow_SSSE3
|
||||
fun:I420ToARGB
|
||||
fun:ConvertFromI420
|
||||
fun:_ZN6webrtc15ConvertFromI420EPKhiNS_9VideoTypeEiiiPh
|
||||
fun:_ZN6webrtc15VideoX11Channel12DeliverFrameEPhij
|
||||
fun:_ZN6webrtc15VideoX11Channel11RenderFrameEjRNS_10VideoFrameE
|
||||
fun:_ZN6webrtc19IncomingVideoStream26IncomingVideoStreamProcessEv
|
||||
fun:_ZN6webrtc19IncomingVideoStream28IncomingVideoStreamThreadFunEPv
|
||||
fun:_ZN6webrtc11ThreadPosix3RunEv
|
||||
fun:StartThread
|
||||
}
|
||||
|
||||
{
|
||||
bug_329_4
|
||||
Memcheck:Param
|
||||
socketcall.sendto(msg)
|
||||
obj:/lib/x86_64-linux-gnu/libpthread-2.15.so
|
||||
fun:_ZN6webrtc14UdpSocketPosix6SendToEPKaiRKNS_13SocketAddressE
|
||||
fun:_ZN6webrtc16UdpTransportImpl10SendPacketEiPKvi
|
||||
fun:_ZN6webrtc9ViESender10SendPacketEiPKvi
|
||||
fun:_ZN6webrtc9RTPSender13SendToNetworkEPhttlNS_11StorageTypeE
|
||||
fun:_ZN6webrtc14RTPSenderVideo15SendVideoPacketEPhttlNS_11StorageTypeEb
|
||||
fun:_ZN6webrtc14RTPSenderVideo7SendVP8ENS_9FrameTypeEajlPKhjPKNS_22RTPFragmentationHeaderEPKNS_18RTPVideoTypeHeaderE
|
||||
fun:_ZN6webrtc14RTPSenderVideo9SendVideoENS_18RtpVideoCodecTypesENS_9FrameTypeEajlPKhjPKNS_22RTPFragmentationHeaderEPNS_21VideoCodecInformationEPKNS_18RTPVideoTypeHeaderE
|
||||
fun:_ZN6webrtc9RTPSender16SendOutgoingDataENS_9FrameTypeEajlPKhjPKNS_22RTPFragmentationHeaderEPNS_21VideoCodecInformationEPKNS_18RTPVideoTypeHeaderE
|
||||
fun:_ZN6webrtc17ModuleRtpRtcpImpl16SendOutgoingDataENS_9FrameTypeEajlPKhjPKNS_22RTPFragmentationHeaderEPKNS_14RTPVideoHeaderE
|
||||
fun:_ZN6webrtc17ModuleRtpRtcpImpl16SendOutgoingDataENS_9FrameTypeEajlPKhjPKNS_22RTPFragmentationHeaderEPKNS_14RTPVideoHeaderE
|
||||
fun:_ZN6webrtc10ViEEncoder8SendDataENS_9FrameTypeEhjlPKhjRKNS_22RTPFragmentationHeaderEPKNS_14RTPVideoHeaderE
|
||||
fun:_ZN6webrtc23VCMEncodedFrameCallback7EncodedERNS_12EncodedImageEPKNS_17CodecSpecificInfoEPKNS_22RTPFragmentationHeaderE
|
||||
fun:_ZN6webrtc10VP8Encoder20GetEncodedPartitionsERKNS_10VideoFrameE
|
||||
fun:_ZN6webrtc10VP8Encoder6EncodeERKNS_10VideoFrameEPKNS_17CodecSpecificInfoENS_14VideoFrameTypeE
|
||||
fun:_ZN6webrtc17VCMGenericEncoder6EncodeERKNS_10VideoFrameEPKNS_17CodecSpecificInfoENS_9FrameTypeE
|
||||
fun:_ZN6webrtc21VideoCodingModuleImpl13AddVideoFrameERKNS_10VideoFrameEPKNS_19VideoContentMetricsEPKNS_17CodecSpecificInfoE
|
||||
fun:_ZN6webrtc10ViEEncoder12DeliverFrameEiPNS_10VideoFrameEiPKj
|
||||
fun:_ZN6webrtc20ViEFrameProviderBase12DeliverFrameEPNS_10VideoFrameEiPKj
|
||||
fun:_ZN6webrtc11ViECapturer16DeliverI420FrameEPNS_10VideoFrameE
|
||||
fun:_ZN6webrtc11ViECapturer17ViECaptureProcessEv
|
||||
}
|
||||
|
||||
{
|
||||
bug_329_5
|
||||
Memcheck:Param
|
||||
socketcall.sendto(msg)
|
||||
obj:/lib/x86_64-linux-gnu/libpthread-2.15.so
|
||||
fun:_ZN6webrtc14UdpSocketPosix6SendToEPKaiRKNS_13SocketAddressE
|
||||
fun:_ZN6webrtc16UdpTransportImpl14SendRTCPPacketEiPKvi
|
||||
fun:_ZN6webrtc9ViESender14SendRTCPPacketEiPKvi
|
||||
fun:_ZN6webrtc10RTCPSender13SendToNetworkEPKht
|
||||
fun:_ZN6webrtc10RTCPSender8SendRTCPEjiPKtbm
|
||||
fun:_ZN6webrtc17ModuleRtpRtcpImpl7ProcessEv
|
||||
fun:_ZN6webrtc17ProcessThreadImpl7ProcessEv
|
||||
fun:_ZN6webrtc17ProcessThreadImpl3RunEPv
|
||||
fun:_ZN6webrtc11ThreadPosix3RunEv
|
||||
fun:StartThread
|
||||
}
|
||||
|
||||
{
|
||||
bug_891
|
||||
Memcheck:Unaddressable
|
||||
fun:XShmPutImage
|
||||
fun:_ZN6webrtc15VideoX11Channel12DeliverFrameEPhij
|
||||
fun:_ZN6webrtc15VideoX11Channel11RenderFrameEjRNS_10VideoFrameE
|
||||
fun:_ZN6webrtc19IncomingVideoStream26IncomingVideoStreamProcessEv
|
||||
fun:_ZN6webrtc19IncomingVideoStream28IncomingVideoStreamThreadFunEPv
|
||||
fun:_ZN6webrtc11ThreadPosix3RunEv
|
||||
fun:StartThread
|
||||
}
|
||||
|
||||
{
|
||||
ignore_common_benevolent_trace_library_errors
|
||||
Memcheck:Uninitialized
|
||||
...
|
||||
fun:vsnprintf
|
||||
fun:_ZN6webrtc5Trace3AddENS_10TraceLevelENS_11TraceModuleEiPKcz
|
||||
...
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user