| #!/bin/bash | |
| # Copyright 2016 The Chromium Authors. All rights reserved. | |
| # Use of this source code is governed by a BSD-style license that can be | |
| # found in the LICENSE file. | |
| # Runs run-webkit-tests and attaches a debugger to the single renderer process. | |
| if [ $# -eq 0 ]; then | |
| echo "usage: $(basename $0) [run-webkit-tests args...] test-path/test-name.html" | |
| exit 1 | |
| fi | |
| OS=$(uname) | |
| SCRIPTS_DIR=$(dirname $0) | |
| if [[ "$OS" == "Darwin" ]]; then | |
| CONTENT_SHELL="Content Shell.app" | |
| elif [[ "$OS" == "Linux" ]]; then | |
| CONTENT_SHELL="content_shell" | |
| else | |
| echo "Support for $OS has not been tested yet." | |
| exit 1 | |
| fi | |
| RENDERER_REGEX="/$CONTENT_SHELL.* --type=renderer .*--renderer-startup-dialog" | |
| if [ -z "$DEBUGGER" ]; then | |
| if which lldb > /dev/null; then | |
| DEBUGGER="lldb" | |
| CONTINUE="continue" | |
| elif which gdb > /dev/null; then | |
| DEBUGGER="gdb -q" | |
| CONTINUE="signal SIGUSR1" | |
| else | |
| echo "No debugger found" | |
| exit 1 | |
| fi | |
| fi | |
| # Kill existing matching renderers before we begin to ensure a clean run. | |
| pkill -f "$RENDERER_REGEX" | |
| # Run with a single child process as this script attaches only to the first renderer. | |
| $SCRIPTS_DIR/run-webkit-tests --child-processes=1 --time-out-ms=100000000 --additional-driver-flag=--no-sandbox --additional-driver-flag=--renderer-startup-dialog $* & | |
| wait_renderer_pid() { | |
| for i in {1..200}; do | |
| sleep 0.2 | |
| RENDERER_PID=$(pgrep -f "$RENDERER_REGEX") | |
| [ -n "$RENDERER_PID" ] && return | |
| done | |
| } | |
| wait_renderer_pid | |
| if [ -n "$RENDERER_PID" ]; then | |
| # print yellow message | |
| echo -e "\n\033[1;33mDebugging renderer, use '$CONTINUE' to run.\033[0m\n" | |
| $DEBUGGER -p $RENDERER_PID | |
| else | |
| echo "Timed out waiting for renderer." | |
| fi |