#!/bin/bash # Include our configuration . ${PREVIOUS_PWD}/CI/ft-tests.config # Arguments COMMIT=$1 FONT=$2 SIZE=$3 DPI=$4 DUMP=$5 BENCH=$6 VIEW=$7 STRING=$8 START_GLYPH=$9 END_GLYPH=${10} OUT_DIR="${TEST_OUTDIR}/${COMMIT}/$(basename ${FONT})/${SIZE}/" # Ensure directory we want to write to exists. mkdir -p $OUT_DIR # This script dumps specified metrics for a specified font. The arguments listed # above allow you to specify which metricts to dum when this script is called # from ft-test.sh # Below sets up a virtual X framebuffer to run the demos in. It is 1024x768 at # 24b depth. If you need a larget screen to fit the demos change the resolution # here. function startX { if [ ! -f "/tmp/.X${1}-lock" ]; then Xvfb :"$1" -screen 0 1024x768x24 & # Wait 2 seconds to ensure X is ready. sleep 2 fi } # Below is a utility function to run a command inside the virtual frame buffer, # wait 1 second and capture the screen and kill it.The first two arguments are # the xvfb ID and the output image file name. function xvfbRunAndScreenShot { display="$1" shift screenshot_name="$1" shift DISPLAY=:"$display" $@ & PID=$! sleep 1 DISPLAY=:"$display" xwd -root -silent\ | convert -colorspace sRGB -define png:color-type=2 -trim xwd:- png:${OUT_DIR}/${screenshot_name} kill $PID } # Because witing 1 second for every command can be slow we set up multiple xvfbs # in order to expedite the proccess. for worker in $(seq 1 $WORKERS) do startX $((98 + ${worker})) & done # Below are simple metricts to test that only require one run per font. if [[ "$DUMP" -eq 1 ]]; then ${DEMOS_DIR}/ftdump ${FONT} &> ${OUT_DIR}/dump.txt fi if [[ "$BENCH" -eq 1 ]]; then ${DEMOS_DIR}/ftbench ${FONT} &> ${OUT_DIR}/bench.txt fi if [[ "$STRING" -eq 1 ]]; then xvfbRunAndScreenShot 99 "ftstring.png" ${DEMOS_DIR}/ftstring\ -r $DPI ${SIZE} ${FONT} fi if [[ "$VIEW" -eq 1 ]]; then xvfbRunAndScreenShot 99 "ftview.png" ${DEMOS_DIR}/ftview -r $DPI ${SIZE} ${FONT} fi # For ftgrid we run it on thousands of glyphys so this loop takes advantage of # the above mentioned xvfb workers to speed it up. for GLYPH in $(seq ${START_GLYPH} ${END_GLYPH}) do ((i=i%WORKERS)); ((i++==0)) && wait echo "$(basename $FONT) ftgrid ${GLYPH}" # Pad name with 0s to maintain order GLYPH_padded=$(printf "%04d" ${GLYPH}) xvfbRunAndScreenShot $((98 + ${i})) "ftgrid_${GLYPH_padded}.png"\ ${DEMOS_DIR}/ftgrid -r $DPI -f ${GLYPH} ${SIZE} ${FONT} & done sleep 2 # wait for workers to finish up #killall Xvfb sleep 2 # wait for all xvfb to die