File: linux-perf-chrome-renderer-cmd.sh

package info (click to toggle)
chromium 139.0.7258.127-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 6,122,068 kB
  • sloc: cpp: 35,100,771; ansic: 7,163,530; javascript: 4,103,002; python: 1,436,920; asm: 946,517; xml: 746,709; pascal: 187,653; perl: 88,691; sh: 88,436; objc: 79,953; sql: 51,488; cs: 44,583; fortran: 24,137; makefile: 22,147; tcl: 15,277; php: 13,980; yacc: 8,984; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (103 lines) | stat: -rwxr-xr-x 2,994 bytes parent folder | download | duplicates (6)
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#!/usr/bin/env bash
# Copyright 2022 the V8 project authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

PERF_DATA_DIR="."
PERF_DATA_PREFIX="chrome_renderer"
PERF_CLOCKID="mono"
PERF_CALL_GRAPH="fp"
PERF_FREQ_DEFAULT=10000
PERF_FREQ=""
PERF_COUNT=""
PERF_RAW_ARGS=""
RENDERER_ID="0"

for i in "$@"; do
  case $i in
    -h|--help)
cat <<EOF
Usage: path/to/chrome --renderer-cmd-prefix='$0 [OPTION]' [CHROME OPTIONS]
This script is mostly used in conjuction with linux_perf.py to run linux-perf
for each renderer process.
It generates perf.data files that can be read by pprof or linux-perf.

File naming: \$OUT_DIR/\$PREFIX_\$PARENT_PID_\$RENDERER_ID.perf.data

Options:
  --perf-data-dir=OUT_DIR    Change the location where perf.data is written.
                             Default: '${PERF_DATA_DIR}'
  --perf-data-prefix=PREFIX  Set a custom prefix for all generated
                             perf.data files.
                             Default: '${PERF_DATA_PREFIX}'

Pass-though Options:
  --perf-count=SAMPLE_DELTA    Forwards options to 'perf record --count'
                               Default: not used
  --perf-freq=FREQUENCY        Forwards options to 'perf record --freq'
                               Default: ${PERF_FREQ_DEFAULT}
  --perf-clockid=CLOCK_TYPE    Forwards options to 'perf record --clockid'
                               Default: '${PERF_CLOCKID}'
  --perf-call-graph=MODE       Forwards options to 'perf record --call-graph'
                               Default: '${PERF_CALL_GRAPH}'
  --perf-args=ARGS             Forwards raw options to 'perf record \$ARGS'
                               Default: not used
EOF
      exit
      ;;
    --perf-data-dir=*)
      PERF_DATA_DIR="${i#*=}"
      shift
    ;;
    --perf-data-prefix=*)
      PERF_DATA_PREFIX="${i#*=}"
      shift
    ;;
    --perf-freq=*)
      PERF_FREQ="${i#*=}"
      shift
    ;;
    --perf-count=*)
      PERF_COUNT="${i#*=}"
      shift
    ;;
    --perf-call-graph*)
      PERF_CALL_GRAPH="${i#*=}"
      shift
    ;;
    --perf-clockid*)
      PERF_CLOCKID="${i#*=}"
      shift
    ;;
    --perf-args*)
      PERF_RAW_ARGS="${i#*=}"
      shift
    ;;
    --renderer-client-id=*)
      # Don't shift this option since it is passed in (and used by) chrome.
      RENDERER_ID="${i#*=}"
    ;;
    *)
      ;;
  esac
done

SAMPLE_TRIGGER=""
if [ -n "${PERF_COUNT}" ]; then
  SAMPLE_TRIGGER+="--count=${PERF_COUNT}"
elif [ -n "${PERF_FREQ}" ]; then
  SAMPLE_TRIGGER+=" --freq=${PERF_FREQ}"
else
  SAMPLE_TRIGGER="--freq=${PERF_FREQ_DEFAULT}"
fi

# Make sure `perf record` doesn't create `.debug/` in the home directory.
export JITDUMPDIR="${PERF_DATA_DIR}";
PERF_OUTPUT="${PERF_DATA_DIR}/${PERF_DATA_PREFIX}_${PPID}_${RENDERER_ID}.perf.data";
perf record \
  --call-graph=${PERF_CALL_GRAPH} \
  --clockid=${PERF_CLOCKID} \
  ${SAMPLE_TRIGGER} \
  ${PERF_RAW_ARGS} \
  --output="${PERF_OUTPUT}" \
  -- $@