|
definition: |
benchCommand :: String -> Benchmark CmdResult
benchCommand cmd = benchmark $ do
pid <- getPID
let timefile = ".time" ++ show pid
timecmd = "/usr/bin/time -q --format=\"BENCHMARKTIME=(%e,%U,%S,%M)\" -o "
++ timefile ++ " " ++ cmd
--putStrLn $ "TIMECMD: " ++ timecmd
status <- system timecmd
bmout <- readCompleteFile timefile
case reads (extractTimeInOutput bmout) of
[((etime,ctime,stime,maxmem),_)] -> do
system $ "rm -f " ++ timefile
--putStrLn $ "RESULT: " ++ show (CD cmd status etime ctime stime maxmem)
return (CD cmd status etime ctime stime maxmem)
_ -> error $ "Cannot read output of time command:\n" ++ bmout
where
-- extract benchmark time from timing output:
extractTimeInOutput =
tail . snd . break (=='=') . head . filter ("BENCHMARKTIME" `isPrefixOf`)
. lines
|
|
demand: |
no demanded arguments |
|
deterministic: |
deterministic operation |
|
documentation: |
Benchmark the execution of a shell command. Returns benchmark results containing the exit status, elapsed time, cpu time, system time, and the maximum resident size (in Kilobytes). |
|
failfree: |
<FAILING> |
|
indeterministic: |
referentially transparent operation |
|
infix: |
no fixity defined |
|
iotype: |
{(_) |-> _}
|
|
name: |
benchCommand |
|
precedence: |
no precedence defined |
|
result-values: |
_ |
|
signature: |
String -> Benchmark CmdResult |
|
solution-complete: |
operation might suspend on free variables |
|
terminating: |
possibly non-terminating |
|
totally-defined: |
possibly non-reducible on same data term |