Add TSan and Dr Memory suppressions for Windows

This works enables us to add add more memory tools bots to the
WebRTC FYI waterfall at
http://build.chromium.org/p/client.webrtc.fyi/waterfall
These suppressions will be needed to get the bots green initially.

This CL also updates the PRESUBMIT.py scripts for the previous
memcheck and TSan suppression directories with the trybots we
currently have. It also adds a PRESUBMIT.py script for the
Dr Memory suppressions.

BUG=1938,2319,2321,2322,2323,2324,2328,2329,2330,2333
TEST=Local execution of the tests passes when these suppressions
are used.

R=niklas.enbom@webrtc.org, phoglund@webrtc.org

Review URL: https://webrtc-codereview.appspot.com/2149004

git-svn-id: http://webrtc.googlecode.com/svn/trunk@4653 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
kjellander@webrtc.org
2013-09-02 11:50:46 +00:00
parent b3e905cd91
commit 5aedb295d5
14 changed files with 183 additions and 6 deletions

View File

@ -0,0 +1 @@
*

View File

@ -0,0 +1,47 @@
#!/usr/bin/env python
# Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
#
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file in the root of the source
# tree. An additional intellectual property rights grant can be found
# in the file PATENTS. All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.
"""
Copied from Chrome's src/tools/valgrind/drmemory/PRESUBMIT.py
See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts
for more details on the presubmit API built into gcl.
"""
import os
def CheckChange(input_api, output_api):
"""Checks the DrMemory suppression files for bad suppressions."""
# Add the path to the Chrome valgrind dir to the import path:
tools_vg_path = os.path.join(input_api.PresubmitLocalPath(), '..', '..',
'valgrind')
import sys
old_path = sys.path
try:
sys.path = sys.path + [tools_vg_path]
import suppressions
return suppressions.PresubmitCheck(input_api, output_api)
finally:
sys.path = old_path
def CheckChangeOnUpload(input_api, output_api):
return CheckChange(input_api, output_api)
def CheckChangeOnCommit(input_api, output_api):
return CheckChange(input_api, output_api)
def GetPreferredTrySlaves():
# We don't have any Dr Memory trybots yet, so there's no use for this method.
# When we have, the slave name(s) should be put into this list.
return []

View File

@ -0,0 +1,50 @@
# This file is used in addition to the one already maintained in Chrome.
# It acts as a place holder for future additions for WebRTC.
# It must exist for the Python wrapper script to work properly.
INVALID HEAP ARGUMENT
name=https://code.google.com/p/webrtc/issues/detail?id=2321
drmemorylib.dll!replace_operator_delete_array
*!webrtc::scoped_array<short>::~scoped_array<short>
*!webrtc::PushResampler::~PushResampler
*!webrtc::PushResamplerTest_VerifiesInputParameters_Test::TestBody
*!testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test,void>
INVALID HEAP ARGUMENT
name=https://code.google.com/p/webrtc/issues/detail?id=2322
drmemorylib.dll!replace_operator_delete_array
*!webrtc::scoped_array<unsigned char>::~scoped_array<unsigned char>
*!webrtc::JpegEncoder::Encode
*!webrtc::JpegTest_Encode_Test::TestBody
*!testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test,void>
GDI USAGE ERROR
name=https://code.google.com/p/webrtc/issues/detail?id=2323
system call NtGdiDeleteObjectApp
GDI32.dll!DeleteDC
GDI32.dll!DeleteDC
*!webrtc::`anonymous namespace'::WindowCapturerWin::Capture
*!webrtc::WindowCapturerTest_Capture_Test::TestBody
*!testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test,void>
UNINITIALIZED READ
name=https://code.google.com/p/libyuv/issues/detail?id=263
*!ScaleAddRows_SSE2
...
*!ScalePlaneDown
*!ScalePlane
*!I420Scale
*!webrtc::Scaler::Scale
*!webrtc::VPMSimpleSpatialResampler::ResampleFrame
*!webrtc::VPMFramePreprocessor::PreprocessFrame
*!webrtc::VideoProcessingModuleImpl::PreprocessFrame
*!webrtc::VideoProcessingModuleTest_PreprocessorLogic_Test::TestBody
*!testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test,void>
LEAK
name=https://code.google.com/p/webrtc/issues/detail?id=2333
drmemorylib.dll!replace_operator_new
*!webrtc::test::UdpSocketWrapper::CreateSocket
*!webrtc::test::UdpSocketManager_AddAndRemoveSocketDoesNotLeakMemory_Test::TestBody
*!testing::internal::HandleSehExceptionsInMethodIfSupported<testing::Test,void>

View File

@ -0,0 +1,4 @@
# https://code.google.com/p/webrtc/issues/detail?id=2323
AudioDecoderIsacFbTest.EncodeDecode
AudioDecoderIsacFloatTest.EncodeDecode
AudioDecoderIsacSwbTest.EncodeDecode

View File

@ -0,0 +1,10 @@
# Tests that are too slow.
AudioCodingModuleTest.TestAllCodecs
AudioCodingModuleTest.TestEncodeDecode
AudioCodingModuleTest.TestFEC
AudioCodingModuleTest.TestIsac
AudioCodingModuleTest.TwoWayCommunication
AudioCodingModuleTest.TestStereo
AudioCodingModuleTest.TestVADDTX
AudioCodingModuleTest.TestOpus
FecTest.FecTest

View File

@ -0,0 +1,5 @@
# Tests that are too slow.
VideoProcessorIntegrationTest.ProcessZeroPacketLoss
# https://code.google.com/p/webrtc/issues/detail?id=2328
DualStreamTest.BitExactSync*

View File

@ -0,0 +1,7 @@
# Too slow to run with Dr Memory on Windows.
VideoProcessingModuleTest.Denoising
# https://code.google.com/p/webrtc/issues/detail?id=2323
MouseCursorShapeTest.MatchCursors

View File

@ -0,0 +1,6 @@
# https://code.google.com/p/webrtc/issues/detail?id=1938
MouseCursorShapeTest.MatchCursors
# https://code.google.com/p/webrtc/issues/detail?id=2329
NetEqDecodingTest.TestBitExactness
NetEqDecodingTest.TestNetworkStatistics

View File

@ -0,0 +1,3 @@
# https://code.google.com/p/webrtc/issues/detail?id=2329
NetEqDecodingTest.TestBitExactness
NetEqDecodingTest.TestNetworkStatistics

View File

@ -0,0 +1,3 @@
# https://code.google.com/p/webrtc/issues/detail?id=2330
ClockTest.NtpTime

View File

@ -0,0 +1,2 @@
# https://code.google.com/p/webrtc/issues/detail?id=2330
ClockTest.NtpTime

View File

@ -87,13 +87,14 @@ def CheckChange(input_api, output_api):
return [output_api.PresubmitError('\n'.join(errors))]
return []
def CheckChangeOnUpload(input_api, output_api):
return CheckChange(input_api, output_api)
def CheckChangeOnCommit(input_api, output_api):
return CheckChange(input_api, output_api)
def GetPreferredTrySlaves():
# We don't have any memcheck slaves yet, so there's no use for this method.
# When we have, the slave name(s) should be put into this list.
return []
return ['linux_memcheck']

View File

@ -29,13 +29,14 @@ def CheckChange(input_api, output_api):
return suppressions.PresubmitCheck(input_api, output_api)
def CheckChangeOnUpload(input_api, output_api):
return CheckChange(input_api, output_api)
def CheckChangeOnCommit(input_api, output_api):
return CheckChange(input_api, output_api)
def GetPreferredTrySlaves():
# We don't have any tsan slaves yet, so there's no use for this method.
# When we have, the slave name(s) should be put into this list.
return []
return ['linux_tsan']

View File

@ -9,3 +9,40 @@
# This file is used in addition to the one already maintained in Chrome.
# It acts as a place holder for future additions for WebRTC.
# It must exist for the Python wrapper script to work properly.
{
bug_2319_1
ThreadSanitizer:Race
fun:webrtc::ThreadWindows::Run
fun:webrtc::ThreadWindows::StartThread
fun:_callthreadstartex
fun:_threadstartex
fun:BaseThreadInitThunk
}
{
bug_2319_2
ThreadSanitizer:Race
fun:TlsGetValue
fun:__set_flsgetvalue
fun:_threadstartex
fun:BaseThreadInitThunk
}
{
bug_2319_3
ThreadSanitizer:Race
fun:webrtc::ThreadWindows::SetNotAlive
...
}
{
bug_2319_4
ThreadSanitizer:Race
fun:webrtc::ThreadWindows::Start
...
}
{
bug_2319_5
ThreadSanitizer:Race
fun:webrtc::ThreadWindows::Stop
...
}