Files
UnrealEngine/Engine/Extras/GPUDumpViewer/OpenGPUDumpViewer.sh
2025-05-18 13:04:45 +08:00

106 lines
2.0 KiB
Bash

#!/usr/bin/env bash
# Copyright Epic Games, Inc. All Rights Reserved.
set -eu
UNAMEOS="$(uname -s)"
ADDRESS="127.0.0.1"
PORT="8000"
URL="http://$ADDRESS:$PORT/GPUDumpViewer.html"
SCRIPT=$(readlink -f "$0")
# Absolute path this script is in, thus /home/user/bin
SCRIPTPATH=$(dirname "$SCRIPT")
pushd "$SCRIPTPATH"
GetAllChildProcesses() {
local Children=$(ps -o pid= ppid "$1")
for PID in $Children
do
GetAllChildProcesses "$PID"
done
echo "$Children"
}
# Gather all the descendant children of this process, and first kill -TERM. If any child process
# is still alive finally send a -KILL
TermHandler() {
MaxWait=30
CurrentWait=0
ProcessesToKill=$(GetAllChildProcesses $$)
kill -s TERM $ProcessesToKill 2> /dev/null
ProcessesStillAlive=$(ps -o pid= -p $ProcessesToKill)
# Wait until all the processes have been gracefully killed, or max Wait time
while [ -n "$ProcessesStillAlive" ] && [ "$CurrentWait" -lt "$MaxWait" ]
do
CurrentWait=$((CurrentWait + 1))
sleep 1
ProcessesStillAlive=$(ps -o pid= -p $ProcessesToKill)
done
# If some processes are still alive after MaxWait, lets just force kill them
if [ -n "$ProcessesStillAlive" ]; then
kill -s KILL $ProcessesStillAlive 2> /dev/null
fi
}
# trap when SIGINT or SIGTERM are received with a custom function
trap TermHandler SIGTERM SIGINT
APPS=()
APPS+=(xdg-open)
if [[ "${UNAMEOS}" =~ "Darwin" ]]; then
APPS+=(open)
fi
CMD=
for val in "${APPS[@]}"; do
CMD="$(command -v "${val}")" || true
if [[ -n "${CMD}" ]]; then
break
fi
done
if [[ -z "${CMD}" ]]; then
echo "ERROR: Browser launch command not found"
exit 1
fi
ARGS=("${CMD}")
ARGS+=("$URL")
echo "Executing:"
echo
echo "Starting simple webserver..."
exec python3 -m http.server "$PORT" --bind "$ADDRESS" &
P1=$!
sleep 1
echo "${ARGS[0]} \\"
for ((i=1; i < ${#ARGS[@]}; i++ )); do
echo " ${ARGS[$i]} \\";
done
echo
# Start the browser now that the server is running
"${ARGS[@]}"
# Wait on the webserver - in general this will be killed by a Ctrl-C
wait $P1
echo
echo "Closing ${CMD}..."
popd