module Pool(poolGraph) where import StdLib import GRIP import PSlib import Graph import Parse poolGraph selectpes statFile = initGraph "Spark Pool Profile Graph" (pes,selectpes) (100*ticks,height) ("Time (ms)", "Sparks") [(5,"Spark Residency",""), (0,"Sparks Used","")] ++ scale (my_fromInt dimX/my_fromInt 200) (my_fromInt dimY/my_fromInt height) ++ plotCurve 0 usedGraph ++ plotCurve 5 sparkGraph where (sparkGraph,usedGraph) = outlineGraphs (traces++[T width [0,0,0]]) (pes,ticks,orderedStats) = getParameters stats height = axisScale h stats = parseFile statFile (traces,((sparks,used,resumed),_,h,width)) = akkumulate processSparks nullstate (gatherSp (Sp 0 0 0 0 0) (getSp selectpes orderedStats)) processSparks ((c'',u'',r''),l'',m,_) (Sp n c u r l) = (T n [p',u',l'], ((c''+c,u''+u,r''+r),l',max m p',n)) where p' = l''+c u' = p'-l l' = p'-u-l gatherSp t [] = [t] gatherSp t l@(a:as) | numberSp t==numberSp a = gatherSp (addSparks t a) as | otherwise = t:gatherSp (Sp (n+1) 0 0 0 0) l where n=numberSp t addSparks (Sp _ a b c d) (Sp n a' b' c' d') = Sp n (a+a') (b+b') (c+c') (d+d') data Trace = T Int [Int] deriving Show{-was:Text-} nullstate = ((0,0,0),0,0,0) type Object = [Point] outlineGraphs :: [Trace] -> ([Point],[Point]) outlineGraphs traces = aux traces where aux [] = ([],[]) aux (T n [p,u,l]:ts) = (Pt t p:Pt t l:Pt t' l:pas, Pt t u:Pt t' l:pbs) where (pas,pbs) = aux ts t = n*2 t' = n*2+1