| Index: tools/llvm_coverage_run.py
|
| diff --git a/tools/llvm_coverage_run.py b/tools/llvm_coverage_run.py
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..8b497506e64d3dfb59911f98d28a66bb3c2fe84c
|
| --- /dev/null
|
| +++ b/tools/llvm_coverage_run.py
|
| @@ -0,0 +1,63 @@
|
| +#!/usr/bin/env python
|
| +# Copyright (c) 2015 The Chromium Authors. All rights reserved.
|
| +# Use of this source code is governed by a BSD-style license that can be
|
| +# found in the LICENSE file.
|
| +
|
| +
|
| +"""Run the given command through LLVM's coverage tools."""
|
| +
|
| +
|
| +import argparse
|
| +import os
|
| +import subprocess
|
| +
|
| +
|
| +BUILDTYPE = 'Coverage'
|
| +PROFILE_DATA = 'default.profraw'
|
| +PROFILE_DATA_MERGED = 'prof_merged'
|
| +SKIA_OUT = 'SKIA_OUT'
|
| +
|
| +
|
| +def _get_out_dir():
|
| + """Determine the location for compiled binaries."""
|
| + return os.path.join(os.environ.get(SKIA_OUT, os.path.realpath('out')),
|
| + BUILDTYPE)
|
| +
|
| +
|
| +def run_coverage(cmd):
|
| + """Run the given command and return per-file coverage data.
|
| +
|
| + Assumes that the binary has been built using llvm_coverage_build and that
|
| + LLVM 3.6 or newer is installed.
|
| + """
|
| + binary_path = os.path.join(_get_out_dir(), cmd[0])
|
| + subprocess.call([binary_path] + cmd[1:])
|
| + try:
|
| + subprocess.check_call(
|
| + ['llvm-profdata', 'merge', PROFILE_DATA,
|
| + '-output=%s' % PROFILE_DATA_MERGED])
|
| + finally:
|
| + os.remove(PROFILE_DATA)
|
| + try:
|
| + return subprocess.check_output(['llvm-cov', 'show', '-no-colors',
|
| + '-instr-profile', PROFILE_DATA_MERGED,
|
| + binary_path])
|
| + finally:
|
| + os.remove(PROFILE_DATA_MERGED)
|
| +
|
| +
|
| +def main():
|
| + """Run coverage and generate a report."""
|
| + # Parse args.
|
| + parser = argparse.ArgumentParser()
|
| + parser.add_argument('--outResultsFile')
|
| + args, cmd = parser.parse_known_args()
|
| +
|
| + # Run coverage.
|
| + report = run_coverage(cmd)
|
| + with open(args.outResultsFile, 'w') as f:
|
| + f.write(report)
|
| +
|
| +
|
| +if __name__ == '__main__':
|
| + main()
|
|
|