module Futhark.Profile.Details (CostCentreDetails (..), SourceRangeDetails (..), CostCentreName (..), sourceRangeDetailsFraction, CostCentres, SourceRanges) where
import Control.Arrow ((>>>))
import Data.Map (Map)
import Data.Monoid (Sum (Sum, getSum))
import Data.Text (Text)
import Futhark.Profile.EventSummary (EvSummary)
import Futhark.Profile.SourceRange (SourceRange)
type CostCentres = Map CostCentreName CostCentreDetails
type SourceRanges = Map SourceRange SourceRangeDetails
newtype CostCentreName = CostCentreName {CostCentreName -> Text
getCostCentreName :: Text}
deriving (CostCentreName -> CostCentreName -> Bool
(CostCentreName -> CostCentreName -> Bool)
-> (CostCentreName -> CostCentreName -> Bool) -> Eq CostCentreName
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: CostCentreName -> CostCentreName -> Bool
== :: CostCentreName -> CostCentreName -> Bool
$c/= :: CostCentreName -> CostCentreName -> Bool
/= :: CostCentreName -> CostCentreName -> Bool
Eq, Eq CostCentreName
Eq CostCentreName =>
(CostCentreName -> CostCentreName -> Ordering)
-> (CostCentreName -> CostCentreName -> Bool)
-> (CostCentreName -> CostCentreName -> Bool)
-> (CostCentreName -> CostCentreName -> Bool)
-> (CostCentreName -> CostCentreName -> Bool)
-> (CostCentreName -> CostCentreName -> CostCentreName)
-> (CostCentreName -> CostCentreName -> CostCentreName)
-> Ord CostCentreName
CostCentreName -> CostCentreName -> Bool
CostCentreName -> CostCentreName -> Ordering
CostCentreName -> CostCentreName -> CostCentreName
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: CostCentreName -> CostCentreName -> Ordering
compare :: CostCentreName -> CostCentreName -> Ordering
$c< :: CostCentreName -> CostCentreName -> Bool
< :: CostCentreName -> CostCentreName -> Bool
$c<= :: CostCentreName -> CostCentreName -> Bool
<= :: CostCentreName -> CostCentreName -> Bool
$c> :: CostCentreName -> CostCentreName -> Bool
> :: CostCentreName -> CostCentreName -> Bool
$c>= :: CostCentreName -> CostCentreName -> Bool
>= :: CostCentreName -> CostCentreName -> Bool
$cmax :: CostCentreName -> CostCentreName -> CostCentreName
max :: CostCentreName -> CostCentreName -> CostCentreName
$cmin :: CostCentreName -> CostCentreName -> CostCentreName
min :: CostCentreName -> CostCentreName -> CostCentreName
Ord)
data CostCentreDetails = CostCentreDetails
{
CostCentreDetails -> Double
fraction :: Double,
CostCentreDetails -> Map SourceRange SourceRangeDetails
sourceRanges :: Map SourceRange SourceRangeDetails,
CostCentreDetails -> EvSummary
summary :: EvSummary
}
newtype SourceRangeDetails = SourceRangeDetails
{ SourceRangeDetails -> Map CostCentreName CostCentreDetails
containingCostCentres :: Map CostCentreName CostCentreDetails
}
sourceRangeDetailsFraction :: SourceRangeDetails -> Double
sourceRangeDetailsFraction :: SourceRangeDetails -> Double
sourceRangeDetailsFraction =
SourceRangeDetails -> Map CostCentreName CostCentreDetails
containingCostCentres
(SourceRangeDetails -> Map CostCentreName CostCentreDetails)
-> (Map CostCentreName CostCentreDetails -> Double)
-> SourceRangeDetails
-> Double
forall {k} (cat :: k -> k -> *) (a :: k) (b :: k) (c :: k).
Category cat =>
cat a b -> cat b c -> cat a c
>>> (CostCentreDetails -> Sum Double)
-> Map CostCentreName CostCentreDetails -> Sum Double
forall m a. Monoid m => (a -> m) -> Map CostCentreName a -> m
forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap (Double -> Sum Double
forall a. a -> Sum a
Sum (Double -> Sum Double)
-> (CostCentreDetails -> Double) -> CostCentreDetails -> Sum Double
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CostCentreDetails -> Double
fraction)
(Map CostCentreName CostCentreDetails -> Sum Double)
-> (Sum Double -> Double)
-> Map CostCentreName CostCentreDetails
-> Double
forall {k} (cat :: k -> k -> *) (a :: k) (b :: k) (c :: k).
Category cat =>
cat a b -> cat b c -> cat a c
>>> Sum Double -> Double
forall a. Sum a -> a
getSum