packages feed

linux-perf-0.3: dump-perf/dump-perf.hs

-----------------------------------------------------------------------------
-- |
-- Copyright   : (c) 2010,2011,2012 Simon Marlow, Bernie Pope
-- License     : BSD-style
-- Maintainer  : florbitous@gmail.com
-- Stability   : experimental
-- Portability : ghc
--
-- A program to parse and then pretty print the contents of @perf.data@ to
-- stdout. @perf.data@ is the output of the @perf record@ command on
-- Linux (Linux performance counter information).
--
-- The main use of this program is to demonstrate how to use the
-- 'Profilinf.Linux.Perf' library.
--
-- Usage: dump-perf [--dump] [file]
--
-- If filename is missing then it will assume the input is @perf.data@
-- in the current working directory.
--
-----------------------------------------------------------------------------

module Main where

import Profiling.Linux.Perf (OutputStyle (..), readAndDisplay)
import System.Exit (exitWith, ExitCode (ExitFailure))
import System.IO (hPutStrLn, stderr)
import System.Environment (getArgs)

die :: String -> IO a
die s = hPutStrLn stderr s >> exitWith (ExitFailure 1)

main :: IO ()
main = do
  args <- getArgs
  (outputStyle, file) <- case args of
     []          -> return (Dump, "perf.data")
     ["--dump"]  -> return (Dump, "perf.data")
     ["--trace"]  -> return (Trace, "perf.data")
     [file] -> return (Dump, file)
     ["--dump", file]  -> return (Dump, file)
     ["--trace", file]  -> return (Trace, file)
     _                 -> die "Syntax: dump-perf [--dump] [file]"
  readAndDisplay outputStyle file