diff options
author | dkegel@google.com <dkegel@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-10 17:57:10 +0000 |
---|---|---|
committer | dkegel@google.com <dkegel@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-10 17:57:10 +0000 |
commit | e4e3caed74ecfe1ef1da4c7ba8fc076f59a53ef1 (patch) | |
tree | 648eaad69fc281d68603692e74a0f07bf8a015f5 /tools/valgrind | |
parent | dea35348b80dbd3374f7af9e97511d7d00376b29 (diff) | |
download | chromium_src-e4e3caed74ecfe1ef1da4c7ba8fc076f59a53ef1.zip chromium_src-e4e3caed74ecfe1ef1da4c7ba8fc076f59a53ef1.tar.gz chromium_src-e4e3caed74ecfe1ef1da4c7ba8fc076f59a53ef1.tar.bz2 |
Resubmit suppression count report patch, but this time don't crash if that section of the xml file is missing/empty
Review URL: http://codereview.chromium.org/203018
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@25876 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'tools/valgrind')
-rwxr-xr-x | tools/valgrind/memcheck_analyze.py | 45 |
1 files changed, 39 insertions, 6 deletions
diff --git a/tools/valgrind/memcheck_analyze.py b/tools/valgrind/memcheck_analyze.py index 61f9b4d..9b81fb6 100755 --- a/tools/valgrind/memcheck_analyze.py +++ b/tools/valgrind/memcheck_analyze.py @@ -248,12 +248,6 @@ class ValgrindError: # </frame> # although the dir, file, and line elements are missing if there is # no debug info. - # - # With our patch for https://bugs.kde.org/show_bug.cgi?id=205000 in, - # the file also includes records of the form - # <load_obj><obj>/usr/lib/libgcc_s.1.dylib</obj><ip>0x27000</ip></load_obj> - # giving the filename and load address of each binary that was mapped - # into the process. self._kind = getTextOf(error_node, "kind") self._backtraces = [] @@ -378,10 +372,31 @@ class MemcheckAnalyze: show_all_leaks: whether to show even less important leaks ''' + # Beyond the detailed errors parsed by ValgrindError above, + # the xml file contain records describing suppressions that were used: + # <suppcounts> + # <pair> + # <count>28</count> + # <name>pango_font_leak_todo</name> + # </pair> + # <pair> + # <count>378</count> + # <name>bug_13243</name> + # </pair> + # </suppcounts + # Collect these and print them at the end. + # + # With our patch for https://bugs.kde.org/show_bug.cgi?id=205000 in, + # the file also includes records of the form + # <load_obj><obj>/usr/lib/libgcc_s.1.dylib</obj><ip>0x27000</ip></load_obj> + # giving the filename and load address of each binary that was mapped + # into the process. + global TheAddressTable if use_gdb: TheAddressTable = _AddressTable() self._errors = set() + self._suppcounts = {} badfiles = set() start = time.time() self._parse_failed = False @@ -449,6 +464,17 @@ class MemcheckAnalyze: error = ValgrindError(source_dir, raw_error, commandline) self._errors.add(error) + suppcountlist = parsed_file.getElementsByTagName("suppcounts") + if len(suppcountlist) > 0: + suppcountlist = suppcountlist[0] + for node in suppcountlist.getElementsByTagName("pair"): + count = getTextOf(node, "count"); + name = getTextOf(node, "name"); + if name in self._suppcounts: + self._suppcounts[name] += int(count) + else: + self._suppcounts[name] = int(count) + if len(badfiles) > 0: logging.warn("valgrind didn't finish writing %d files?!" % len(badfiles)) for file in badfiles: @@ -460,6 +486,13 @@ class MemcheckAnalyze: logging.error("FAIL! Couldn't parse Valgrind output file") return -2 + print "-----------------------------------------------------" + print "Suppressions used:" + print " count name" + for item in sorted(self._suppcounts.items(), key=lambda (k,v): (v,k)): + print "%7s %s" % (item[1], item[0]) + print "-----------------------------------------------------" + if self._errors: logging.error("FAIL! There were %s errors: " % len(self._errors)) |