File: merge_all_profdata.py

package info (click to toggle)
chromium 120.0.6099.224-1~deb11u1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 6,112,112 kB
  • sloc: cpp: 32,907,025; ansic: 8,148,123; javascript: 3,679,536; python: 2,031,248; asm: 959,718; java: 804,675; xml: 617,256; sh: 111,417; objc: 100,835; perl: 88,443; cs: 53,032; makefile: 29,579; fortran: 24,137; php: 21,162; tcl: 21,147; sql: 20,809; ruby: 17,735; pascal: 12,864; yacc: 8,045; lisp: 3,388; lex: 1,323; ada: 727; awk: 329; jsp: 267; csh: 117; exp: 43; sed: 37
file content (61 lines) | stat: -rwxr-xr-x 1,856 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#!/usr/bin/env python3
# Copyright 2023 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
""" Merge all the profdata files in PROFDATA_DIR, utilizing the binaries in
    BINARIES_DIR, to create a unified coverage report in REPORT_DIR. (If no
    REPORT_DIR is provided, defaults to `out/report`.)

  * Example usage: merge_all_profdata.py --profdata-dir [PROFDATA_DIR]
    --binaries-dir [BINARIES_DIR] [--report-dir [REPORT_DIR]]
"""

import argparse
import logging
import os
import subprocess


def _ParseCommandArguments():
  """Adds and parses relevant arguments for tool commands.

  Returns:
    A dictionary representing the arguments.
  """
  arg_parser = argparse.ArgumentParser()
  arg_parser.usage = __doc__

  arg_parser.add_argument('--llvm-profdata',
                          required=True,
                          type=str,
                          help='Location of LLVM profdata tool')
  arg_parser.add_argument('--profdata-dir',
                          required=True,
                          type=str,
                          help='Directory in which profdata files are stored.')
  arg_parser.add_argument(
      '--outfile',
      type=str,
      required=True,
      help=('Directory where the coverage report should go. '
            'Default is out/report.'))

  args = arg_parser.parse_args()

  return args


args = _ParseCommandArguments()
targets_to_cover = []
for profdata_file in os.listdir(args.profdata_dir):
  targets_to_cover.append(os.path.join(args.profdata_dir, profdata_file))

subprocess_cmd = [args.llvm_profdata, 'merge', '-o', args.outfile]

for target in targets_to_cover:
  subprocess_cmd.append(target)
try:
  subprocess.check_call(subprocess_cmd)
except:
  logging.error("An error occured while merging the profdata.")
  exit(1)