1# -*- shell-script -*- :mode=shellscript:
2#
3# Author: Makarius
4#
5# timestop - report timing based on environment (cf. timestart.bash)
6#
7
8TIMES_REPORT=""
9
10function show_times ()
11{
12  local TIMES_START="$TIMES_RESULT"
13  get_times
14  local TIMES_STOP="$TIMES_RESULT"
15  local TIME1
16  local TIME2
17  local KIND
18  for KIND in 1 2
19  do
20    local START=$(echo "$TIMES_START" | cut -d " " -f $KIND)
21    local STOP=$(echo "$TIMES_STOP" | cut -d " " -f $KIND)
22
23    local TIME=$(( $STOP - $START ))
24    eval "TIME${KIND}=$TIME"
25
26    local SECS=$(( $TIME % 60 ))
27    [ $SECS -lt 10 ] && SECS="0$SECS"
28    local MINUTES=$(( ($TIME / 60) % 60 ))
29    [ $MINUTES -lt 10 ] && MINUTES="0$MINUTES"
30    local HOURS=$(( $TIME / 3600 ))
31
32    local KIND_NAME
33    [ "$KIND" = 1 ] && KIND_NAME="elapsed time"
34    [ "$KIND" = 2 ] && KIND_NAME="cpu time"
35    local RESULT="${HOURS}:${MINUTES}:${SECS} ${KIND_NAME}"
36
37    if [ ${KIND} -eq 1 -o ${TIME} -ge 5 ]; then
38      if [ -z "$TIMES_REPORT" ]; then
39        TIMES_REPORT="$RESULT"
40      else
41        TIMES_REPORT="$TIMES_REPORT, $RESULT"
42      fi
43    fi
44  done
45  if let "$TIME1 >= 5 && $TIME2 >= 5"
46  then
47    local FACTOR=$(( $TIME2 * 100 / $TIME1 ))
48    local FACTOR1=$(( $FACTOR / 100 ))
49    local FACTOR2=$(( $FACTOR % 100 ))
50    if let "$FACTOR2 < 10"; then FACTOR2="0$FACTOR2"; fi
51    TIMES_REPORT="$TIMES_REPORT, factor ${FACTOR1}.${FACTOR2}"
52  fi
53}
54
55show_times  # sets TIMES_REPORT
56
57unset TIMES_RESULT get_times show_times
58