diff options
Diffstat (limited to 'tools/valgrind')
-rwxr-xr-x | tools/valgrind/chrome_tests.py | 10 | ||||
-rwxr-xr-x | tools/valgrind/common.py | 31 | ||||
-rwxr-xr-x | tools/valgrind/valgrind_test.py | 27 |
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 |