Integrate built-in bisection search with runtest
Adds a --bisection-search switch to run-test. When this switch
is enabled run-test performs bisection bug search for nonchecker
failing tests attempting to find faulty method and optimization.
Adds ART_TEST_BISECTION flag support to Android.run-test.mk.
When this flag is set to true, run-test will run in bisection
search mode.
Bisection search works in no-prebuild mode only.
Test: ART_TEST_BISECTION=true m test-art-run-test
Change-Id: Id2d664a0b35fed366f50a60ce96f1ca6bd123cd4
diff --git a/test/etc/run-test-jar b/test/etc/run-test-jar
index d12bd79..88fe661 100755
--- a/test/etc/run-test-jar
+++ b/test/etc/run-test-jar
@@ -55,6 +55,8 @@
USE_DEX2OAT_AND_PATCHOAT="y"
INSTRUCTION_SET_FEATURES=""
ARGS=""
+EXTERNAL_LOG_TAGS="n" # if y respect externally set ANDROID_LOG_TAGS.
+DRY_RUN="n" # if y prepare to run the test but don't run it.
while true; do
if [ "x$1" = "x--quiet" ]; then
@@ -233,6 +235,12 @@
fi
EXPERIMENTAL="$EXPERIMENTAL $2"
shift 2
+ elif [ "x$1" = "x--external-log-tags" ]; then
+ EXTERNAL_LOG_TAGS="y"
+ shift
+ elif [ "x$1" = "x--dry-run" ]; then
+ DRY_RUN="y"
+ shift
elif expr "x$1" : "x--" >/dev/null 2>&1; then
echo "unknown $0 option: $1" 1>&2
exit 1
@@ -491,12 +499,14 @@
# Create a script with the command. The command can get longer than the longest
# allowed adb command and there is no way to get the exit status from a adb shell
- # command.
+ # command. Dalvik cache is cleaned before running to make subsequent executions
+ # of the script follow the same runtime path.
cmdline="cd $DEX_LOCATION && \
export ANDROID_DATA=$DEX_LOCATION && \
export ANDROID_ADDITIONAL_PUBLIC_LIBRARIES=$PUBLIC_LIBS && \
export DEX_LOCATION=$DEX_LOCATION && \
export ANDROID_ROOT=$ANDROID_ROOT && \
+ rm -rf ${DEX_LOCATION}/dalvik-cache/ && \
mkdir -p ${mkdir_locations} && \
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH && \
export PATH=$ANDROID_ROOT/bin:$PATH && \
@@ -517,7 +527,9 @@
adb push $cmdfile $DEX_LOCATION/cmdline.sh > /dev/null 2>&1
fi
- adb shell sh $DEX_LOCATION/cmdline.sh
+ if [ "$DRY_RUN" != "y" ]; then
+ adb shell sh $DEX_LOCATION/cmdline.sh
+ fi
rm -f $cmdfile
else
@@ -525,10 +537,12 @@
# By default, and for prebuild dex2oat, we are interested in errors being logged. In dev mode
# we want debug messages.
- if [ "$DEV_MODE" = "y" ]; then
- export ANDROID_LOG_TAGS='*:d'
- else
- export ANDROID_LOG_TAGS='*:e'
+ if [ "$EXTERNAL_LOG_TAGS" = "n" ]; then
+ if [ "$DEV_MODE" = "y" ]; then
+ export ANDROID_LOG_TAGS='*:d'
+ else
+ export ANDROID_LOG_TAGS='*:e'
+ fi
fi
export ANDROID_DATA="$DEX_LOCATION"
@@ -582,15 +596,21 @@
# For running, we must turn off logging when dex2oat or patchoat are missing. Otherwise we use
# the same defaults as for prebuilt: everything when --dev, otherwise errors and above only.
- if [ "$DEV_MODE" = "y" ]; then
- export ANDROID_LOG_TAGS='*:d'
- elif [ "$USE_DEX2OAT_AND_PATCHOAT" = "n" ]; then
- # All tests would log the error of failing dex2oat/patchoat. Be silent here and only
- # log fatal events.
- export ANDROID_LOG_TAGS='*:s'
- else
- # We are interested in LOG(ERROR) output.
- export ANDROID_LOG_TAGS='*:e'
+ if [ "$EXTERNAL_LOG_TAGS" = "n" ]; then
+ if [ "$DEV_MODE" = "y" ]; then
+ export ANDROID_LOG_TAGS='*:d'
+ elif [ "$USE_DEX2OAT_AND_PATCHOAT" = "n" ]; then
+ # All tests would log the error of failing dex2oat/patchoat. Be silent here and only
+ # log fatal events.
+ export ANDROID_LOG_TAGS='*:s'
+ else
+ # We are interested in LOG(ERROR) output.
+ export ANDROID_LOG_TAGS='*:e'
+ fi
+ fi
+
+ if [ "$DRY_RUN" = "y" ]; then
+ exit 0
fi
if [ "$USE_GDB" = "y" ]; then