Index: lit.cfg =================================================================== --- lit.cfg +++ lit.cfg @@ -145,6 +145,13 @@ new_commandline = " ".join(map(quote, runsafely_prefix + tokens)) return new_commandline +def wrapScriptInRunSafely(script, outfile): + adjusted_script = [] + for line in script: + line = prepareRunSafely(config, line, outfile) + adjusted_script.append(line) + return adjusted_script + class TestSuiteTest(FileBasedTest): def __init__(self): super(TestSuiteTest, self).__init__() @@ -169,11 +176,19 @@ runscript = applySubstitutions(runscript, substitutions) verifyscript = applySubstitutions(verifyscript, substitutions) - adjusted_runscript = [] - for line in runscript: - line = prepareRunSafely(config, line, outfile) - adjusted_runscript.append(line) - runscript = adjusted_runscript + if litConfig.params.get('profile') == 'perf': + # wrap linux perf command to do profiling + profilefile = tmpBase + ".perf_data" + profilescript=[] + for line in runscript: + profilescript.append( + ' '.join( + ['perf record -e cycles,cache-misses,branch-misses -o', + profilefile, line])) + profilescript = wrapScriptInRunSafely(profilescript, + outfile=tmpBase+".perf.out") + + runscript = wrapScriptInRunSafely(runscript, outfile) # Create the output directory if it does not already exist. lit.util.mkdir_p(os.path.dirname(tmpBase)) @@ -203,6 +218,10 @@ except IOError: pass + if litConfig.params.get('profile') == 'perf': + res = runScript(test, litConfig, profilescript, tmpBase) + out, err, exitCode, timeoutInfo = res + # Run verification script (the "VERIFY:" part) if len(verifyscript) > 0: res = runScript(test, litConfig, verifyscript, tmpBase)