From e4e3caed74ecfe1ef1da4c7ba8fc076f59a53ef1 Mon Sep 17 00:00:00 2001 From: "dkegel@google.com" Date: Thu, 10 Sep 2009 17:57:10 +0000 Subject: 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 --- tools/valgrind/memcheck_analyze.py | 45 +++++++++++++++++++++++++++++++++----- 1 file changed, 39 insertions(+), 6 deletions(-) (limited to 'tools') 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: # # 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 - # /usr/lib/libgcc_s.1.dylib0x27000 - # 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: + # + # + # 28 + # pango_font_leak_todo + # + # + # 378 + # bug_13243 + # + # /usr/lib/libgcc_s.1.dylib0x27000 + # 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)) -- cgit v1.1