Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 #!/usr/bin/python | 1 #!/usr/bin/python |
| 2 # Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 # valgrind_analyze.py | 6 # valgrind_analyze.py |
| 7 | 7 |
| 8 ''' Given a valgrind XML file, parses errors and uniques them.''' | 8 ''' Given a valgrind XML file, parses errors and uniques them.''' |
| 9 | 9 |
| 10 import logging | 10 import logging |
| 11 import optparse | 11 import optparse |
| 12 import os | 12 import os |
| 13 import sys | 13 import sys |
| 14 import time | |
| 14 from xml.dom.minidom import parse | 15 from xml.dom.minidom import parse |
| 15 | 16 |
| 16 # These are functions (using C++ mangled names) that we look for in stack | 17 # These are functions (using C++ mangled names) that we look for in stack |
| 17 # traces. We don't show stack frames while pretty printing when they are below | 18 # traces. We don't show stack frames while pretty printing when they are below |
| 18 # any of the following: | 19 # any of the following: |
| 19 _TOP_OF_STACK_POINTS = [ | 20 _TOP_OF_STACK_POINTS = [ |
| 20 # Don't show our testing framework. | 21 # Don't show our testing framework. |
| 21 "testing::Test::Run()", | 22 "testing::Test::Run()", |
| 22 # Also don't show the internals of libc/pthread. | 23 # Also don't show the internals of libc/pthread. |
| 23 "start_thread" | 24 "start_thread" |
| (...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 182 '''Reads in a set of files. | 183 '''Reads in a set of files. |
| 183 | 184 |
| 184 Args: | 185 Args: |
| 185 source_dir: Path to top of source tree for this build | 186 source_dir: Path to top of source tree for this build |
| 186 files: A list of filenames. | 187 files: A list of filenames. |
| 187 show_all_leaks: whether to show even less important leaks | 188 show_all_leaks: whether to show even less important leaks |
| 188 ''' | 189 ''' |
| 189 | 190 |
| 190 self._errors = set() | 191 self._errors = set() |
| 191 for file in files: | 192 for file in files: |
| 193 # Wait up to a minute for valgrind to finish writing. | |
| 194 f = open(file, "r") | |
| 195 ntries = 60 | |
| 196 for tries in range(0, ntries): | |
| 197 f.seek(0) | |
| 198 if sum((1 for line in f if '</valgrindoutput>' in line)) > 0: | |
| 199 break | |
| 200 time.sleep(1) | |
| 201 f.close() | |
| 202 if tries == ntries-1: | |
|
Erik does not do reviews
2009/03/30 16:22:48
space around operator
| |
| 203 logging.error("valgrind never finished?") | |
| 192 raw_errors = parse(file).getElementsByTagName("error") | 204 raw_errors = parse(file).getElementsByTagName("error") |
| 193 for raw_error in raw_errors: | 205 for raw_error in raw_errors: |
| 194 # Ignore "possible" leaks for now by default. | 206 # Ignore "possible" leaks for now by default. |
| 195 if (show_all_leaks or getTextOf(raw_error, "kind") != "Leak_PossiblyLost "): | 207 if (show_all_leaks or |
| 208 getTextOf(raw_error, "kind") != "Leak_PossiblyLost"): | |
| 196 self._errors.add(ValgrindError(source_dir, raw_error)) | 209 self._errors.add(ValgrindError(source_dir, raw_error)) |
| 197 | 210 |
| 198 def Report(self): | 211 def Report(self): |
| 199 if self._errors: | 212 if self._errors: |
| 200 logging.error("FAIL! There were %s errors: " % len(self._errors)) | 213 logging.error("FAIL! There were %s errors: " % len(self._errors)) |
| 201 | 214 |
| 202 for error in self._errors: | 215 for error in self._errors: |
| 203 logging.error(error) | 216 logging.error(error) |
| 204 | 217 |
| 205 return -1 | 218 return -1 |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 220 parser.error("no filename specified") | 233 parser.error("no filename specified") |
| 221 filenames = args | 234 filenames = args |
| 222 | 235 |
| 223 analyzer = ValgrindAnalyze(options.source_dir, filenames) | 236 analyzer = ValgrindAnalyze(options.source_dir, filenames) |
| 224 retcode = analyzer.Report() | 237 retcode = analyzer.Report() |
| 225 | 238 |
| 226 sys.exit(retcode) | 239 sys.exit(retcode) |
| 227 | 240 |
| 228 if __name__ == "__main__": | 241 if __name__ == "__main__": |
| 229 _main() | 242 _main() |
| OLD | NEW |