init.common.rc: optimize exec command

resolve wait time in several exec commands

Test: on marlin
Bug: 34518530
Change-Id: I3766dca0a293623673ed4e4ef09d5d77e48eebab
diff --git a/init.common.rc b/init.common.rc
index 2a5fef1..b9a3943 100755
--- a/init.common.rc
+++ b/init.common.rc
@@ -37,12 +37,8 @@
     symlink /dev/block/platform/soc/${ro.boot.bootdevice} /dev/block/bootdevice
 
     mount_all fstab.${ro.hardware} --early
-
+    # Start qseecomd after vendor/ mounted
     start qseecomd
-    # Busy loop to wait for qseecomd started
-    exec - root root system -- /system/bin/init.qcom.qseecomd.sh
-    # Start devices by sysfs trigger
-    start devstart_sh
 
     swapon_all fstab.${ro.hardware}
 
@@ -60,6 +56,10 @@
 
 on post-fs
     symlink /dev/block/platform/soc.0/f9824900.sdhci /dev/block/bootdevice
+    # Busy loop to wait for qseecomd started, prefetch property for shell for faster exec
+    exec - root root system -- /system/bin/init.qcom.qseecomd.sh ${sys.listeners.registered:-false}
+    # Start devices by sysfs trigger
+    start devstart_sh
 
 on late-fs
     # Start servicemanager for faster bootanim
@@ -79,7 +79,9 @@
     write /sys/block/dm-1/queue/read_ahead_kb 2048
 
 on post-fs-data
-    # restart qseecomd once we have /data/
+    # Set sku property
+    start mid_sh
+    # Restart qseecomd once we have /data/
     restart qseecomd
     mkdir /data/tombstones 0771 system system
     mkdir /tombstones/modem 0771 system system
@@ -250,15 +252,13 @@
     write /sys/module/peripheral_loader/parameters/proxy_timeout_ms ${persist.sys.pil_proxy_timeout}
     # Update dm-verity state and set partition.*.verified properties
     verity_update_state
-    # Busy loop to wait for devices booted by devstart_sh just in case device not ready
-    exec - root root system -- /system/bin/init.qcom.devwait.sh
+    # Busy loop to wait for devices, prefetch properties for shell for faster exec
+    exec - root root system -- /system/bin/init.qcom.devwait.sh ${sys.qcom.devup:-0}
 
 on boot
-    exec - root root system -- /system/bin/init.power.sh
-    exec - root root system -- /system/bin/init.mid.sh
-
-    exec - root root system readproc -- /system/bin/init.foreground.sh
-
+    # Exec init.mid.sh and init.foreground.sh in background
+    start power_sh
+    start foreground_sh
     # add a cpuset for the camera daemon
     # we want all cores for camera
     mkdir /dev/cpuset/camera-daemon
@@ -683,3 +683,24 @@
     start surfaceflinger
     start audioserver
     start bootanim
+
+service foreground_sh /system/bin/init.foreground.sh
+    class main
+    user root
+    group root system readproc
+    disabled
+    oneshot
+
+service power_sh /system/bin/init.power.sh
+    class main
+    user root
+    group root system
+    disabled
+    oneshot
+
+service mid_sh /system/bin/init.mid.sh
+    class main
+    user root
+    group root system
+    disabled
+    oneshot
diff --git a/init.qcom.devwait.sh b/init.qcom.devwait.sh
index aeee1d4..f6589f3 100755
--- a/init.qcom.devwait.sh
+++ b/init.qcom.devwait.sh
@@ -1,6 +1,7 @@
 #!/system/bin/sh
 
-up="`getprop sys.qcom.devup`"
+up="$1"
+
 while [ "$up" != "1" ]
 do
     sleep 0.1
diff --git a/init.qcom.qseecomd.sh b/init.qcom.qseecomd.sh
index 25a477d..f250fe1 100755
--- a/init.qcom.qseecomd.sh
+++ b/init.qcom.qseecomd.sh
@@ -1,6 +1,7 @@
 #!/system/bin/sh
 
-registered="`getprop sys.listeners.registered`"
+registered="$1"
+
 while [ "$registered" != "true" ]
 do
     sleep 0.1