Modify av1_c_vs_simd_enc_test script Enabled av1_c_vs_simd_enc_test in Jenkins. Modified the test script to make it work with existing testing mechanism. BUG=aomedia:3472 Change-Id: Iedebd7a57632ab52da54c7d436076180a1eb64af
diff --git a/test/av1_c_vs_simd_encode.sh b/test/av1_c_vs_simd_encode.sh old mode 100644 new mode 100755 index cc547c8..631b56d --- a/test/av1_c_vs_simd_encode.sh +++ b/test/av1_c_vs_simd_encode.sh
@@ -10,6 +10,8 @@ ## ## This script checks the bit exactness between C and SIMD ## implementations of AV1 encoder. +## +. $(dirname $0)/tools_common.sh PRESETS="good rt" LOWBD_CLIPS="yuv_raw_input yuv_480p_raw_input y4m_720p_input y4m_screen_input" @@ -17,7 +19,6 @@ OUT_FILE_SUFFIX=".ivf" SCRIPT_DIR=$(dirname "$0") LIBAOM_SOURCE_DIR=$(cd ${SCRIPT_DIR}/..; pwd) -devnull='> /dev/null 2>&1' # Clips used in test. YUV_RAW_INPUT="${LIBAOM_TEST_DATA_PATH}/hantro_collage_w352h288.yuv" @@ -93,9 +94,11 @@ fi } -cleanup() { - rm -rf ${AOM_TEST_OUTPUT_DIR} -} +# This is not needed since tools_common.sh does the same cleanup. +# Keep the code here for our reference. +# cleanup() { +# rm -rf ${AOM_TEST_OUTPUT_DIR} +# } # Echo AOM_SIMD_CAPS_MASK for different instruction set architecture. avx512f() { @@ -208,8 +211,8 @@ has_x86_isa_extn() { instruction_set=$1 - grep -q "$instruction_set" /proc/cpuinfo - if [ $? -eq 1 ]; then + if ! grep -q "$instruction_set" /proc/cpuinfo; then + # This instruction set is not supported. return 1 fi } @@ -322,9 +325,8 @@ local clip=$3 local bitrate=$4 local preset=$5 - diff ${AOM_TEST_OUTPUT_DIR}/Out-generic-"${clip}"-${preset}-${bitrate}kbps-cpu${cpu}${OUT_FILE_SUFFIX} \ - ${AOM_TEST_OUTPUT_DIR}/Out-${target}-"${clip}"-${preset}-${bitrate}kbps-cpu${cpu}${OUT_FILE_SUFFIX} > /dev/null - if [ $? -eq 1 ]; then + if ! diff -q ${AOM_TEST_OUTPUT_DIR}/Out-generic-"${clip}"-${preset}-${bitrate}kbps-cpu${cpu}${OUT_FILE_SUFFIX} \ + ${AOM_TEST_OUTPUT_DIR}/Out-${target}-"${clip}"-${preset}-${bitrate}kbps-cpu${cpu}${OUT_FILE_SUFFIX}; then elog "C vs ${target} encode mismatches for ${clip}, at ${bitrate} kbps, speed ${cpu}, ${preset} preset" return 1 fi @@ -371,8 +373,8 @@ ${devnull} if [ "${target}" != "generic" ]; then - compare_enc_output ${target} $cpu ${clip} $bitrate ${preset} - if [ $? -eq 1 ]; then + if ! compare_enc_output ${target} $cpu ${clip} $bitrate ${preset}; then + # Found a mismatch return 1 fi fi @@ -392,7 +394,7 @@ # The cmake command line option -DENABLE_MMX=0 flag disables all SIMD # optimizations, and generates a C-only binary. local cmake_command="cmake $LIBAOM_SOURCE_DIR -DENABLE_MMX=0 \ - -DCMAKE_TOOLCHAIN_FILE=${LIBAOM_SOURCE_DIR}/build/cmake/toolchains/${arch}-linux.cmake" + -DCMAKE_TOOLCHAIN_FILE=${LIBAOM_SOURCE_DIR}/build/cmake/toolchains/i686-linux-gcc.cmake" fi echo "Build for: Generic ${arch}" @@ -424,8 +426,7 @@ av1_test_x86() { local arch=$1 - uname -m | grep -q "x86" - if [ $? -eq 1 ]; then + if ! uname -m | grep -q "x86"; then elog "Machine architecture is not x86 or x86_64" return 0 fi @@ -434,7 +435,7 @@ local target="x86-linux" local cmake_command="cmake \ $LIBAOM_SOURCE_DIR \ - -DCMAKE_TOOLCHAIN_FILE=${LIBAOM_SOURCE_DIR}/build/cmake/toolchains/${target}.cmake" + -DCMAKE_TOOLCHAIN_FILE=${LIBAOM_SOURCE_DIR}/build/cmake/toolchains/i686-linux-gcc.cmake" elif [ $arch = "x86_64" ]; then local target="x86_64-linux" local cmake_command="cmake $LIBAOM_SOURCE_DIR" @@ -448,14 +449,14 @@ for preset in $PRESETS; do local encoder="$(av1_enc_tool_path "${target}" "${preset}")" for isa in $x86_isa_variants; do - has_x86_isa_extn $isa - if [ $? -eq 1 ]; then + # Note that if has_x86_isa_extn returns 1, it is false, and vice versa. + if ! has_x86_isa_extn $isa; then echo "${isa} is not supported in this machine" continue fi export AOM_SIMD_CAPS_MASK=$($isa) - av1_enc_test $encoder "${target}" "${preset}" - if [ $? -eq 1 ]; then + if ! av1_enc_test $encoder "${target}" "${preset}"; then + # Found a mismatch return 1 fi unset AOM_SIMD_CAPS_MASK @@ -479,8 +480,8 @@ continue fi local encoder="$(av1_enc_tool_path "${target}" "${preset}")" - av1_enc_test "qemu-aarch64 -L /usr/aarch64-linux-gnu ${encoder}" "${target}" "${preset}" - if [ $? -eq 1 ]; then + if ! av1_enc_test "qemu-aarch64 -L /usr/aarch64-linux-gnu ${encoder}" "${target}" "${preset}"; then + # Found a mismatch return 1 fi done @@ -488,14 +489,15 @@ av1_c_vs_simd_enc_test () { # Test x86 (32 bit) + # x86 requires the i686-linux-gnu toolchain: + # $ sudo apt-get install g++-i686-linux-gnu echo "av1 test for x86 (32 bit): Started." # Encode 'C' only av1_test_generic "x86" - # Encode with SIMD optimizations enabled - av1_test_x86 "x86" - if [ $? -eq 1 ]; then + if ! av1_test_x86 "x86"; then echo "av1 test for x86 (32 bit): Done, test failed." + return 1 else echo "av1 test for x86 (32 bit): Done, all tests passed." fi @@ -506,9 +508,9 @@ # Encode 'C' only av1_test_generic "x86_64" # Encode with SIMD optimizations enabled - av1_test_x86 "x86_64" - if [ $? -eq 1 ]; then + if ! av1_test_x86 "x86_64"; then echo "av1 test for x86_64 (64 bit): Done, test failed." + return 1 else echo "av1 test for x86_64 (64 bit): Done, all tests passed." fi @@ -516,20 +518,12 @@ # Test ARM echo "av1_test_arm: Started." - av1_test_arm - if [ $? -eq 1 ]; then + if ! av1_test_arm; then echo "av1 test for arm: Done, test failed." + return 1 else echo "av1 test for arm: Done, all tests passed." fi } -# Setup a trap function to clean up build, and output files after tests complete. -trap cleanup EXIT - -av1_c_vs_simd_enc_verify_environment -if [ $? -eq 1 ]; then - echo "Environment check failed." - exit 1 -fi -av1_c_vs_simd_enc_test +run_tests av1_c_vs_simd_enc_verify_environment av1_c_vs_simd_enc_test
diff --git a/test/examples.sh b/test/examples.sh index 771a7b6..87d8c2b 100755 --- a/test/examples.sh +++ b/test/examples.sh
@@ -15,7 +15,7 @@ example_tests=$(ls -r $(dirname $0)/*.sh) # List of script names to exclude. -exclude_list="best_encode examples run_encodes tools_common av1_c_vs_simd_encode" +exclude_list="best_encode examples run_encodes tools_common" if [ "$(realtime_only_build)" = "yes" ]; then exclude_list="${exclude_list} twopass_encoder simple_decoder lightfield_test"
diff --git a/test/tools_common.sh b/test/tools_common.sh index f2d1802..cb9eba1 100755 --- a/test/tools_common.sh +++ b/test/tools_common.sh
@@ -312,7 +312,11 @@ # Combine environment and actual tests. local tests_to_run="${env_tests} ${tests_to_filter}" - check_version_strings + # av1_c_vs_simd_encode is a standalone test, and it doesn't need to check the + # version string. + if [ "${test_name}" != "av1_c_vs_simd_encode" ]; then + check_version_strings + fi # Run tests. for test in ${tests_to_run}; do @@ -464,6 +468,8 @@ AOM_TEST_PRESERVE_OUTPUT=${AOM_TEST_PRESERVE_OUTPUT:-no} +# This checking requires config/aom_config.c that is available in Jenkins +# testing. if [ "$(is_windows_target)" = "yes" ]; then AOM_TEST_EXE_SUFFIX=".exe" fi