s      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ Safe-Inferred  None9A running subprocess. A stream of lines. A stream of lines. 8Measured results from running a subprocess (benchmark). "Contains the returned error code. EBenchmark time in seconds, may be different than total process time. Seconds @A self-contained description of a runnable command. Similar to 4 System.Process.CreateProcess but slightly simpler. Executable and arguments 0Environment variables to APPEND to current env. Optional timeout in seconds. /Optional working directory to switch to before  running command. 9Different types of parameters that may be set or varied. QTakes CMD PATH, and establishes a benchmark-private setting to use PATH for CMD.  For example `CmdPath ghc  ghc-7.6.3`. J | Threads Int -- ^ Shorthand: builtin support for changing the number of 4 threads across a number of separate build methods. 5The name of the env var and its value, respectively. ) For now Env Vars ONLY affect runtime. KString contains compile-time options, expanded and tokenized by the shell. FString contains runtime options, expanded and tokenized by the shell. NA BuildID should uniquely identify a particular (compile-time) configuration, O but consist only of characters that would be reasonable to put in a filename. 4 This is used to keep build results from colliding. Which schedulerimplementationetc. Set the number of threads. GA datatype for describing (generating) benchmark configuration spaces. A This is accomplished by nested conjunctions and disjunctions. P For example, varying threads from 1-32 would be a 32-way Or. Combining that  with profiling on/.off (product) would create a 64-config space. JWhile the ParamSetting provides an *implementation* of the behavior, this S datatype can also be decorated with a (more easily machine readable) meaning of Q the corresponding setting. For example, indicating that the setting controls  the number of threads. !The target file or direcotry. "8Command line argument to feed the benchmark executable. #(The configration space to iterate over. $+The global configuration for benchmarking: 'FWhat identifies this set of benchmarks? Used to create fusion table. (2benchlist file name and version number (e.g. X.Y) ) A list of #1threads to test. 0 signifies non-threaded mode. +%number of runs of each configuration .keep going after error /Paths to executables. 1Seconds since Epoch. 2Where to put timing results. 3*Where to put more verbose testing output. 4Branch, revision hash, depth. 5Starts with cabalmakeghc, can be extended by user. ;NA monad for benchamrking. This provides access to configuration options, but / really, its main purpose is enabling logging. <NA completely encapsulated method of building benchmarks. Cabal and Makefiles K are two examples of this. The user may extend it with their own methods. >)Identifies this build method for humans. ! , buildsFiles :: FilePredicate ' , canBuild :: FilePath -> IO Bool ?"Can this method build a given file/ directory? @.More than one build can happen at once. This 7 implies that compile always returns StandAloneBinary. B#Clean any left-over build results. CSynthesize a list of compile/runtime settings that % will control the number of threads. D(The result of doing a build. Note that A3 can will throw an exception if compilation fails. EMIn this case the build return what you need to do the benchmark run, but the H directory contents cannot be touched until after than run is finished. F1This binary can be copied and executed whenever. GKA description of a set of files. The description may take one of multiple  forms. H Logical or. ILA common pattern. For example, we can build a file foo.c, if it lives in a  directory with exactly one Makefile. JE.g. Makefile ) | SatisfiesPredicate (String -> Bool) KE.g. .hs, WITH the dot. #Maps canonical command names, e.g. ghc, to absolute system paths. N#This function gives meaning to the FilePred type. # It returns a filepath to signal True and Nothing otherwise. OVExhaustively compute all configurations described by a benchmark configuration space. P+Is it a setting that affects compile time? UMPerforms a simple reformatting (stripping disallowed characters) to create a 3 build ID corresponding to a set of compile flags. VNStrip all runtime options, leaving only compile-time options. This is useful ? for figuring out how many separate compiles need to happen. d  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVW  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWMLGKJIHNDFE<=>?@ABC !"#OVPQRTSU$%&'()*+,-./0123456789:;  %   !"#$%&'()*+,-./0123456789:;<=>?@ABCDFEGKJIHLMNOPQRSTUVNoneW>There are three logging destinations we care about. The .dat $ file, the .log file, and the user's screen (i.e. the user who  launched the benchmarks). [3Print a message (line) both to stdout and logFile: \9Log a line to a particular file and also echo to stdout. WXYZ[\WXYZ[\WZYX[\WZYX[\NoneInternal data type. ]PThis runs a sub-process and tries to determine how long it took (real time) and K how much of that time was spent in the mutator vs. the garbage collector. It is complicated by:  L An additional protocol for the process to report self-measured realtime (a  line starting in  SELFTIMED)  Parsing the output of +RTS -s, to retrieve productivity OR using lines of  the form PRODUCTIVITY: XYZ  Note that +RTS -s is specific to Haskell/%GHC, but the PRODUCTIVITY tag allows = non-haskell processes to report garbage collector overhead. SThis procedure is currently not threadsafe, because it changes the current working  directory. &Check for a SELFTIMED line of output. PRetrieve productivity (i.e. percent time NOT garbage collecting) as output from  a Haskell program with +RTS -s0. Productivity is a percentage (double between  0.0 and 100.0, inclusive). @Fire a single event after a time interval, then end the stream. This makes the EOS into an explicit,, penultimate message. This way it survives  concurrentMerge?. It represents this end of stream by Nothing, but beware the  doubly-nested  type. ]]]]None_ In seconds. `,Global variable holding the main thread id. j1Create a thread that echos the contents of stdout/stderr InputStreams (lines) to A the appropriate places (as designated by the logging facility). kNRun a command and wait for all output. Log output to the appropriate places.  The first argument is a tag. to append to each output line to make things  clearer. lBRuns a command through the OS shell and returns stdout split into ( lines. (Ignore exit code and stderr.) mBRuns a command through the OS shell and returns the first line of  output. o0Fork a thread but ALSO set up an error handler. qA more persistent version of . ^_`abcdefghijklmnopq^_`abcdefghijklmnopq^_`abcdefghijklmnopq^_`abcdefghijklmnopqNonerBuild with GNU Make. sBuild with GHC directly. tBuild with cabal. Checks whether a < works for a given file 5 matchesMethod :: BuildMethod -> FilePath -> IO Bool , matchesMethod BuildMethod{canBuild} path = ( return $ filePredCheck canBuild path COur compilation targets might be either directories or file names. PA simple wrapper for a command that is expected to succeed (and whose output we  don':t care about). Throws an exception if the command fails. rstrstrstrstNone uCommand line flags. USAGE Fill in static* fields of a FusionTable row based on the $ data. 8Remove RTS options that are specific to -threaded mode. 9Create a backup copy of existing results_HOST.dat files. 4Build a single benchmark in a single configuration. 1Write the results header out stdout and to disk. Command line options. -TODO: Eventually this will be parameterized. #uvwxyz{|}~uvwxyz{|}~u~}|{zyxwvu ~}|{zyxwvNonef  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVuvwxyz{|}~       !"#$%&&'()**+,-./0123456789:;<=>?@AABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ hsbencher-1.0HSBencher.TypesHSBencher.LoggingHSBencher.MeasureProcessHSBencher.UtilsHSBencher.Methods HSBencher.AppPaths_hsbencher HSBencher SubProcesswait process_out process_err RunResult ExitErrorTimeOut RunCompletedrealtime productivity CommandDescrcommandenvVarstimeout workingDir ParamSettingCmdPath RuntimeEnv CompileParam RuntimeParamBuildIDDefaultParamMeaning NoMeaningVariantThreads BenchSpaceSetOrAnd BenchmarktargetcmdargsconfigsConfig benchlist benchsetName benchversionthreadsettings maxthreadstrialsshortrundoClean keepgoing pathRegistryhostname startTime resultsFilelogFilegitInfo buildMethodslogOut resultsOutstdOutenvsdoFusionUploadBenchM BuildMethod methodNamecanBuildconcurrentBuildcompileclean setThreads BuildResult RunInPlaceStandAloneBinary FilePredicatePredOrInDirectoryWithExactlyOne IsExactly WithExtension CompileFlagsRunFlags filePredCheckenumerateBenchSpace isCompileTimetoCompileFlags toRunFlags toCmdPaths toEnvVars makeBuildIDcompileOptsOnlyLogDestStdOutLogFile ResultsFileloglogOnmeasureProcessmy_namedefaultTimeout main_threadid parseIntListtrimstrBoolfst3snd3thd3isNumberindent runIgnoreErr echoStream runLoggedrunLinesrunSLcheckforkIOH getCPULoad fetchBaseName makeMethod ghcMethod cabalMethodFlag ShowVersionShowHelpGHCPath CabalPath NumTrials KeepGoingShortRunNoCleanNoCabalNoRecompBinDirParBenchall_cli_optionsdefaultMainWithBechmarkscatchIOversionbindirlibdirdatadir libexecdir getBinDir getLibDir getDataDir getLibexecDirgetDataFileName PathRegistrytest1test2test3$fOutMap$fOutBenchmark$fOutBenchSpace$fOutDefaultParamMeaning$fOutFilePredicate$fOutParamSetting$fShowOutputStream$fShowBuildMethod$fShowBuildResult ProcessEvtcheckTimingLinecheckProductivity timeOutStreamreifyEOSbase Data.MaybeMaybe TimerFire ProcessClosedOutLineErrLineorMaybefilepath-1.3.0.1System.FilePath.Posix takeBaseNamegetDir runSuccessful inDirectory filesInDirusageStraugmentTupleWithConfigpruneThreadedOpts backupResults compileOneprintBenchrunHeadercore_cli_options defaultMain gc_stats_flagexedir getConfigpathrunOne whichVariantcatParallelOutputcollapsePrefix didCompletelogT hsbencher_tag shortArgs