File: linux-perf-renderer-cmd.sh

package info (click to toggle)
chromium 138.0.7204.157-1
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 6,071,864 kB
  • sloc: cpp: 34,936,859; ansic: 7,176,967; javascript: 4,110,704; python: 1,419,953; asm: 946,768; xml: 739,967; pascal: 187,324; sh: 89,623; perl: 88,663; objc: 79,944; sql: 50,304; cs: 41,786; fortran: 24,137; makefile: 21,806; php: 13,980; tcl: 13,166; yacc: 8,925; 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,931 bytes parent folder | download | duplicates (4)
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 Chromium Authors
# 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 used  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}" \
  -- $@