summaryrefslogtreecommitdiffstats
path: root/tools/valgrind
diff options
context:
space:
mode:
Diffstat (limited to 'tools/valgrind')
-rwxr-xr-xtools/valgrind/chrome_tests.py10
-rwxr-xr-xtools/valgrind/common.py31
-rwxr-xr-xtools/valgrind/valgrind_test.py27
3 files changed, 48 insertions, 20 deletions
diff --git a/tools/valgrind/chrome_tests.py b/tools/valgrind/chrome_tests.py
index e54084e9..b62fdf7 100755
--- a/tools/valgrind/chrome_tests.py
+++ b/tools/valgrind/chrome_tests.py
@@ -16,6 +16,7 @@ import sys
import google.logging_utils
import google.path_utils
+
# Import the platform_utils up in the layout tests which have been modified to
# work under non-Windows platforms instead of the ones that are in the
# tools/python/google directory. (See chrome_tests.sh which sets PYTHONPATH
@@ -26,6 +27,7 @@ import google.path_utils
# package. http://crbug.com/6164
import layout_package.path_utils
+import common
import valgrind_test
class TestNotFound(Exception): pass
@@ -140,10 +142,7 @@ class ChromeTests:
if os.path.exists(suppression_file):
cmd.append("--suppressions=%s" % suppression_file)
# Platform specific suppression
- suppression_platform = {
- 'darwin': 'mac',
- 'linux2': 'linux'
- }[sys.platform]
+ suppression_platform = common.PlatformName()
suppression_file_platform = \
os.path.join(directory,
'%s/suppressions_%s.txt' % (tool_name, suppression_platform))
@@ -176,8 +175,7 @@ class ChromeTests:
'''
filters = []
for directory in self._data_dirs:
- platform_suffix = {'darwin': 'mac',
- 'linux2': 'linux'}[sys.platform]
+ platform_suffix = common.PlatformName()
gtest_filter_files = [
os.path.join(directory, name + ".gtest.txt"),
os.path.join(directory, name + ".gtest-%s.txt" % \
diff --git a/tools/valgrind/common.py b/tools/valgrind/common.py
index d273bf7..8f85d40 100755
--- a/tools/valgrind/common.py
+++ b/tools/valgrind/common.py
@@ -10,6 +10,10 @@ import sys
import time
+class NotImplementedError(Exception):
+ pass
+
+
class TimeoutError(Exception):
pass
@@ -87,7 +91,7 @@ def RunSubprocess(proc, timeout=0, detach=False):
logging.info("process ended, did not time out")
if did_timeout:
- if sys.platform == "win32":
+ if IsWindows():
subprocess.call(["taskkill", "/T", "/F", "/PID", str(p.pid)])
else:
# Does this kill all children, too?
@@ -101,7 +105,7 @@ def RunSubprocess(proc, timeout=0, detach=False):
elif not detach:
for line in p.stdout.readlines():
_print_line(line, False)
- if sys.platform != 'darwin': # stdout flush fails on Mac
+ if not IsMac(): # stdout flush fails on Mac
logging.info("flushing stdout")
p.stdout.flush()
@@ -110,3 +114,26 @@ def RunSubprocess(proc, timeout=0, detach=False):
if result:
logging.error("%s exited with non-zero result code %d" % (proc[0], result))
return result
+
+
+def IsLinux():
+ return sys.platform.startswith('linux')
+
+
+def IsMac():
+ return sys.platform.startswith('darwin')
+
+
+def IsWindows():
+ return sys.platform == 'cygwin' or sys.platform.startswith('win')
+
+
+def PlatformName():
+ """Return a string to be used in paths for the platform."""
+ if IsLinux():
+ return 'linux'
+ if IsMac():
+ return 'mac'
+ if IsWindows():
+ return 'win32'
+ raise NotImplementedError('Unknown platform "%s".' % sys.platform)
diff --git a/tools/valgrind/valgrind_test.py b/tools/valgrind/valgrind_test.py
index fa164e5..4777b44 100755
--- a/tools/valgrind/valgrind_test.py
+++ b/tools/valgrind/valgrind_test.py
@@ -149,7 +149,7 @@ class ValgrindTool(object):
it looks like a fake_dsym. A non-fake dsym that already exists is assumed
to be up-to-date.
"""
- if sys.platform != 'darwin':
+ if not common.IsMac():
return
test_command = self._args[0]
@@ -363,8 +363,9 @@ class Memcheck(ValgrindTool):
# Glob all the files in the "valgrind.tmp" directory
filenames = glob.glob(self.TMP_DIR + "/memcheck.*")
- use_gdb = (sys.platform == 'darwin')
- analyzer = memcheck_analyze.MemcheckAnalyze(self._source_dir, filenames, self._options.show_all_leaks,
+ use_gdb = common.IsMac()
+ analyzer = memcheck_analyze.MemcheckAnalyze(self._source_dir, filenames,
+ self._options.show_all_leaks,
use_gdb=use_gdb)
ret = analyzer.Report()
if ret != 0:
@@ -410,10 +411,7 @@ class ThreadSanitizer(ValgrindTool):
ret = []
ignore_files = ["ignores.txt"]
- platform_suffix = {
- 'darwin': 'mac',
- 'linux2': 'linux'
- }[sys.platform]
+ platform_suffix = common.PlatformName()
ignore_files.append("ignores_%s.txt" % platform_suffix)
for ignore_file in ignore_files:
fullname = os.path.join(self._source_dir,
@@ -443,7 +441,7 @@ class ThreadSanitizer(ValgrindTool):
def Analyze(self):
filenames = glob.glob(self.TMP_DIR + "/tsan.*")
- use_gdb = (sys.platform == 'darwin')
+ use_gdb = common.IsMac()
analyzer = tsan_analyze.TsanAnalyze(self._source_dir, filenames,
use_gdb=use_gdb)
ret = analyzer.Report()
@@ -458,15 +456,20 @@ class ToolFactory:
def Create(self, tool_name):
if tool_name == "memcheck":
return Memcheck()
+ if tool_name == "memcheck_wine":
+ return Memcheck()
if tool_name == "tsan":
- if sys.platform != 'linux2':
+ if not IsLinux():
logging.info("WARNING: ThreadSanitizer may be unstable on Mac.")
logging.info("See http://code.google.com/p/data-race-test/wiki/"
"ThreadSanitizerOnMacOsx for the details")
return ThreadSanitizer()
- raise RuntimeError, "Unknown tool" \
- "(tool=%s, platform=%s)" % \
- (tool_name, sys.platform)
+ try:
+ platform_name = common.PlatformName()
+ except common.NotImplementedError:
+ platform_name = sys.platform + "(Unknown)"
+ raise RuntimeError, "Unknown tool (tool=%s, platform=%s)" % (tool_name,
+ platform_name)
def RunTool(argv):
# TODO(timurrrr): customize optparse instead