1+ {-# LANGUAGE OverloadedStrings #-}
12module GUI.Timeline.HEC (
23 renderHEC ,
34 renderInstantHEC ,
@@ -19,9 +20,14 @@ import qualified GHC.RTS.Events as GHC
1920import Control.Monad
2021import qualified Data.IntMap as IM
2122import Data.Maybe
23+ import Data.Text (Text )
24+ import qualified Data.Text as T
25+ import qualified Data.Text.Lazy as TL
26+ import qualified Data.Text.Lazy.Builder as TB
27+ import qualified Data.Text.Lazy.Builder.Int as TB (decimal )
2228
2329renderHEC :: ViewParameters -> Timestamp -> Timestamp
24- -> IM. IntMap String -> (DurationTree ,EventTree )
30+ -> IM. IntMap Text -> (DurationTree ,EventTree )
2531 -> Render ()
2632renderHEC params@ ViewParameters {.. } start end perfNames (dtree,etree) = do
2733 renderDurations params start end dtree
@@ -33,7 +39,7 @@ renderHEC params@ViewParameters{..} start end perfNames (dtree,etree) = do
3339 return ()
3440
3541renderInstantHEC :: ViewParameters -> Timestamp -> Timestamp
36- -> IM. IntMap String -> EventTree
42+ -> IM. IntMap Text -> EventTree
3743 -> Render ()
3844renderInstantHEC params@ ViewParameters {.. } start end
3945 perfNames (EventTree ltime etime tree) = do
@@ -78,7 +84,7 @@ renderEvents :: ViewParameters
7884 -> Timestamp -- start time of this tree node
7985 -> Timestamp -- end time of this tree node
8086 -> Timestamp -> Timestamp -> Double
81- -> IM. IntMap String -> EventNode
87+ -> IM. IntMap Text -> EventNode
8288 -> Render Bool
8389
8490renderEvents params@ ViewParameters {.. } ! _s ! _e ! startPos ! endPos ewidth
@@ -200,7 +206,7 @@ drawDuration ViewParameters{..} (ThreadRun t s startTime endTime) = do
200206 -- Optionally write the reason for the thread being stopped
201207 -- depending on the zoom value
202208 labelAt labelsMode endTime $
203- show t ++ " " ++ showThreadStopStatus s
209+ T. pack $ show t ++ " " ++ showThreadStopStatus s
204210 where
205211 rectWidth = truncate (fromIntegral (endTime - startTime) / scaleValue) -- as pixels
206212 tStr = show t
@@ -226,7 +232,7 @@ gcBar col !startTime !endTime = do
226232 (endTime - startTime) -- w
227233 (hecBarHeight `div` 2 ) -- h
228234
229- labelAt :: Bool -> Timestamp -> String -> Render ()
235+ labelAt :: Bool -> Timestamp -> Text -> Render ()
230236labelAt labelsMode t str
231237 | not labelsMode = return ()
232238 | otherwise = do
@@ -238,7 +244,7 @@ labelAt labelsMode t str
238244 showText str
239245 restore
240246
241- drawEvent :: ViewParameters -> Double -> IM. IntMap String -> GHC. Event
247+ drawEvent :: ViewParameters -> Double -> IM. IntMap Text -> GHC. Event
242248 -> Render Bool
243249drawEvent params@ ViewParameters {.. } ewidth perfNames event =
244250 let renderI = renderInstantEvent params perfNames event ewidth
@@ -270,24 +276,29 @@ drawEvent params@ViewParameters{..} ewidth perfNames event =
270276
271277 _ -> return False
272278
273- renderInstantEvent :: ViewParameters -> IM. IntMap String -> GHC. Event
279+ renderInstantEvent :: ViewParameters -> IM. IntMap Text -> GHC. Event
274280 -> Double -> Color
275281 -> Render Bool
276282renderInstantEvent ViewParameters {.. } perfNames event ewidth color = do
277283 setSourceRGBAhex color 1.0
278284 setLineWidth (ewidth * scaleValue)
279285 let t = evTime event
280286 draw_line (t, hecBarOff- 4 ) (t, hecBarOff+ hecBarHeight+ 4 )
281- let numToLabel PerfCounter {perfNum, period} | period == 0 =
287+ let numToLabel :: EventInfo -> Maybe Text
288+ numToLabel PerfCounter {perfNum, period} | period == 0 =
282289 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
290+ numToLabel PerfCounter {perfNum, period} = do
291+ name <- IM. lookup (fromIntegral perfNum) perfNames
292+ return $ toText $
293+ TB. fromText name <> " <" <> TB. decimal (period + 1 ) <> " times>"
294+ numToLabel PerfTracepoint {perfNum} = do
295+ name <- IM. lookup (fromIntegral perfNum) perfNames
296+ return $ toText $ " tracepoint: " <> TB. fromText name
288297 numToLabel _ = Nothing
289- showLabel espec = fromMaybe (showEventInfo espec) (numToLabel espec)
298+ showLabel espec = fromMaybe (toText $ buildEventInfo espec) (numToLabel espec)
290299 labelAt labelsMode t $ showLabel (evSpec event)
291300 return True
301+ where
302+ toText = TL. toStrict . TB. toLazyText
292303
293304-------------------------------------------------------------------------------
0 commit comments