#!/system/bin/sh
#Adrenaline Engine
#ThunderBolt
#Kick Ass Kernelizer
#Credits:
# pikachu01@ xda
# iandol @ xda
# zacharias.maladroit
# voku1987
# collin_ph@xda
# zeppelinrox @ xda
# Google.com
#Optimized for Galaxy Ace 
#By ImbaWind @ XDA Developers
# ===========================================
# ===========================================
# #           VERSION      [4 . 2]          #
# ===========================================
# ===========================================

ver=4.2
echo "Current Version: [ $ver ]" > /data/adrenaline/engine/version

# ===========================================
# ===========================================
# #   LOGGING SYSTEM | Adrenaline Engine    #
# ===========================================
# #         Thanks To iandol @ XDA          #
# #         For The Idea and Sample         #
# ===========================================
# ===========================================

if [ -e /data/adrenaline/engine/etc/build.prop ]; then
	rm -f /data/adrenaline/engine/etc/build.prop
	cp /system/build.prop /data/adrenaline/engine/etc/
else 
	cp /system/build.prop /data/adrenaline/engine/etc/
fi;

rm -f /data/adrenaline/engine/etc/init.d/*
cp /system/etc/init.d/* /data/adrenaline/engine/etc/init.d

if [ -e /data/adrenaline/engine/etc/AE_CHECK ]; then
	echo "File Already Exists"
else
	touch /data/adrenaline/engine/etc/AE_CHECK
fi;

AC=/data/adrenaline/engine/etc/AE_CHECK

if [ -e /data/adrenaline/engine/etc/AE_COND ]; then
   if [ -s /data/adrenaline/engine/etc/AE_COND ]; then
	  rm -f /data/adrenaline/engine/etc/AE_COND
	  touch /data/adrenaline/engine/etc/AE_COND
	  echo "`date`" >> $AC
      echo "AE Ran Successfully Last Time..." >> $AC
	  echo "" >> $AC
   else
	  echo "`date`" >> $AC
      echo "AE Errored Out Last Time ->-> Exiting Engine!" > $AC
	  echo "" >> $AC
      exit
   fi;
else
   touch /data/adrenaline/engine/etc/AE_COND
   echo "`date`" >> $AC
   echo "AE File Created..." >> $AC
   echo "" >> $AC
fi;

 
if [ -e /data/adrenaline/engine/etc/AE_DEBUG.log ]; then
     rm -f /data/adrenaline/engine/etc/AE_DEBUG.log
	  touch /data/adrenaline/engine/etc/AE_DEBUG.log 
else
	 touch /data/adrenaline/engine/etc/AE_DEBUG.log
fi;
     LOG=/data/adrenaline/engine/etc/AE_DEBUG.log 
	 echo "AE Version : $ver" >> $LOG
     echo "Script Starting At `date`" >> $LOG
	 echo "Android Version: `getprop ro.build.id`" >> $LOG
	 echo "ROM: `getprop ro.build.display.id`" >> $LOG
     echo "Build: `getprop ro.build.version.release`" >> $LOG
     echo "Kernel: `uname -r`" >> $LOG
	 echo "" >> $LOG
	 echo "" >> $LOG
	 echo "" >> $LOG
	 echo "" >> $LOG
	 echo "" >> $LOG
	 echo "# ===========================================" >> $LOG
	 echo "" >> $LOG
     exec >> $LOG 2>&1
     set -x



# ===========================================
# ===========================================
# #           I/O related tweaks            #
# ===========================================
# ===========================================

echo "Applying I/O related tweaks..." >> $LOG
STL=`ls -d /sys/block/stl*`;
BML=`ls -d /sys/block/bml*`;
MMC=`ls -d /sys/block/mmc*`;


#I/O scheduler
avail_io=/sys/block/mmcblk0/queue/scheduler
check=`cat $avail_io`

#sio not working , needs more testing
if [ grep "sio" /sys/block/mmcblk0/queue/scheduler ]; then
	echo "Applying SIO as Scheduler..." >> $LOG
	for i in $STL $BML $MMC;
	do
		echo "sio" > $i/queue/scheduler; 
	done;
else
	echo "Applying NOOP as Scheduler..." >> $LOG
	for i in $STL $BML $MMC;
	do
		echo "noop" > $i/queue/scheduler; 
	done;
fi

echo "Optimizing Non-Rotating Storage..." >> $LOG
# Optimize non-rotating storage; 
for i in $STL $BML $MMC;
do
	#IMPORTANT!
	if [ -e $i/queue/rotational ]; 
	then
		echo 0 > $i/queue/rotational; 
	fi;
	if [ -e $i/queue/nr_requests ];
	then
		echo 8192 > $i/queue/nr_requests; # for starters: keep it sane
	fi;
	
	# deadline/VR/SIO scheduler specific
	if [ -e $i/queue/iosched/fifo_batch ];
	then
		echo 1 > $i/queue/iosched/fifo_batch;
	fi;
	if [ -e $i/queue/iosched/writes_starved ];
	then
		echo 1 > $i/queue/iosched/writes_starved;
	fi;
	
echo "Disabling I/O Stats To Reduce Overhead..." >> $LOG
#disable iostats to reduce overhead  # idea by kodos96 - thanks !
	if [ -e $i/queue/iostats ];
	then
		echo "0" > $i/queue/iostats;
	fi;

echo "Optimizing Read_ahead..." >> $LOG
# Optimize for read- & write-throughput; 
# Optimize for readahead; 
	if [ -e $i/queue/read_ahead_kb ];
	then
		echo "256" >  $i/queue/read_ahead_kb;
	fi;
	
done;


# ===========================================
# ===========================================
# #         R/W Boost : [2048 kb]           #
# ===========================================
# ===========================================

echo "Boosting R/W..." >> $LOG
if [ -e /sys/devices/virtual/bdi/179:0/read_ahead_kb ];
then
    echo "2048" > /sys/devices/virtual/bdi/179:0/read_ahead_kb;
fi;
	
if [ -e /sys/devices/virtual/bdi/179:8/read_ahead_kb ];
  then
    echo "2048" > /sys/devices/virtual/bdi/179:8/read_ahead_kb;
fi;

if [ -e /sys/devices/virtual/bdi/179:28/read_ahead_kb ];
  then
    echo "2048" > /sys/devices/virtual/bdi/179:28/read_ahead_kb;
fi;

if [ -e /sys/devices/virtual/bdi/179:33/read_ahead_kb ];
  then
    echo "2048" > /sys/devices/virtual/bdi/179:33/read_ahead_kb;
fi;

if [ -e /sys/devices/virtual/bdi/default/read_ahead_kb ];
  then
    echo "256" > /sys/devices/virtual/bdi/default/read_ahead_kb;
fi;



# ===========================================
# ===========================================
# #           Mount related tweaks          #
# ===========================================
# ===========================================

echo "Applying Mount-Related Tweaks..." >> $LOG
# Remount all partitions with noatime
for k in $(busybox mount | grep relatime | cut -d " " -f3);
do

busybox mount -o remount,noatime $k;
done;



# ===========================================
# ===========================================
# #     VM Settings | Adrenaline Engine     #
# ===========================================
# ===========================================

echo "Applying VM Settings..." >> $LOG
echo 3 > /proc/sys/vm/page-cluster;
echo 3000 > /proc/sys/vm/dirty_expire_centisecs;
echo 500 > /proc/sys/vm/dirty_writeback_centisecs;
echo "5120" > /proc/sys/vm/min_free_kbytes;
echo "0" > /proc/sys/vm/oom_kill_allocating_task;
echo "0" > /proc/sys/vm/panic_on_oom;
echo "35" > /proc/sys/vm/dirty_background_ratio;
echo "70" > /proc/sys/vm/dirty_ratio;
echo "10" > /proc/sys/vm/vfs_cache_pressure;
echo "1" > /proc/sys/vm/overcommit_memory;
echo "4" > /proc/sys/vm/min_free_order_shift;
echo "0" > /proc/sys/vm/laptop_mode;
echo "0" > /proc/sys/vm/block_dump;
echo "1" > /proc/sys/vm/oom_dump_tasks;
  


# ===========================================
# ===========================================
# #   Network Tweaks | Adrenaline Engine    #
# ===========================================
# ===========================================

echo "Applying Network Tweaks..." >> $LOG
echo "0" > /proc/sys/net/ipv4/tcp_timestamps;
echo "1" > /proc/sys/net/ipv4/tcp_tw_reuse;
echo "1" > /proc/sys/net/ipv4/tcp_sack;
echo "1" > /proc/sys/net/ipv4/tcp_dsack;
echo "1" > /proc/sys/net/ipv4/tcp_tw_recycle;
echo "1" > /proc/sys/net/ipv4/tcp_window_scaling;
echo "5" > /proc/sys/net/ipv4/tcp_keepalive_probes;
echo "30" > /proc/sys/net/ipv4/tcp_keepalive_intvl;
echo "30" > /proc/sys/net/ipv4/tcp_fin_timeout;
echo "1" > /proc/sys/net/ipv4/tcp_moderate_rcvbuf;
echo "1" > /proc/sys/net/ipv4/route/flush;
echo "6144" > /proc/sys/net/ipv4/udp_rmem_min;
echo "6144" > /proc/sys/net/ipv4/udp_wmem_min;
echo "1" > /proc/sys/net/ipv4/tcp_rfc1337;
echo "0" > /proc/sys/net/ipv4/ip_no_pmtu_disc;
echo "0" > /proc/sys/net/ipv4/tcp_ecn;
echo "6144 87380 2097152" > /proc/sys/net/ipv4/tcp_wmem;
echo "6144 87380 2097152" > /proc/sys/net/ipv4/tcp_rmem;
echo "1" > /proc/sys/net/ipv4/tcp_fack;
echo "2" > /proc/sys/net/ipv4/tcp_synack_retries;
echo "2" > /proc/sys/net/ipv4/tcp_syn_retries;
echo "1" > /proc/sys/net/ipv4/tcp_no_metrics_save;
echo "1800" > /proc/sys/net/ipv4/tcp_keepalive_time;
echo "0" > /proc/sys/net/ipv4/ip_forward;
echo "0" > /proc/sys/net/ipv4/conf/default/accept_source_route;
echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route;
echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects;
echo "0" > /proc/sys/net/ipv4/conf/default/accept_redirects;
echo "0" > /proc/sys/net/ipv4/conf/all/secure_redirects;
echo "0" > /proc/sys/net/ipv4/conf/default/secure_redirects;
echo "0" > /proc/sys/net/ipv4/ip_dynaddr;
echo "1440000" > /proc/sys/net/ipv4/tcp_max_tw_buckets;
echo "57344 57344 524288" > /proc/sys/net/ipv4/tcp_mem;
echo "1440000" > /proc/sys/net/ipv4/tcp_max_tw_buckets;
echo "2097152" > /proc/sys/net/core/rmem_max;
echo "2097152" > /proc/sys/net/core/wmem_max;
echo "262144" > /proc/sys/net/core/rmem_default;
echo "262144" > /proc/sys/net/core/wmem_default;
echo "20480" > /proc/sys/net/core/optmem_max;
echo "2500" > /proc/sys/net/core/netdev_max_backlog;
echo "50" > /proc/sys/net/unix/max_dgram_qlen;



# ===========================================
# ===========================================
# #           Kernel | FS Tweaks            #
# ===========================================
# ===========================================

echo "Applying Kernel and FS Tweaks..." >> $LOG
echo "500 512000 64 2048" > /proc/sys/kernel/sem;
echo "268435456" > /proc/sys/kernel/shmmax;
echo "2097152" > /proc/sys/kernel/shmall;
echo "4096" > /proc/sys/kernel/shmmni;
echo "2048" > /proc/sys/kernel/msgmni;
echo "64000" > /proc/sys/kernel/msgmax;
echo "30" > /proc/sys/kernel/panic;
echo "0" > /proc/sys/kernel/panic_on_oops;
echo "5000" > /proc/sys/kernel/threads-max;
echo "10" > /proc/sys/fs/lease-break-time;
echo "65536" > /proc/sys/fs/file-max;



# ===========================================
# ===========================================
# #    Prop Tweaks | Adrenaline Engine      #
# ===========================================
# ===========================================
# Thanks to iandol for the limit 
# check idea and being a mentor

echo "Applying Prop Tweaks..." >> $LOG
if [ $(getprop | wc -l) -lt 223 ]; then
	echo "-Lower Than 223" >> $LOG
	# Website Bypass | Credit to Varun
	setprop net.rmnet0.dns1 8.8.8.8
	setprop net.rmnet0.dns2 8.8.4.4
	setprop net.dns1 8.8.8.8
	setprop net.dns2 8.8.4.4
	# Scrolling Responsiveness
	setprop windowsmgr.max_events_per_sec 180
	# Force Launcher into memory
	setprop ro.HOME_APP_ADJ 1
	# Graphics Enhancement
	setprop debug.performance.tuning 1
	setprop video.accelerate.hw 1
	setprop ro.media.dec.jpeg.memcap 8000000
	setprop ro.media.enc.hprof.vid.bps 8000000
	setprop persist.sys.use_dithering 1
	# Power Saving Tweaks
	setprop ro.ril.disable.power.collapse 1
	setprop pm.sleep_mode 1
	# Dialing Tweaks
	setprop ro.telephony.call_ring.delay 0
	setprop ro.lge.proximity.delay 0
	setprop mot.proximity.delay 0
	# Overall Performance Tweaks
	setprop ro.kernel.android.checkjni 0
	setprop persist.sys.purgeable_assets 1
	# Wireless Speed Tweaks
	setprop net.tcp.buffersize.default 4096,87380,256960,4096,16384,110208
	setprop net.tcp.buffersize.wifi 524288,1048576,2097152,262144,524288,1048576
	setprop net.tcp.buffersize.umts 4096,87380,256960,4096,16384,110208
	setprop net.tcp.buffersize.gprs 4096,87380,256960,4096,16384,110208
	setprop net.tcp.buffersize.edge 4096,87380,256960,4096,16384,110208
elif [ $(getprop | wc -l) -lt 231 ]; then
	echo "-Lower Than 231" >> $LOG
	# Website Bypass | Credit to Varun
	setprop net.rmnet0.dns1 8.8.8.8
	setprop net.rmnet0.dns2 8.8.4.4
	setprop net.dns1 8.8.8.8
	setprop net.dns2 8.8.4.4
	# Scrolling Responsiveness
	setprop windowsmgr.max_events_per_sec 180
	# Force Launcher into memory
	setprop ro.HOME_APP_ADJ 1
	# Graphics Enhancement
	setprop debug.performance.tuning 1
	setprop video.accelerate.hw 1
	setprop ro.media.dec.jpeg.memcap 8000000
	setprop ro.media.enc.hprof.vid.bps 8000000
	setprop persist.sys.use_dithering 1
	# Power Saving Tweaks
	setprop ro.ril.disable.power.collapse 1
	setprop pm.sleep_mode 1
	# Overall Performance Tweaks
	setprop ro.kernel.android.checkjni 0
	setprop persist.sys.purgeable_assets 1
elif [ $(getprop | wc -l) -lt 235 ]; then
	echo "-Lower Than 235" >> $LOG
	# Scrolling Responsiveness
	setprop windowsmgr.max_events_per_sec 180
	# Force Launcher into memory
	setprop ro.HOME_APP_ADJ 1
	# Graphics Enhancement
	setprop debug.performance.tuning 1
	setprop video.accelerate.hw 1
	setprop ro.media.dec.jpeg.memcap 8000000
	setprop ro.media.enc.hprof.vid.bps 8000000
	setprop persist.sys.use_dithering 1
	# Power Saving Tweaks
	setprop ro.ril.disable.power.collapse 1
	setprop pm.sleep_mode 1
	# Overall Performance Tweaks
	setprop ro.kernel.android.checkjni 0
	setprop persist.sys.purgeable_assets 1
elif [ $(getprop | wc -l) -lt 241 ]; then
	echo "-Lower Than 241" >> $LOG
	# Scrolling Responsiveness
	setprop windowsmgr.max_events_per_sec 180
	# Graphics Enhancement
	setprop debug.performance.tuning 1
	setprop video.accelerate.hw 1
	# Overall Performance Tweaks
	setprop ro.kernel.android.checkjni 0
	setprop persist.sys.purgeable_assets 1
elif [ $(getprop | wc -l) -lt 245 ]; then
	echo "-Lower Than 245" >> $LOG
	# Graphics Enhancement
	setprop debug.performance.tuning 1
	setprop video.accelerate.hw 1
else
	echo "Not Enough Prop Slot" >> $LOG
fi

	



# ===========================================
# ===========================================
# # Clean Up Junk Files | Adrenaline Engine #
# ===========================================
# ===========================================

echo "Cleaning Up Junk Files..." >> $LOG
rm -f /data/local/*.apk
rm -f /data/local/tmp/*.apk
rm -f /data/*.log
rm -f /data/log/*.log
rm -f /cache/*.*
rm -f /cache/recovery/*.*
rm -f /data/system/dropbox/*.txt
rm -f /data/backup/pending/*.tmp
rm -f /data/tombstones/*.*

# END OF AE
echo "Script Ran Succesfully at `date`" > /data/adrenaline/engine/etc/AE_COND