tests: extract stdout redirection
[platform/core/system/dlog.git] / tests / dlog_cpu.in
1 #!/bin/sh
2
3 # We don't do that here
4 exec 2> /dev/null
5
6 # Initialization inspired by dlog_test.in, TODO: unify somehow
7 if [ $# -ne 1 ]; then
8         echo "usage: $0 pipe|logger"
9         exit 1
10 fi
11
12 if [ "$1" = "pipe" ]; then
13         type="pipe"
14 elif [ "$1" = "logger" ]; then
15         type="logger"
16
17         # Make sure the newly launched daemon ignores old logs
18         touch /run/dlog/first_time
19 else
20         echo "usage: $0 pipe|logger"
21         exit 1
22 fi
23
24 NEEDS_TO_QUIT=0
25 capsh --print | grep Current | grep cap_syslog > /dev/null || { echo "*** ERROR: cap_syslog missing"; NEEDS_TO_QUIT=1; }
26 mount | grep ' / ' | grep rw > /dev/null || { echo "*** ERROR: root not mounted read-write"; NEEDS_TO_QUIT=1; }
27 [ $NEEDS_TO_QUIT -eq 0 ] || exit 1
28
29 export DLOG_CONFIG_PATH="@datadir@/dlog-$type.conf.cpu"
30 PATH=$PATH:@libexecdir@/libdlog/
31
32 LOGGER=-1
33 TEST=-1
34 RUNTIME_FILTERS_DIR="/tmp/dlog-filters/"
35 WRITER_DIR="/tmp/dlog-writers/"
36
37 cleanup() {
38         [ $LOGGER -ne -1 ] && kill $LOGGER > /dev/null 2>&1
39         [ $TEST -ne -1 ] && kill $TEST > /dev/null 2>&1
40         [ -d $RUNTIME_FILTERS_DIR ] && rm -rf $RUNTIME_FILTERS_DIR
41         [ -d $WRITER_DIR ] && rm -rf $WRITER_DIR
42 }
43 trap cleanup 0
44
45 mkdir -p "$RUNTIME_FILTERS_DIR"
46 mkdir -p "$WRITER_DIR"
47
48 # TODO: 2>&1 is a hack, but I don't see any other solution
49 for LENGTH in 10 500; do
50         sleep 1
51         echo "LOG LATENCY ($LENGTH characters):"
52         echo
53         MESSAGE=$(printf '%0.s&' $(seq 1 $LENGTH)) # Print the '&' character $LENGTH times
54
55         kill $LOGGER
56         sleep 1
57         dlog_logger &
58         LOGGER=$!
59         sleep 1
60         /usr/libexec/libdlog/dlog_stdout_benchmark 0 100000 $MESSAGE libdlog 2>&1 &
61         TEST=$!
62         sleep 1
63         echo "cpu usage of logger:"
64         ps --no-headers --quick-pid $LOGGER --format %cpu
65         echo "cpu usage of client:"
66         ps --no-headers --quick-pid $TEST --format %cpu
67         wait $TEST
68         echo
69
70         kill $LOGGER
71         sleep 1
72         dlog_logger &
73         LOGGER=$!
74         sleep 1
75         dlog_redirect_stdout --outtag "DLOG_BENCHMARK" --nofallback -- /usr/libexec/libdlog/dlog_stdout_benchmark 0 100000 $MESSAGE stdout 2>&1 &
76         TEST=$!
77         sleep 1
78         echo "cpu usage of logger:"
79         ps --no-headers --quick-pid $LOGGER --format %cpu
80         echo "cpu usage of client:"
81         ps --no-headers --quick-pid $TEST --format %cpu
82         wait $TEST
83         echo
84
85         kill $LOGGER
86         sleep 1
87         dlog_logger &
88         LOGGER=$!
89         sleep 1
90         dlog_redirect_stdout --outtag "DLOG_BENCHMARK" --nofallback -- /usr/libexec/libdlog/dlog_stdout_benchmark 1 100000 $MESSAGE stdout 2>&1 &
91         TEST=$!
92         sleep 1
93         echo "cpu usage of logger:"
94         ps --no-headers --quick-pid $LOGGER --format %cpu
95         echo "cpu usage of client:"
96         ps --no-headers --quick-pid $TEST --format %cpu
97         wait $TEST
98         echo
99 done