-- | Output the results to HTML
--
{-# LANGUAGE OverloadedStrings #-}
module Criterion.ToHtml.Html
( table
) where
import Data.Monoid (mappend)
import Text.Printf (printf)
import Text.Blaze (Html, toHtml, toValue, preEscapedString, (!))
import qualified Text.Blaze.Html5 as H
import qualified Text.Blaze.Html5.Attributes as A
import Criterion.ToHtml.Result
table :: [Result] -> Html
table results = H.docTypeHtml $ do
H.head $ H.title "Criterion results"
H.body $ do
H.table ! A.style "width: 100%;" $ do
H.tr $ do
H.th "Name"
H.th "Mean"
mapM_ row $ normalizeMeans results
row :: (Result, Double) -> Html
row (Result name _, n) = H.tr $ do
H.td $ toHtml name
H.td ! A.style "width: 100%" $
H.div ! A.style (backgroundColor `mappend` "; " `mappend` width)
$ preEscapedString " "
where
width = toValue $ "width: " ++ show (round (n * 100) :: Int) ++ "%"
backgroundColor = toValue
(printf "background-color: rgb(%d, %d, %d)" r g b :: String)
r, g, b :: Int
(r, g, b) = (round (150 * n), round (150 * (1 - n)), 0)