Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(53)

Side by Side Diff: tools/valgrind/valgrind_test.py

Issue 3056025: Avoid duplicate error reports / suppressions when UI test reports are... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 10 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « tools/valgrind/tsan_analyze.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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_test.py 6 # valgrind_test.py
7 7
8 """Runs an exe through Valgrind and puts the intermediate files in a 8 """Runs an exe through Valgrind and puts the intermediate files in a
9 directory. 9 directory.
10 """ 10 """
(...skipping 419 matching lines...) Expand 10 before | Expand all | Expand 10 after
430 def GetAnalyzeResults(self, check_sanity=False): 430 def GetAnalyzeResults(self, check_sanity=False):
431 # Glob all the files in the "testing.tmp" directory 431 # Glob all the files in the "testing.tmp" directory
432 filenames = glob.glob(self.TMP_DIR + "/" + self.ToolName() + ".*") 432 filenames = glob.glob(self.TMP_DIR + "/" + self.ToolName() + ".*")
433 433
434 # If we have browser wrapper, the logfiles are named as 434 # If we have browser wrapper, the logfiles are named as
435 # "toolname.wrapper_PID.valgrind_PID". 435 # "toolname.wrapper_PID.valgrind_PID".
436 # Let's extract the list of wrapper_PIDs and name it ppids 436 # Let's extract the list of wrapper_PIDs and name it ppids
437 ppids = set([int(f.split(".")[-2]) \ 437 ppids = set([int(f.split(".")[-2]) \
438 for f in filenames if re.search("\.[0-9]+\.[0-9]+$", f)]) 438 for f in filenames if re.search("\.[0-9]+\.[0-9]+$", f)])
439 439
440 analyzer = self.CreateAnalyzer()
440 if len(ppids) == 0: 441 if len(ppids) == 0:
441 # Fast path - no browser wrapper was set. 442 # Fast path - no browser wrapper was set.
442 return self.CreateAnalyzer(filenames).Report(check_sanity) 443 return analyzer.Report(filenames, check_sanity)
443 444
444 ret = 0 445 ret = 0
445 for ppid in ppids: 446 for ppid in ppids:
446 print "=====================================================" 447 print "====================================================="
447 print " Below is the report for valgrind wrapper PID=%d." % ppid 448 print " Below is the report for valgrind wrapper PID=%d." % ppid
448 print " You can find the corresponding test " 449 print " You can find the corresponding test "
449 print " by searching the above log for 'PID=%d'" % ppid 450 print " by searching the above log for 'PID=%d'" % ppid
450 sys.stdout.flush() 451 sys.stdout.flush()
451 452
452 ppid_filenames = [f for f in filenames \ 453 ppid_filenames = [f for f in filenames \
453 if re.search("\.%d\.[0-9]+$" % ppid, f)] 454 if re.search("\.%d\.[0-9]+$" % ppid, f)]
454 # check_sanity won't work with browser wrappers 455 # check_sanity won't work with browser wrappers
455 assert check_sanity == False 456 assert check_sanity == False
456 ret |= self.CreateAnalyzer(ppid_filenames).Report() 457 ret |= analyzer.Report(ppid_filenames)
457 print "=====================================================" 458 print "====================================================="
458 sys.stdout.flush() 459 sys.stdout.flush()
459 460
460 if ret != 0: 461 if ret != 0:
461 print "" 462 print ""
462 print "The Valgrind reports are grouped by test names." 463 print "The Valgrind reports are grouped by test names."
463 print "Each test has its PID printed in the log when the test was run" 464 print "Each test has its PID printed in the log when the test was run"
464 print "and at the beginning of its Valgrind report." 465 print "and at the beginning of its Valgrind report."
465 sys.stdout.flush() 466 sys.stdout.flush()
466 467
(...skipping 28 matching lines...) Expand all
495 if self._options.show_all_leaks: 496 if self._options.show_all_leaks:
496 ret += ["--show-reachable=yes"] 497 ret += ["--show-reachable=yes"]
497 else: 498 else:
498 ret += ["--show-possible=no"] 499 ret += ["--show-possible=no"]
499 500
500 if self._options.track_origins: 501 if self._options.track_origins:
501 ret += ["--track-origins=yes"] 502 ret += ["--track-origins=yes"]
502 503
503 return ret 504 return ret
504 505
505 def CreateAnalyzer(self, filenames): 506 def CreateAnalyzer(self):
506 use_gdb = common.IsMac() 507 use_gdb = common.IsMac()
507 return memcheck_analyze.MemcheckAnalyze(self._source_dir, filenames, 508 return memcheck_analyze.MemcheckAnalyzer(self._source_dir,
508 self._options.show_all_leaks, 509 self._options.show_all_leaks,
509 use_gdb=use_gdb) 510 use_gdb=use_gdb)
510 511
511 def Analyze(self, check_sanity=False): 512 def Analyze(self, check_sanity=False):
512 ret = self.GetAnalyzeResults(check_sanity) 513 ret = self.GetAnalyzeResults(check_sanity)
513 514
514 if ret != 0: 515 if ret != 0:
515 logging.info("Please see http://dev.chromium.org/developers/how-tos/" 516 logging.info("Please see http://dev.chromium.org/developers/how-tos/"
516 "using-valgrind for the info on Memcheck/Valgrind") 517 "using-valgrind for the info on Memcheck/Valgrind")
517 return ret 518 return ret
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
649 ValgrindTool.__init__(self) 650 ValgrindTool.__init__(self)
650 ThreadSanitizerBase.__init__(self) 651 ThreadSanitizerBase.__init__(self)
651 652
652 def ToolSpecificFlags(self): 653 def ToolSpecificFlags(self):
653 proc = ThreadSanitizerBase.ToolSpecificFlags(self) 654 proc = ThreadSanitizerBase.ToolSpecificFlags(self)
654 # The -v flag is needed for printing the list of used suppressions and 655 # The -v flag is needed for printing the list of used suppressions and
655 # obtaining addresses for loaded shared libraries on Mac. 656 # obtaining addresses for loaded shared libraries on Mac.
656 proc += ["-v"] 657 proc += ["-v"]
657 return proc 658 return proc
658 659
659 def CreateAnalyzer(self, filenames): 660 def CreateAnalyzer(self):
660 use_gdb = common.IsMac() 661 use_gdb = common.IsMac()
661 return tsan_analyze.TsanAnalyze(self._source_dir, filenames) 662 return tsan_analyze.TsanAnalyzer(self._source_dir)
662 663
663 def Analyze(self, check_sanity=False): 664 def Analyze(self, check_sanity=False):
664 ret = self.GetAnalyzeResults(check_sanity) 665 ret = self.GetAnalyzeResults(check_sanity)
665 666
666 if ret != 0: 667 if ret != 0:
667 logging.info(self.INFO_MESSAGE) 668 logging.info(self.INFO_MESSAGE)
668 return ret 669 return ret
669 670
670 class ThreadSanitizerWindows(ThreadSanitizerBase, PinTool): 671 class ThreadSanitizerWindows(ThreadSanitizerBase, PinTool):
671 def __init__(self): 672 def __init__(self):
(...skipping 23 matching lines...) Expand all
695 logfilename = self.TMP_DIR + "/tsan.%p" 696 logfilename = self.TMP_DIR + "/tsan.%p"
696 proc += ["--log-file=" + logfilename] 697 proc += ["--log-file=" + logfilename]
697 698
698 # TODO(timurrrr): Add flags for Valgrind trace children analog when we 699 # TODO(timurrrr): Add flags for Valgrind trace children analog when we
699 # start running complex tests (e.g. UI) under TSan/Win. 700 # start running complex tests (e.g. UI) under TSan/Win.
700 701
701 return proc 702 return proc
702 703
703 def Analyze(self, check_sanity=False): 704 def Analyze(self, check_sanity=False):
704 filenames = glob.glob(self.TMP_DIR + "/tsan.*") 705 filenames = glob.glob(self.TMP_DIR + "/tsan.*")
705 analyzer = tsan_analyze.TsanAnalyze(self._source_dir, filenames) 706 analyzer = tsan_analyze.TsanAnalyzer(self._source_dir)
706 ret = analyzer.Report(check_sanity) 707 ret = analyzer.Report(filenames, check_sanity)
707 if ret != 0: 708 if ret != 0:
708 logging.info(self.INFO_MESSAGE) 709 logging.info(self.INFO_MESSAGE)
709 return ret 710 return ret
710 711
711 712
712 class DrMemory(BaseTool): 713 class DrMemory(BaseTool):
713 """Dr.Memory 714 """Dr.Memory
714 Dynamic memory error detector for Windows. 715 Dynamic memory error detector for Windows.
715 716
716 http://dynamorio.org/drmemory.html 717 http://dynamorio.org/drmemory.html
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
816 817
817 if __name__ == "__main__": 818 if __name__ == "__main__":
818 if sys.argv.count("-v") > 0 or sys.argv.count("--verbose") > 0: 819 if sys.argv.count("-v") > 0 or sys.argv.count("--verbose") > 0:
819 logging_utils.config_root(logging.DEBUG) 820 logging_utils.config_root(logging.DEBUG)
820 else: 821 else:
821 logging_utils.config_root() 822 logging_utils.config_root()
822 # TODO(timurrrr): valgrind tools may use -v/--verbose as well 823 # TODO(timurrrr): valgrind tools may use -v/--verbose as well
823 824
824 ret = RunTool(sys.argv) 825 ret = RunTool(sys.argv)
825 sys.exit(ret) 826 sys.exit(ret)
OLDNEW
« no previous file with comments | « tools/valgrind/tsan_analyze.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698