| 1 | |
| 2 | |
| 3 |
|
| 4 | |
| 5 | |
| 6 |
|
| 7 | |
| 8 | if ! [ -x "$(command -v jshell)" ]; then
|
| 9 | echo "skip: no jshell, install JDK"
|
| 10 | exit 2
|
| 11 | fi
|
| 12 |
|
| 13 | PERF_DATA=$(mktemp /tmp/__perf_test.perf.data.XXXXX)
|
| 14 | PERF_INJ_DATA=$(mktemp /tmp/__perf_test.perf.data.inj.XXXXX)
|
| 15 |
|
| 16 | cleanup_files()
|
| 17 | {
|
| 18 | echo "Cleaning up files..."
|
| 19 | rm -f ${PERF_DATA}
|
| 20 | rm -f ${PERF_INJ_DATA}
|
| 21 | }
|
| 22 |
|
| 23 | trap cleanup_files exit term int
|
| 24 |
|
| 25 | PERF_DIR=$(dirname "$(which perf)")
|
| 26 | if [ -e "$PWD/tools/perf/libperf-jvmti.so" ]; then
|
| 27 | LIBJVMTI=$PWD/tools/perf/libperf-jvmti.so
|
| 28 | elif [ -e "$PWD/libperf-jvmti.so" ]; then
|
| 29 | LIBJVMTI=$PWD/libperf-jvmti.so
|
| 30 | elif [ -e "$PERF_DIR/libperf-jvmti.so" ]; then
|
| 31 | LIBJVMTI=$PERF_DIR/libperf-jvmti.so
|
| 32 | elif [ -e "$PREFIX/lib64/libperf-jvmti.so" ]; then
|
| 33 | LIBJVMTI=$PREFIX/lib64/libperf-jvmti.so
|
| 34 | elif [ -e "$PREFIX/lib/libperf-jvmti.so" ]; then
|
| 35 | LIBJVMTI=$PREFIX/lib/libperf-jvmti.so
|
| 36 | elif [ -e "/usr/lib/linux-tools-$(uname -a | awk '{ print $3 }' | sed -r 's/-generic//')/libperf-jvmti.so" ]; then
|
| 37 | LIBJVMTI=/usr/lib/linux-tools-$(uname -a | awk '{ print $3 }' | sed -r 's/-generic//')/libperf-jvmti.so
|
| 38 | else
|
| 39 | echo "Fail to find libperf-jvmti.so"
|
| 40 |
|
| 41 | |
| 42 | exit 2
|
| 43 | fi
|
| 44 |
|
| 45 | cat <<EOF | perf record -k 1 -o $PERF_DATA jshell -s -J-agentpath:$LIBJVMTI
|
| 46 | int fib(int x) {
|
| 47 | return x > 1 ? fib(x - 2) + fib(x - 1) : 1;
|
| 48 | }
|
| 49 |
|
| 50 | int q = 0;
|
| 51 |
|
| 52 | for (int i = 0; i < 10; i++)
|
| 53 | q += fib(i);
|
| 54 |
|
| 55 | System.out.println(q);
|
| 56 | EOF
|
| 57 |
|
| 58 | if [ $? -ne 0 ]; then
|
| 59 | echo "Fail to record for java program"
|
| 60 | exit 1
|
| 61 | fi
|
| 62 |
|
| 63 | if ! DEBUGINFOD_URLS='' perf inject -i $PERF_DATA -o $PERF_INJ_DATA -j; then
|
| 64 | echo "Fail to inject samples"
|
| 65 | exit 1
|
| 66 | fi
|
| 67 |
|
| 68 | |
| 69 | |
| 70 | |
| 71 | perf report --stdio -i ${PERF_INJ_DATA} 2>&1 | \
|
| 72 | grep -E " +[0-9]+\.[0-9]+% .* (Interpreter|jdk\.internal).*" > /dev/null 2>&1
|
| 73 |
|
| 74 | if [ $? -ne 0 ]; then
|
| 75 | echo "Fail to find java symbols"
|
| 76 | exit 1
|
| 77 | fi
|
| 78 |
|
| 79 | exit 0
|