nodejs/deps/v8/tools/profiling/linux-perf-chrome-renderer-cmd.sh
Michaël Zasso 918fe04351
deps: update V8 to 13.6.233.8
PR-URL: https://github.com/nodejs/node/pull/58070
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Darshan Sen <raisinten@gmail.com>
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com>
2025-05-02 15:06:53 +02:00

104 lines
2.9 KiB
Bash
Executable File

#!/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}" \
-- $@