From 10a97c76c1764d7a3b7017cdd33d45de0e5a92cc Mon Sep 17 00:00:00 2001 From: Alexey 'Cluster' Avdyukhin Date: Wed, 22 Feb 2017 08:47:44 +0300 Subject: It's a trap! Shell integration optimization --- retroarch.hmod/bin/retroarch-clover | 97 ++++++++++++++++++++++++++++++-- retroarch.hmod/bin/retroarch-watchdog | 101 ---------------------------------- 2 files changed, 91 insertions(+), 107 deletions(-) delete mode 100755 retroarch.hmod/bin/retroarch-watchdog (limited to 'retroarch.hmod') diff --git a/retroarch.hmod/bin/retroarch-clover b/retroarch.hmod/bin/retroarch-clover index 7cee66b..11f7749 100755 --- a/retroarch.hmod/bin/retroarch-clover +++ b/retroarch.hmod/bin/retroarch-clover @@ -1,8 +1,93 @@ #!/bin/sh -core=$1 -shift -retroarch-watchdog $$ $core ${1+"$@"} & -while true; do -# Zzz... I'll sleep untill my death -sleep 42 +HOME=/etc/libretro +corename=$1 +core=$HOME/core/$1_libretro.so +rom=$2 +id=$(echo $(basename "$rom") | cut -f 1 -d '.') +autosave="/var/cache/$id.state.auto" +rsram="/var/cache/$id.srm" +t_suffix=_time.txt +shift 2 + +crt=0 +allow_crt=0 + +while [ $# -gt 0 ]; do + [ "$1" == "--load-state-file" ] && load=$2 + [ "$1" == "--save-on-quit" ] && save=$2 + [ "$1" == "--save-screenshot-on-quit" ] && screenshot=$2 + [ "$1" == "--save-data-backing-file" ] && sram=$2 + [ "$1" == "--graphic-filter" ] && filter=$2 + [ "$1" == "--enable-crt-scanlines" ] && crt=1 + [ "$1" == "--ra-allow-crt" ] && allow_crt=1 + [ "$1" == "--ra-extra" ] && extra=$2 + [ "$1" == "--ra-nosaves" ] && nosaves=1 + shift done + +# saves if any +rm -f /var/cache/*.state /var/cache/*.auto /var/cache/*.srm +[ ! -z "$load" ] && [ -f "$load" ] && [ -z "$nosaves" ] && cp -f "$load" "$autosave" && echo cp -f "$load" "$autosave" +[ ! -z "$sram" ] && [ -f "$sram" ] && cp -f "$sram" "$rsram" && echo cp -f "$sram" "$rsram" + +# core provided ratio for CRT mode +[ "$filter" == "crt720" ] && ratio=21 && smooth=false && crt=1 +# core provided ratio for 4:3 mode +[ "$filter" == "gpu720" ] && ratio=21 && smooth=false +# pixel perfect - 1:1 for pixel perfect mode +[ "$filter" == "ppu" ] && ratio=20 && smooth=false + +# Allow scanlines only for simple systems +[ "$allow_crt" == "1" ] || crt=0 + +# Set aspect ratio in config +[ -z "$ratio" ] || sed -i -e 's/aspect_ratio_index = "[^"]*"/aspect_ratio_index = "'$ratio'"/g' /etc/libretro/retroarch.cfg + +# enable shader scanlines if need +if [ "$crt" == "1" ]; then + sed -i -e 's/video_shader = "[^"]*"/video_shader = "~\/shaders\/retroarch\.glslp"/g' /etc/libretro/retroarch.cfg + rsync -a -c /etc/libretro/shaders/scanline.glslp /etc/libretro/shaders/retroarch.glslp +else + sed -i -e 's/video_shader = "[^"]*"/video_shader = ""/g' /etc/libretro/retroarch.cfg +fi + +# Start timestamp +ts=$(date +"%s") +tm=0 +[ -f "$load$t_suffix" ] && tm=$(cat "$load$t_suffix") + +retroarch -c "$HOME/retroarch.cfg" -vfL "$core" "$rom" $extra & +rpid=$! +trap "kill $rpid" SIGTERM +sleep 2 +rm -f /var/cache/*.state /var/cache/*.auto /var/cache/*.srm + +while [ "$(ps -o pid | grep -c $rpid)" == "1" ]; do +usleep 100000 +done + +kill $rpid +# We can't let clover shell load so fast, so killing it +pkill -KILL clover-mcp + +[ ! -z "$save" ] && mkdir -p $(dirname "$save") +[ ! -z "$sram" ] && mkdir -p $(dirname "$sram") +[ ! -z "$screenshot" ] && mkdir -p $(dirname "$screenshot") + +# Screenshot! It's not so fast... +[ -z "$screenshot" ] || [ -z "$nosaves" ] && fbgrab -z 0 "$screenshot" + +# Saves! +[ ! -z "$save" ] && [ -f "$autosave" ] && [ -z "$nosaves" ] && mv -f "$autosave" "$save" +[ ! -z "$sram" ] && [ -f "$rsram" ] && mv -f "$rsram" "$sram" + +# Time +ts2=$(date +"%s") +tm=$((tm + ts2 - ts)) +echo $tm > "$save$t_suffix" + +# Back to shell +clover-mcp + +return 0 + diff --git a/retroarch.hmod/bin/retroarch-watchdog b/retroarch.hmod/bin/retroarch-watchdog deleted file mode 100755 index 5608e83..0000000 --- a/retroarch.hmod/bin/retroarch-watchdog +++ /dev/null @@ -1,101 +0,0 @@ -#!/bin/sh -HOME=/etc/libretro -pid=$1 -corename=$2 -core=$HOME/core/$2_libretro.so -rom=$3 -id=$(echo $(basename "$rom") | cut -f 1 -d '.') -autosave="/var/cache/$id.state.auto" -rsram="/var/cache/$id.srm" -t_suffix=_time.txt -shift 3 - -crt=0 -allow_crt=0 - -while [ $# -gt 0 ]; do - [ "$1" == "--load-state-file" ] && load=$2 - [ "$1" == "--save-on-quit" ] && save=$2 - [ "$1" == "--save-screenshot-on-quit" ] && screenshot=$2 - [ "$1" == "--save-data-backing-file" ] && sram=$2 - [ "$1" == "--graphic-filter" ] && filter=$2 - [ "$1" == "--enable-crt-scanlines" ] && crt=1 - [ "$1" == "--ra-allow-crt" ] && allow_crt=1 - [ "$1" == "--ra-extra" ] && extra=$2 - [ "$1" == "--ra-nosaves" ] && nosaves=1 - shift -done - -# saves if any -rm -f /var/cache/*.state /var/cache/*.auto /var/cache/*.srm -[ ! -z "$load" ] && [ -f "$load" ] && [ -z "$nosaves" ] && cp -f "$load" "$autosave" && echo cp -f "$load" "$autosave" -[ ! -z "$sram" ] && [ -f "$sram" ] && cp -f "$sram" "$rsram" && echo cp -f "$sram" "$rsram" - -# core provided ratio for CRT mode -[ "$filter" == "crt720" ] && ratio=21 && smooth=false && crt=1 -# core provided ratio for 4:3 mode -[ "$filter" == "gpu720" ] && ratio=21 && smooth=false -# pixel perfect - 1:1 for pixel perfect mode -[ "$filter" == "ppu" ] && ratio=20 && smooth=false - -# Allow scanlines only for simple systems -[ "$allow_crt" == "1" ] || crt=0 - -# set aspect ratio in config -[ -z "$ratio" ] || sed -i -e 's/aspect_ratio_index = "[^"]*"/aspect_ratio_index = "'$ratio'"/g' /etc/libretro/retroarch.cfg - -# Don't write filtering option in config -#[ -z "$smooth" ] || sed -i -e 's/video_smooth = "[^"]*"/video_smooth = "'$smooth'"/g' /etc/libretro/retroarch.cfg - -# enable shader scanlines if need -if [ "$crt" == "1" ]; then - sed -i -e 's/video_shader = "[^"]*"/video_shader = "~\/shaders\/retroarch\.glslp"/g' /etc/libretro/retroarch.cfg - rsync -a -c /etc/libretro/shaders/scanline.glslp /etc/libretro/shaders/retroarch.glslp -else - sed -i -e 's/video_shader = "[^"]*"/video_shader = ""/g' /etc/libretro/retroarch.cfg -fi - -# Start timestamp -ts=$(date +"%s") -tm=0 -[ -f "$load$t_suffix" ] && tm=$(cat "$load$t_suffix") - -retroarch -c "$HOME/retroarch.cfg" -vfL "$core" "$rom" $extra & -rpid=$! -sleep 1 -rm -f /var/cache/*.state /var/cache/*.auto /var/cache/*.srm - -while true; do - if [ "$(ps -o pid | grep -c $pid)" == "0" ]; then - kill $rpid - break - fi - if [ "$(ps -o pid | grep -c $rpid)" == "0" ]; then - kill $pid - break - fi - usleep 100000 -done - -# We can't let clover shell load so fast, so killing it -pkill -KILL clover-mcp -pkill -KILL ReedPlayer-Clover - -[ ! -z "$save" ] && mkdir -p $(dirname "$save") -[ ! -z "$sram" ] && mkdir -p $(dirname "$sram") -[ ! -z "$screenshot" ] && mkdir -p $(dirname "$screenshot") - -# Screenshot! It's not so fast... -[ -z "$screenshot" ] || [ -z "$nosaves" ] && fbgrab -z 0 "$screenshot" - -# Saves! -[ ! -z "$save" ] && [ -f "$autosave" ] && [ -z "$nosaves" ] && mv -f "$autosave" "$save" -[ ! -z "$sram" ] && [ -f "$rsram" ] && mv -f "$rsram" "$sram" - -# Time -ts2=$(date +"%s") -tm=$((tm + ts2 - ts)) -echo $tm > "$save$t_suffix" - -# Back to shell -clover-mcp -- cgit v1.2.3