2 * Copyright (C) 2011 Linaro Limited
3 * Copyright (C) 2010 0xlab - http://0xlab.org/
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
17 * Authored by Joseph Chang (bizkit) <bizkit@0xlab.org>
20 package org.opensolaris.hub.libmicro;
22 import org.zeroxlab.zeroxbenchmark.*;
24 import android.os.Bundle;
25 import android.content.Intent;
26 import android.util.Log;
28 import java.util.Arrays;
29 import java.util.ArrayList;
30 import java.util.List;
32 public class NativeTesterMicro extends NativeTester {
34 public final String TAG = "TesterLibMicro";
35 private final double ERROR_VALUE = -1.0;
36 public static final String REPORT = "REPORT";
37 public static final String RESULT = "RESULT";
38 private static final String Opts = "-E -C 70 -L -S -W";
39 public static final List<String> COMMANDS = Arrays.asList(
41 "getpid " + Opts + " -N getpid -I 5",
43 "getenv " + Opts + " -N getenv -s 100 -I 100",
44 "getenv " + Opts + " -N getenvT2 -s 100 -I 100 -T 2",
46 "gettimeofday " + Opts + " -N gettimeofday",
48 "log " + Opts + " -N log -I 20",
50 "exp " + Opts + " -N exp -I 20",
52 "lrand48 " + Opts + " -N lrand48",
54 "memset " + Opts + " -N memset_10 -s 10 -I 10 ",
55 "memset " + Opts + " -N memset_256 -s 256 -I 20",
56 "memset " + Opts + " -N memset_256_u -s 256 -a 1 -I 20 ",
57 "memset " + Opts + " -N memset_1k -s 1k -I 100",
58 "memset " + Opts + " -N memset_4k -s 4k -I 250",
59 "memset " + Opts + " -N memset_4k_uc -s 4k -u -I 400",
60 "memset " + Opts + " -N memset_10k -s 10k -I 600 ",
61 "memset " + Opts + " -N memset_1m -s 1m -I 200000",
62 // "memset " + Opts + " -N memset_10m -s 10m -I 2000000 ",
63 // "memset " + Opts + " -N memsetP2_10m -s 10m -P 2 -I 2000000 ",
65 // "memrand " + Opts + " -N memrand -s 128m -B 10000",
67 "isatty " + Opts + " -N isatty_yes ",
68 // "isatty " + Opts + " -N isatty_no -f $IFILE",
70 "malloc " + Opts + " -N malloc_10 -s 10 -g 10 -I 50",
71 "malloc " + Opts + " -N malloc_100 -s 100 -g 10 -I 50",
72 "malloc " + Opts + " -N malloc_1k -s 1k -g 10 -I 50",
73 "malloc " + Opts + " -N malloc_10k -s 10k -g 10 -I 50",
74 "malloc " + Opts + " -N malloc_100k -s 100k -g 10 -I 2000",
76 "malloc " + Opts + " -N mallocT2_10 -s 10 -g 10 -T 2 -I 200",
77 "malloc " + Opts + " -N mallocT2_100 -s 100 -g 10 -T 2 -I 200",
78 "malloc " + Opts + " -N mallocT2_1k -s 1k -g 10 -T 2 -I 200",
79 "malloc " + Opts + " -N mallocT2_10k -s 10k -g 10 -T 2 -I 200",
80 "malloc " + Opts + " -N mallocT2_100k -s 100k -g 10 -T 2 -I 10000",
82 "close " + Opts + " -N close_bad -B 32 -b",
83 // "close " + Opts + " -N close_tmp -B 32 -f $TFILE",
84 // "close " + Opts + " -N close_usr -B 32 -f $VFILE",
85 "close " + Opts + " -N close_zero -B 32 -f /dev/zero",
87 "memcpy " + Opts + " -N memcpy_10 -s 10 -I 10 ",
88 "memcpy " + Opts + " -N memcpy_1k -s 1k -I 50",
89 "memcpy " + Opts + " -N memcpy_10k -s 10k -I 800",
90 // "memcpy " + Opts + " -N memcpy_1m -s 1m -I 500000",
91 // "memcpy " + Opts + " -N memcpy_10m -s 10m -I 5000000",
93 "strcpy " + Opts + " -N strcpy_10 -s 10 -I 5 ",
94 "strcpy " + Opts + " -N strcpy_1k -s 1k -I 100",
96 "strlen " + Opts + " -N strlen_10 -s 10 -I 5",
97 "strlen " + Opts + " -N strlen_1k -s 1k -I 100",
99 "strchr " + Opts + " -N strchr_10 -s 10 -I 5",
100 "strchr " + Opts + " -N strchr_1k -s 1k -I 200",
101 "strcmp " + Opts + " -N strcmp_10 -s 10 -I 10",
102 "strcmp " + Opts + " -N strcmp_1k -s 1k -I 200",
104 "strcasecmp " + Opts + " -N scasecmp_10 -s 10 -I 50",
105 "strcasecmp " + Opts + " -N scasecmp_1k -s 1k -I 20000",
107 "strtol " + Opts + " -N strtol -I 20 ",
109 "mutex " + Opts + " -N mutex_st -I 10",
110 "mutex " + Opts + " -N mutex_mt -t -I 10 ",
111 "mutex " + Opts + " -N mutex_T2 -T 2 -I 100",
113 // "longjmp " + Opts + " -N longjmp -I 10",
114 // "siglongjmp " + Opts + " -N siglongjmp -I 20",
116 "getrusage " + Opts + " -N getrusage -I 200",
118 "times " + Opts + " -N times -I 200",
119 "time " + Opts + " -N time -I 50",
120 "localtime_r " + Opts + " -N localtime_r -I 200 ",
121 "strftime " + Opts + " -N strftime -I 10000 ",
123 "mktime " + Opts + " -N mktime -I 500 ",
124 "mktime " + Opts + " -N mktimeT2 -T 2 -I 1000 ",
126 // "cascade_mutex " + Opts + " -N c_mutex_1 -I 50",
127 // "cascade_mutex " + Opts + " -N c_mutex_10 -T 10 -I 5000",
128 // "cascade_mutex " + Opts + " -N c_mutex_200 -T 200 -I 2000000",
130 // "cascade_cond " + Opts + " -N c_cond_1 -I 100",
131 // "cascade_cond " + Opts + " -N c_cond_10 -T 10 -I 3000",
132 // "cascade_cond " + Opts + " -N c_cond_200 -T 200 -I 2000000",
134 "cascade_flock " + Opts + " -N c_flock -I 1000 ",
135 "cascade_flock " + Opts + " -N c_flock_10 -T 10 -I 50000",
136 "cascade_flock " + Opts + " -N c_flock_200 -T 200 -I 5000000",
138 "cascade_fcntl " + Opts + " -N c_fcntl_1 -I 2000 ",
139 "cascade_fcntl " + Opts + " -N c_fcntl_10 -T 10 -I 20000",
140 "cascade_fcntl " + Opts + " -N c_fcntl_200 -T 200 -I 5000000",
142 "file_lock " + Opts + " -N file_lock -I 1000 ",
144 "getsockname " + Opts + " -N getsockname -I 100",
145 "getpeername " + Opts + " -N getpeername -I 100",
147 // "chdir " + Opts + " -N chdir_tmp -I 2000 $TDIR1 $TDIR2",
148 // "chdir " + Opts + " -N chdir_usr -I 2000 $VDIR1 $VDIR2",
150 // "chdir " + Opts + " -N chgetwd_tmp -I 3000 -g $TDIR1 $TDIR2",
151 // "chdir " + Opts + " -N chgetwd_usr -I 3000 -g $VDIR1 $VDIR2",
153 // "realpath " + Opts + " -N realpath_tmp -I 3000 -f $TDIR1",
154 // "realpath " + Opts + " -N realpath_usr -I 3000 -f $VDIR1",
156 // "stat " + Opts + " -N stat_tmp -I 1000 -f $TFILE",
157 // "stat " + Opts + " -N stat_usr -I 1000 -f $VFILE",
159 // "fcntl " + Opts + " -N fcntl_tmp -I 100 -f $TFILE",
160 // "fcntl " + Opts + " -N fcntl_usr -I 100 -f $VFILE",
161 "fcntl_ndelay " + Opts + " -N fcntl_ndelay -I 100 ",
163 // "lseek " + Opts + " -N lseek_t8k -s 8k -I 50 -f $TFILE",
164 // "lseek " + Opts + " -N lseek_u8k -s 8k -I 50 -f $VFILE",
166 // "open " + Opts + " -N open_tmp -B 256 -f $TFILE",
167 // "open " + Opts + " -N open_usr -B 256 -f $VFILE",
168 "open " + Opts + " -N open_zero -B 256 -f /dev/zero",
170 "dup " + Opts + " -N dup -B 512 ",
172 "socket " + Opts + " -N socket_u -B 256",
173 "socket " + Opts + " -N socket_i -B 256 -f PF_INET",
175 "socketpair " + Opts + " -N socketpair -B 256",
177 "setsockopt " + Opts + " -N setsockopt -I 200",
179 "bind " + Opts + " -N bind -B 100",
181 "listen " + Opts + " -N listen -B 100",
183 // "connection " + Opts + " -N connection -B 256 ",
185 "poll " + Opts + " -N poll_10 -n 10 -I 500",
186 "poll " + Opts + " -N poll_100 -n 100 -I 1000",
187 "poll " + Opts + " -N poll_1000 -n 1000 -I 5000",
189 "poll " + Opts + " -N poll_w10 -n 10 -I 500 -w 1",
190 "poll " + Opts + " -N poll_w100 -n 100 -I 2000 -w 10",
191 "poll " + Opts + " -N poll_w1000 -n 1000 -I 40000 -w 100",
193 "select " + Opts + " -N select_10 -n 10 -I 500",
194 "select " + Opts + " -N select_100 -n 100 -I 1000",
195 "select " + Opts + " -N select_1000 -n 1000 -I 5000",
197 "select " + Opts + " -N select_w10 -n 10 -I 500 -w 1",
198 "select " + Opts + " -N select_w100 -n 100 -I 2000 -w 10",
199 "select " + Opts + " -N select_w1000 -n 1000 -I 40000 -w 100",
201 "sigaction " + Opts + " -N sigaction -I 100",
202 "signal " + Opts + " -N signal -I 1000",
203 "sigprocmask " + Opts + " -N sigprocmask -I 200",
205 "pthread_create " + Opts + " -N pthread_8 -B 8",
206 "pthread_create " + Opts + " -N pthread_32 -B 32",
207 "pthread_create " + Opts + " -N pthread_128 -B 128",
208 // "pthread_create " + Opts + " -N pthread_512 -B 512",
210 // "fork " + Opts + " -N fork_10 -B 10",
211 // "fork " + Opts + " -N fork_100 -B 100 -C 100",
212 // "fork " + Opts + " -N fork_1000 -B 1000 -C 50",
214 // "exit " + Opts + " -N exit_10 -B 10",
215 // "exit " + Opts + " -N exit_100 -B 100",
216 // "exit " + Opts + " -N exit_1000 -B 1000 -C 50",
218 // "exit " + Opts + " -N exit_10_nolibc -e -B 10",
220 // "exec " + Opts + " -N exec -B 10",
222 "system " + Opts + " -N system -I 1000000",
224 "recurse " + Opts + " -N recurse -B 512",
226 // "read " + Opts + " -N read_t1k -s 1k -f $TFILE",
227 // "read " + Opts + " -N read_t10k -s 10k -f $TFILE",
228 // "read " + Opts + " -N read_t100k -s 100k -f $TFILE",
230 // "read " + Opts + " -N read_u1k -s 1k -f $VFILE",
231 // "read " + Opts + " -N read_u10k -s 10k -f $VFILE",
232 // "read " + Opts + " -N read_u100k -s 100k -f $VFILE",
234 "read " + Opts + " -N read_z1k -s 1k -f /dev/zero ",
235 "read " + Opts + " -N read_z10k -s 10k -f /dev/zero ",
236 "read " + Opts + " -N read_z100k -s 100k -f /dev/zero ",
237 "read " + Opts + " -N read_zw100k -s 100k -w -f /dev/zero ",
239 // "write " + Opts + " -N write_t1k -s 1k -f $TFILE",
240 // "write " + Opts + " -N write_t10k -s 10k -f $TFILE",
241 // "write " + Opts + " -N write_t100k -s 100k -f $TFILE",
243 // "write " + Opts + " -N write_u1k -s 1k -f $VFILE",
244 // "write " + Opts + " -N write_u10k -s 10k -f $VFILE",
245 // "write " + Opts + " -N write_u100k -s 100k -f $VFILE",
247 "write " + Opts + " -N write_n1k -s 1k -I 100 -B 0 -f /dev/null ",
248 "write " + Opts + " -N write_n10k -s 10k -I 100 -B 0 -f /dev/null ",
249 "write " + Opts + " -N write_n100k -s 100k -I 100 -B 0 -f /dev/null ",
251 // "writev " + Opts + " -N writev_t1k -s 1k -f $TFILE",
252 // "writev " + Opts + " -N writev_t10k -s 10k -f $TFILE",
253 // "writev " + Opts + " -N writev_t100k -s 100k -f $TFILE",
255 // "writev " + Opts + " -N writev_u1k -s 1k -f $VFILE",
256 // "writev " + Opts + " -N writev_u10k -s 10k -f $VFILE",
257 // "writev " + Opts + " -N writev_u100k -s 100k -f $VFILE",
259 "writev " + Opts + " -N writev_n1k -s 1k -I 100 -B 0 -f /dev/null ",
260 "writev " + Opts + " -N writev_n10k -s 10k -I 100 -B 0 -f /dev/null ",
261 "writev " + Opts + " -N writev_n100k -s 100k -I 100 -B 0 -f /dev/null ",
263 // "pread " + Opts + " -N pread_t1k -s 1k -I 300 -f $TFILE",
264 // "pread " + Opts + " -N pread_t10k -s 10k -I 1000 -f $TFILE",
265 // "pread " + Opts + " -N pread_t100k -s 100k -I 10000 -f $TFILE",
267 // "pread " + Opts + " -N pread_u1k -s 1k -I 300 -f $VFILE",
268 // "pread " + Opts + " -N pread_u10k -s 10k -I 1000 -f $VFILE",
269 // "pread " + Opts + " -N pread_u100k -s 100k -I 10000 -f $VFILE",
271 "pread " + Opts + " -N pread_z1k -s 1k -I 300 -f /dev/zero ",
272 "pread " + Opts + " -N pread_z10k -s 10k -I 1000 -f /dev/zero ",
273 "pread " + Opts + " -N pread_z100k -s 100k -I 2000 -f /dev/zero ",
274 "pread " + Opts + " -N pread_zw100k -s 100k -w -I 10000 -f /dev/zero ",
276 // "pwrite " + Opts + " -N pwrite_t1k -s 1k -I 500 -f $TFILE",
277 // "pwrite " + Opts + " -N pwrite_t10k -s 10k -I 1000 -f $TFILE",
278 // "pwrite " + Opts + " -N pwrite_t100k -s 100k -I 10000 -f $TFILE",
280 // "pwrite " + Opts + " -N pwrite_u1k -s 1k -I 500 -f $VFILE",
281 // "pwrite " + Opts + " -N pwrite_u10k -s 10k -I 1000 -f $VFILE",
282 // "pwrite " + Opts + " -N pwrite_u100k -s 100k -I 20000 -f $VFILE",
284 "pwrite " + Opts + " -N pwrite_n1k -s 1k -I 100 -f /dev/null ",
285 "pwrite " + Opts + " -N pwrite_n10k -s 10k -I 100 -f /dev/null ",
286 "pwrite " + Opts + " -N pwrite_n100k -s 100k -I 100 -f /dev/null ",
288 "mmap " + Opts + " -N mmap_z8k -l 8k -I 1000 -f /dev/zero",
289 "mmap " + Opts + " -N mmap_z128k -l 128k -I 2000 -f /dev/zero",
290 // "mmap " + Opts + " -N mmap_t8k -l 8k -I 1000 -f $TFILE",
291 // "mmap " + Opts + " -N mmap_t128k -l 128k -I 1000 -f $TFILE",
292 // "mmap " + Opts + " -N mmap_u8k -l 8k -I 1000 -f $VFILE",
293 // "mmap " + Opts + " -N mmap_u128k -l 128k -I 1000 -f $VFILE",
294 "mmap " + Opts + " -N mmap_a8k -l 8k -I 200 -f MAP_ANON",
295 "mmap " + Opts + " -N mmap_a128k -l 128k -I 200 -f MAP_ANON",
298 "mmap " + Opts + " -N mmap_rz8k -l 8k -I 2000 -r -f /dev/zero",
299 "mmap " + Opts + " -N mmap_rz128k -l 128k -I 2000 -r -f /dev/zero",
300 // "mmap " + Opts + " -N mmap_rt8k -l 8k -I 2000 -r -f $TFILE",
301 // "mmap " + Opts + " -N mmap_rt128k -l 128k -I 20000 -r -f $TFILE",
302 // "mmap " + Opts + " -N mmap_ru8k -l 8k -I 2000 -r -f $VFILE",
303 "mmap " + Opts + " -N mmap_ru128k -l 128k -I 20000 -r -f $VFILE",
304 "mmap " + Opts + " -N mmap_ra8k -l 8k -I 2000 -r -f MAP_ANON",
305 "mmap " + Opts + " -N mmap_ra128k -l 128k -I 20000 -r -f MAP_ANON",
306 "mmap " + Opts + " -N mmap_wz8k -l 8k -I 5000 -w -f /dev/zero",
307 "mmap " + Opts + " -N mmap_wz128k -l 128k -I 50000 -w -f /dev/zero",
308 // "mmap " + Opts + " -N mmap_wt8k -l 8k -I 5000 -w -f $TFILE",
309 // "mmap " + Opts + " -N mmap_wt128k -l 128k -I 50000 -w -f $TFILE",
310 // "mmap " + Opts + " -N mmap_wu8k -l 8k -I 5000 -w -f $VFILE",
311 // "mmap " + Opts + " -N mmap_wu128k -l 128k -I 500000 -w -f $VFILE",
312 "mmap " + Opts + " -N mmap_wa8k -l 8k -I 3000 -w -f MAP_ANON",
313 "mmap " + Opts + " -N mmap_wa128k -l 128k -I 50000 -w -f MAP_ANON",
315 "munmap " + Opts + " -N unmap_z8k -l 8k -I 500 -f /dev/zero",
316 "munmap " + Opts + " -N unmap_z128k -l 128k -I 500 -f /dev/zero",
317 // "munmap " + Opts + " -N unmap_t8k -l 8k -I 500 -f $TFILE",
318 // "munmap " + Opts + " -N unmap_t128k -l 128k -I 500 -f $TFILE",
319 // "munmap " + Opts + " -N unmap_u8k -l 8k -I 500 -f $VFILE",
320 // "munmap " + Opts + " -N unmap_u128k -l 128k -I 500 -f $VFILE",
321 "munmap " + Opts + " -N unmap_a8k -l 8k -I 500 -f MAP_ANON",
322 "munmap " + Opts + " -N unmap_a128k -l 128k -I 500 -f MAP_ANON",
324 "munmap " + Opts + " -N unmap_rz8k -l 8k -I 1000 -r -f /dev/zero",
325 "munmap " + Opts + " -N unmap_rz128k -l 128k -I 2000 -r -f /dev/zero",
326 // "munmap " + Opts + " -N unmap_rt8k -l 8k -I 1000 -r -f $TFILE",
327 // "munmap " + Opts + " -N unmap_rt128k -l 128k -I 3000 -r -f $TFILE",
328 // "munmap " + Opts + " -N unmap_ru8k -l 8k -I 1000 -r -f $VFILE",
329 // "munmap " + Opts + " -N unmap_ru128k -l 128k -I 3000 -r -f $VFILE",
330 "munmap " + Opts + " -N unmap_ra8k -l 8k -I 1000 -r -f MAP_ANON",
331 "munmap " + Opts + " -N unmap_ra128k -l 128k -I 2000 -r -f MAP_ANON",
333 // "connection " + Opts + " -N conn_connect -B 256 -c",
335 "munmap " + Opts + " -N unmap_wz8k -l 8k -I 1000 -w -f /dev/zero",
336 "munmap " + Opts + " -N unmap_wz128k -l 128k -I 8000 -w -f /dev/zero",
337 // "munmap " + Opts + " -N unmap_wt8k -l 8k -I 1000 -w -f $TFILE",
338 // "munmap " + Opts + " -N unmap_wt128k -l 128k -I 10000 -w -f $TFILE",
339 // "munmap " + Opts + " -N unmap_wu8k -l 8k -I 1000 -w -f $VFILE",
340 // "munmap " + Opts + " -N unmap_wu128k -l 128k -I 50000 -w -f $VFILE",
341 "munmap " + Opts + " -N unmap_wa8k -l 8k -I 1000 -w -f MAP_ANON",
342 "munmap " + Opts + " -N unmap_wa128k -l 128k -I 10000 -w -f MAP_ANON",
345 "mprotect " + Opts + " -N mprot_z8k -l 8k -I 300 -f /dev/zero",
346 "mprotect " + Opts + " -N mprot_z128k -l 128k -I 500 -f /dev/zero",
347 "mprotect " + Opts + " -N mprot_wz8k -l 8k -I 500 -w -f /dev/zero",
348 "mprotect " + Opts + " -N mprot_wz128k -l 128k -I 1000 -w -f /dev/zero",
349 "mprotect " + Opts + " -N mprot_twz8k -l 8k -I 1000 -w -t -f /dev/zero",
350 "mprotect " + Opts + " -N mprot_tw128k -l 128k -I 2000 -w -t -f /dev/zero",
351 "mprotect " + Opts + " -N mprot_tw4m -l 4m -w -t -B 1 -f /dev/zero",
353 "pipe " + Opts + " -N pipe_pst1 -s 1 -I 1000 -x pipe -m st",
354 "pipe " + Opts + " -N pipe_pmt1 -s 1 -I 8000 -x pipe -m mt",
355 "pipe " + Opts + " -N pipe_pmp1 -s 1 -I 8000 -x pipe -m mp",
356 "pipe " + Opts + " -N pipe_pst4k -s 4k -I 1000 -x pipe -m st",
357 "pipe " + Opts + " -N pipe_pmt4k -s 4k -I 8000 -x pipe -m mt",
358 "pipe " + Opts + " -N pipe_pmp4k -s 4k -I 8000 -x pipe -m mp",
360 "pipe " + Opts + " -N pipe_sst1 -s 1 -I 1000 -x sock -m st",
361 "pipe " + Opts + " -N pipe_smt1 -s 1 -I 8000 -x sock -m mt",
362 "pipe " + Opts + " -N pipe_smp1 -s 1 -I 8000 -x sock -m mp",
363 "pipe " + Opts + " -N pipe_sst4k -s 4k -I 1000 -x sock -m st",
364 "pipe " + Opts + " -N pipe_smt4k -s 4k -I 8000 -x sock -m mt",
365 "pipe " + Opts + " -N pipe_smp4k -s 4k -I 8000 -x sock -m mp",
367 "pipe " + Opts + " -N pipe_tst1 -s 1 -I 1000 -x tcp -m st",
368 "pipe " + Opts + " -N pipe_tmt1 -s 1 -I 8000 -x tcp -m mt",
369 "pipe " + Opts + " -N pipe_tmp1 -s 1 -I 8000 -x tcp -m mp",
370 "pipe " + Opts + " -N pipe_tst4k -s 4k -I 1000 -x tcp -m st",
371 "pipe " + Opts + " -N pipe_tmt4k -s 4k -I 8000 -x tcp -m mt",
372 "pipe " + Opts + " -N pipe_tmp4k -s 4k -I 8000 -x tcp -m mp",
374 // "connection " + Opts + " -N conn_accept -B 256 -a",
376 "close_tcp " + Opts + " -N close_tcp -B 32 "
382 protected String getTag() {
383 return "Native Micro";
386 protected String getPath() {
387 return "/system/bin/bench_";
389 protected final List<String> getCommands() {
394 * The unit is usecs/call
396 private double getBenchResult(String command) {
397 String stdOut = mStdOuts.get(command);
398 int index = stdOut.lastIndexOf("mean of 95%");
401 String summary = stdOut.substring(index, stdOut.length());
402 String[] substrings = summary.toString().split("\\s+");
403 value = Double.valueOf(substrings[3]);
406 catch (StringIndexOutOfBoundsException sioobe) {
407 Log.d(TAG, "StringIndexOutOfBoundsException");
409 catch (ArrayIndexOutOfBoundsException aioobe) {
410 Log.d(TAG, "ArrayIndexOutOfBoundsException");
412 catch (NumberFormatException nfe) {
413 Log.d(TAG, "NumberFormatException");
418 private String getCommandName(String command) {
419 if (command == null || command.equals(""))
421 String stdErr = mStdErrs.get(command);
424 String[] substrings = stdErr.split("\\s+");
425 String commandName = substrings[1];
428 catch (Exception ex) {
429 String[] substrings = command.toString().split("\\s+");
430 return substrings[0];
435 protected boolean saveResult(Intent intent) {
436 Bundle bundle = new Bundle();
437 StringBuilder report = new StringBuilder();
438 for (String command: getCommands()) {
439 if(!mSockets.containsKey(command))
441 String [] lines = mSockets.get(command).trim().split("\n");
442 String name = lines[0].trim().split("\t")[0];
443 if (name.equals("")) {
444 report.append(getCommandName(command));
449 StringBuilder list = new StringBuilder();;
450 for(String line: lines) {
451 String [] sp = line.trim().split("\t");
452 if (sp.length != 2) {
453 Log.w(TAG, "error line: " + line.trim());
456 if(!name.equals(sp[0]))
457 Log.i(TAG, "Incompatible bench name in socket out: " + name + " v.s. " + sp[0]);
459 int toInt = (int)Float.parseFloat(sp[1]);
460 list.append(toInt + " ");
461 } catch (Exception e) { // error format
462 Log.e(TAG, "cannot parse '" + sp[1] + "' in line: " + line);
467 if(!mStdOuts.containsKey(command)) {
472 double value = getBenchResult(command);
473 if (value == ERROR_VALUE) {
474 report.append(" FAIL\n");
477 report.append(" " + value + " usecs/call\n");
478 bundle.putString(command+"S", name);
479 bundle.putString(command+"FA", list.toString().trim());
482 bundle.putString(REPORT, report.toString());
483 intent.putExtra(RESULT, bundle);