summaryrefslogtreecommitdiff
path: root/android/scripts/bootchart.sh
blob: fbf40b8bee2d5cd1392e4ad7bb4fd2268ef8d728 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#!/system/bin/sh
#
# script to start and stop bootchart test.
#
# Copyright (C) 2014, Linaro Limited.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51   Franklin Street, Fifth Floor, Boston, MA  02110-1301,
# USA.
#
# owner: yongqin.liu@linaro.org
#
###############################################################################

local_file_path="$0"
local_file_parent=$(dirname "${local_file_path}")
local_file_parent=$(cd "${local_file_parent}"||exit; pwd)
# shellcheck source=android/scripts/common.sh
. "${local_file_parent}/common.sh"

LOGROOT="/data/bootchart"
start_f="${LOGROOT}/start"
enabled_f="${LOGROOT}/enabled"
stop_f="${LOGROOT}/stop"
DATA_TMP="/data/local/tmp"
TARBALL="${DATA_TMP}/bootchart.tgz"

start_bootchart(){
    echo "${BOOTCHART_TIME}" > ${start_f}
    if [ $? -ne 0 ]; then
        output_test_result "start_bootchart" "fail"
    else
        output_test_result "start_bootchart" "pass"
    fi
}

enabled_bootchart(){
    touch ${enabled_f}
    if [ $? -ne 0 ]; then
        output_test_result "enabled_bootchart" "fail"
    else
        output_test_result "enabled_bootchart" "pass"
    fi
}

stop_bootchart(){
    echo 1 > ${stop_f}
    if [ $? -ne 0 ]; then
        output_test_result "stop_bootchart" "fail"
    else
        output_test_result "stop_bootchart" "pass"
    fi
    rm -fr ${start_f} ${enabled_f}
    if [ $? -ne 0 ]; then
        output_test_result "rm_start_file" "fail"
    else
        output_test_result "rm_start_file" "pass"
    fi
}

collect_data(){
    FILES="header proc_stat.log proc_ps.log proc_diskstats.log kernel_pacct"
    if [ ! -d "${LOGROOT}" ]; then
        echo "There is no ${LOGROOT} directory!"
        return
    fi
    cd ${LOGROOT} || exit 1
    exist_files=""
    for f in ${FILES}; do
        if [ -f "${f}" ]; then
            exist_files="${exist_files} ${f}"
        fi
    done
    if [ -z "${exist_files}" ]; then
        output_test_result "bootchart_collect_data" "fail"
        exit 1
    fi
    # shellcheck disable=SC2086
    tar -czvf ${TARBALL} ${exist_files}
    if [ $? -ne 0 ]; then
        output_test_result "bootchart_collect_data" "fail"
        exit 1
    else
        output_test_result "bootchart_collect_data" "pass"
    fi

    bootchart_parse_cmd="/system/bin/bootchart_parse"
    bootchart_paser_res="${DATA_TMP}/bootchart_parse.result"
    if [ -x "${bootchart_parse_cmd}" ]; then
        ${bootchart_parse_cmd} > "${bootchart_paser_res}"
        if [ $? -ne 0 ]; then
            output_test_result "bootchart_parse" "fail"
            cd ${DATA_TMP} || exit 1
            [ -f  "bootchart_parse.result" ] && lava-test-run-attach bootchart_parse.result text/plain
            exit 1
        else
            output_test_result "bootchart_parse" "pass"
            while read -r line; do
                test_case_cmd=$(echo "${line}" |cut -d, -f1)
                start_time=$(echo "${line}" |cut -d, -f2)
                end_time=$(echo "${line}" |cut -d, -f3)
                output_test_result "${test_case_cmd}_starttime" "pass" "${start_time}" "ms"
                output_test_result "${test_case_cmd}_endtime" "pass" "${end_time}" "ms"
            done < "${bootchart_paser_res}"
        fi
        rm -fr "${bootchart_paser_res}"
    fi

    # shellcheck disable=SC2086
    rm -fr ${FILES}

    cd ${DATA_TMP} || exit 1
    if [ -n "$(which lava-test-run-attach)" ]; then
        [ -f "bootchart.tgz" ] && lava-test-run-attach bootchart.tgz application/x-gzip
        [ -f "lava_test_shell_raw_data.csv" ] && lava-test-run-attach lava_test_shell_raw_data.csv text/plain
    fi
}

main(){
    OPERATION="${1}"
    if [ "X${OPERATION}" = "X" ]; then
        echo "Please specify the operation of start or stop"
        exit 1
    fi
    BOOTCHART_TIME="${2}"
    if [ "X${BOOTCHART_TIME}" = "X" ]; then
        BOOTCHART_TIME=120
    fi
    export BOOTCHART_TIME

    case "X${OPERATION}" in
        "Xstart")
            start_bootchart
            enabled_bootchart
            ;;
        "Xstop")
            stop_bootchart
            #wait the file to be synced to disk completely
            sleep 5
            collect_data
            ;;
        *)
            output_test_result "bootchart" "fail"
            exit 1
            ;;
    esac
}

main "$@"