[cfe-commits] r75396 - /cfe/trunk/utils/test/MultiTestRunner.py

Daniel Dunbar daniel at zuster.org
Sat Jul 11 15:46:27 PDT 2009


Author: ddunbar
Date: Sat Jul 11 17:46:27 2009
New Revision: 75396

URL: http://llvm.org/viewvc/llvm-project?rev=75396&view=rev
Log:
Add --time-tests option to test runner, for profiling 'make test'.

Modified:
    cfe/trunk/utils/test/MultiTestRunner.py

Modified: cfe/trunk/utils/test/MultiTestRunner.py
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/utils/test/MultiTestRunner.py?rev=75396&r1=75395&r2=75396&view=diff

==============================================================================
--- cfe/trunk/utils/test/MultiTestRunner.py (original)
+++ cfe/trunk/utils/test/MultiTestRunner.py Sat Jul 11 17:46:27 2009
@@ -104,10 +104,11 @@
             TestRunner.cat(tr.testResults, sys.stdout)
 
 class TestResult:
-    def __init__(self, path, code, testResults):
+    def __init__(self, path, code, testResults, elapsed):
         self.path = path
         self.code = code
         self.testResults = testResults
+        self.elapsed = elapsed
 
     def failed(self):
         return self.code in (TestStatus.Fail,TestStatus.XPass)
@@ -163,24 +164,28 @@
         numTests = len(self.provider.tests)
         digits = len(str(numTests))
         code = None
+        elapsed = None
         try:
             opts = self.provider.opts
             if opts.debugDoNotTest:
                 code = None
             else:
+                startTime = time.time()
                 code = TestRunner.runOneTest(path, command, output, testname, 
                                              opts.clang, opts.clangcc,
                                              useValgrind=opts.useValgrind,
                                              useDGCompat=opts.useDGCompat,
                                              useScript=opts.testScript,
                                              output=open(testresults,'w'))
+                elapsed = time.time() - startTime
         except KeyboardInterrupt:
             # This is a sad hack. Unfortunately subprocess goes
             # bonkers with ctrl-c and we start forking merrily.
             print 'Ctrl-C detected, goodbye.'
             os.kill(0,9)
 
-        self.provider.setResult(index, TestResult(path, code, testresults))
+        self.provider.setResult(index, TestResult(path, code, testresults, 
+                                                  elapsed))
 
 def detectCPUs():
     """
@@ -252,6 +257,9 @@
     parser.add_option("", "--debug-do-not-test", dest="debugDoNotTest",
                       help="DEBUG: Skip running actual test script",
                       action="store_true", default=False)
+    parser.add_option("", "--time-tests", dest="timeTests",
+                      help="Track elapsed wall time for each test",
+                      action="store_true", default=False)
     parser.add_option("", "--path", dest="path",
                       help="Additional paths to add to testing environment",
                       action="store", type=str, default=None)
@@ -343,5 +351,11 @@
         print '\nFailures: %d' % (numFailures,)
         sys.exit(1)
         
+    if opts.timeTests:
+        provider.results.sort(key=lambda t: t and t.elapsed)
+        for tr in provider.results:
+            if tr:
+                print '%.2fs: %s' % (tr.elapsed, tr.path)
+
 if __name__=='__main__':
     main()





More information about the cfe-commits mailing list