timing.sh (1593B)
1 # Shared wall-clock helpers for Tier 1 shell wrappers. 2 3 t1_now_ms() { 4 perl -MTime::HiRes=time -e 'printf "%.0f\n", time() * 1000' 2>/dev/null || 5 printf '%s000\n' "$(date +%s 2>/dev/null || printf '0')" 6 } 7 8 t1_elapsed_ms() { 9 t1_em_start=$1 10 t1_em_end=$2 11 t1_em_dur=$((t1_em_end - t1_em_start)) 12 [ "$t1_em_dur" -lt 0 ] && t1_em_dur=0 13 printf '%s\n' "$t1_em_dur" 14 } 15 16 t1_slow_timing_enabled() { 17 case "${KIT_TIER1_SLOW_TIMING:-0}" in 18 1|yes|true|on) return 0 ;; 19 *) return 1 ;; 20 esac 21 } 22 23 t1_parallel_jobs() { 24 t1_pj_requested="${KIT_TIER1_JOBS:-${KIT_TEST_JOBS:-auto}}" 25 case "$t1_pj_requested" in 26 ""|1) printf '1\n'; return ;; 27 auto) 28 t1_pj_n=$(getconf _NPROCESSORS_ONLN 2>/dev/null || true) 29 [ -n "$t1_pj_n" ] || t1_pj_n=$(sysctl -n hw.ncpu 2>/dev/null || true) 30 case "$t1_pj_n" in ''|*[!0-9]*) t1_pj_n=1 ;; esac 31 [ "$t1_pj_n" -gt 6 ] && t1_pj_n=6 32 [ "$t1_pj_n" -lt 1 ] && t1_pj_n=1 33 printf '%s\n' "$t1_pj_n" 34 return ;; 35 *[!0-9]*) 36 printf 'invalid KIT_TIER1_JOBS=%s\n' "$t1_pj_requested" >&2 37 return 2 ;; 38 *) 39 [ "$t1_pj_requested" -lt 1 ] && t1_pj_requested=1 40 printf '%s\n' "$t1_pj_requested" ;; 41 esac 42 } 43 44 t1_parallel_running_count() { 45 jobs -pr | wc -l | tr -d '[:space:]' 46 } 47 48 t1_parallel_wait_for_slot() { 49 t1_pws_max=$1 50 while [ "$(t1_parallel_running_count)" -ge "$t1_pws_max" ]; do 51 sleep 0.05 52 done 53 } 54 55 t1_step_id() { 56 printf '%s' "$1" | tr -c 'A-Za-z0-9_.-' '_' 57 }