#!/system/bin/sh

####
# Continuously checks for presence of signal file in 1 second intervals
# Reads either a filename prefix or termination signal from file when it exists
# Writes output of atrace and bugreport to files with supplied prefix
####

SYSTRACE_SUFFIX=".trace";
BUGREPORT_SUFFIX="_bugreport.txt.gz";
TERMINATE_SIGNAL="QUIT";
SIGNAL_FILE="/sdcard/Loopback/loopback_signal"
TRACE_CATEGORIES="sched audio $@"
BUFFER_KB="8000"

function exitListener {
    # Exit atrace, remove signal file, and exit

    echo "LOOPBACK LISTENER: stopping trace before exiting"
    rm $SIGNAL_FILE
    atrace --async_stop -z > /dev/null
    echo "LOOPBACK LISTENER: exiting"
    exit 1
}

# Begin an asynchronous systrace writing into a circular buffer of size BUFFER_KB
echo "LOOPBACK LISTENER: starting trace"
atrace --async_start -z -c -b $BUFFER_KB $TRACE_CATEGORIES
echo " "

# Remove signal file erroneously left behind from previous tests
if [ -e "$SIGNAL_FILE" ]; then rm $SIGNAL_FILE; fi

while true
do
    #echo "LOOPBACK LISTENER: checking for file $SIGNAL_FILE"
    if [ -e "$SIGNAL_FILE" ] && [ -s "$SIGNAL_FILE" ]
    then
        contents=$(cat $SIGNAL_FILE)

        # Ensure that if more than one listener is running only one will consume signal
        > $SIGNAL_FILE

        if [ "$contents" == $TERMINATE_SIGNAL ]
        then
            exitListener
        else
            for filename in $contents
            do
                case $filename in
                *$SYSTRACE_SUFFIX)
                    echo "LOOPBACK LISTENER: dumping systrace to file $filename"
                    atrace --async_dump -z -c -b $BUFFER_KB $TRACE_CATEGORIES > $filename
                    ;;

                *$BUGREPORT_SUFFIX)
                    echo "LOOPBACK LISTENER: dumping bugreport to file $filename"
                    bugreport | gzip > $filename
                    ;;

                esac
            done

            echo "LOOPBACK LISTENER: Finished capture"

            rm $SIGNAL_FILE
        fi
    fi
    sleep 1
done
