1+ {-# LANGUAGE OverloadedStrings #-}
12module GUI.Timeline.HEC (
23 renderHEC ,
34 renderInstantHEC ,
@@ -19,9 +20,16 @@ import qualified GHC.RTS.Events as GHC
1920import Control.Monad
2021import qualified Data.IntMap as IM
2122import Data.Maybe
23+ import Data.Monoid
24+ import Data.Text (Text )
25+ import qualified Data.Text as T
26+ import qualified Data.Text.Lazy as TL
27+ import qualified Data.Text.Lazy.Builder as TB
28+ import qualified Data.Text.Lazy.Builder.Int as TB (decimal )
29+ import Prelude
2230
2331renderHEC :: ViewParameters -> Timestamp -> Timestamp
24- -> IM. IntMap String -> (DurationTree ,EventTree )
32+ -> IM. IntMap Text -> (DurationTree ,EventTree )
2533 -> Render ()
2634renderHEC params@ ViewParameters {.. } start end perfNames (dtree,etree) = do
2735 renderDurations params start end dtree
@@ -33,7 +41,7 @@ renderHEC params@ViewParameters{..} start end perfNames (dtree,etree) = do
3341 return ()
3442
3543renderInstantHEC :: ViewParameters -> Timestamp -> Timestamp
36- -> IM. IntMap String -> EventTree
44+ -> IM. IntMap Text -> EventTree
3745 -> Render ()
3846renderInstantHEC params@ ViewParameters {.. } start end
3947 perfNames (EventTree ltime etime tree) = do
@@ -78,7 +86,7 @@ renderEvents :: ViewParameters
7886 -> Timestamp -- start time of this tree node
7987 -> Timestamp -- end time of this tree node
8088 -> Timestamp -> Timestamp -> Double
81- -> IM. IntMap String -> EventNode
89+ -> IM. IntMap Text -> EventNode
8290 -> Render Bool
8391
8492renderEvents params@ ViewParameters {.. } ! _s ! _e ! startPos ! endPos ewidth
@@ -200,7 +208,7 @@ drawDuration ViewParameters{..} (ThreadRun t s startTime endTime) = do
200208 -- Optionally write the reason for the thread being stopped
201209 -- depending on the zoom value
202210 labelAt labelsMode endTime $
203- show t ++ " " ++ showThreadStopStatus s
211+ T. pack $ show t ++ " " ++ showThreadStopStatus s
204212 where
205213 rectWidth = truncate (fromIntegral (endTime - startTime) / scaleValue) -- as pixels
206214 tStr = show t
@@ -226,7 +234,7 @@ gcBar col !startTime !endTime = do
226234 (endTime - startTime) -- w
227235 (hecBarHeight `div` 2 ) -- h
228236
229- labelAt :: Bool -> Timestamp -> String -> Render ()
237+ labelAt :: Bool -> Timestamp -> Text -> Render ()
230238labelAt labelsMode t str
231239 | not labelsMode = return ()
232240 | otherwise = do
@@ -238,7 +246,7 @@ labelAt labelsMode t str
238246 showText str
239247 restore
240248
241- drawEvent :: ViewParameters -> Double -> IM. IntMap String -> GHC. Event
249+ drawEvent :: ViewParameters -> Double -> IM. IntMap Text -> GHC. Event
242250 -> Render Bool
243251drawEvent params@ ViewParameters {.. } ewidth perfNames event =
244252 let renderI = renderInstantEvent params perfNames event ewidth
@@ -270,24 +278,29 @@ drawEvent params@ViewParameters{..} ewidth perfNames event =
270278
271279 _ -> return False
272280
273- renderInstantEvent :: ViewParameters -> IM. IntMap String -> GHC. Event
281+ renderInstantEvent :: ViewParameters -> IM. IntMap Text -> GHC. Event
274282 -> Double -> Color
275283 -> Render Bool
276284renderInstantEvent ViewParameters {.. } perfNames event ewidth color = do
277285 setSourceRGBAhex color 1.0
278286 setLineWidth (ewidth * scaleValue)
279287 let t = evTime event
280288 draw_line (t, hecBarOff- 4 ) (t, hecBarOff+ hecBarHeight+ 4 )
281- let numToLabel PerfCounter {perfNum, period} | period == 0 =
289+ let numToLabel :: EventInfo -> Maybe Text
290+ numToLabel PerfCounter {perfNum, period} | period == 0 =
282291 IM. lookup (fromIntegral perfNum) perfNames
283- numToLabel PerfCounter {perfNum, period} =
284- fmap (++ " <" ++ show (period + 1 ) ++ " times>" ) $
285- IM. lookup (fromIntegral perfNum) perfNames
286- numToLabel PerfTracepoint {perfNum} =
287- fmap (" tracepoint: " ++ ) $ IM. lookup (fromIntegral perfNum) perfNames
292+ numToLabel PerfCounter {perfNum, period} = do
293+ name <- IM. lookup (fromIntegral perfNum) perfNames
294+ return $ toText $
295+ TB. fromText name <> " <" <> TB. decimal (period + 1 ) <> " times>"
296+ numToLabel PerfTracepoint {perfNum} = do
297+ name <- IM. lookup (fromIntegral perfNum) perfNames
298+ return $ toText $ " tracepoint: " <> TB. fromText name
288299 numToLabel _ = Nothing
289- showLabel espec = fromMaybe (showEventInfo espec) (numToLabel espec)
300+ showLabel espec = fromMaybe (toText $ buildEventInfo espec) (numToLabel espec)
290301 labelAt labelsMode t $ showLabel (evSpec event)
291302 return True
303+ where
304+ toText = TL. toStrict . TB. toLazyText
292305
293306-------------------------------------------------------------------------------
0 commit comments