@@ -2,34 +2,35 @@ module Events.ReadEvents (
22 registerEventsFromFile , registerEventsFromTrace
33 ) where
44
5+ import Events.EventDuration
56import Events.EventTree
7+ import Events.HECs (HECs (.. ), histogram )
68import Events.SparkTree
7- import Events.HECs (HECs (.. ), histogram )
89import Events.TestEvents
9- import Events.EventDuration
10- import qualified GUI.ProgressView as ProgressView
1110import GUI.ProgressView (ProgressView )
11+ import qualified GUI.ProgressView as ProgressView
1212
13- import GHC.RTS.Events -- hiding (Event)
13+ import GHC.RTS.Events
1414
1515import GHC.RTS.Events.Analysis
16- import GHC.RTS.Events.Analysis.SparkThread
1716import GHC.RTS.Events.Analysis.Capability
17+ import GHC.RTS.Events.Analysis.SparkThread
18+ import GHC.RTS.EventsIncremental
1819
20+ import qualified Control.DeepSeq as DeepSeq
21+ import Control.Exception
22+ import Control.Monad
1923import Data.Array
24+ import Data.Either
25+ import Data.Function
26+ import qualified Data.IntMap as IM
2027import qualified Data.List as L
2128import Data.Map (Map )
2229import qualified Data.Map as M
23- import qualified Data.IntMap as IM
24- import Data.Set (Set )
2530import Data.Maybe (catMaybes , fromMaybe )
26- import Text.Printf
31+ import Data.Set ( Set )
2732import System.FilePath
28- import Control.Monad
29- import Control.Exception
30- import qualified Control.DeepSeq as DeepSeq
31- import Data.Function
32- import Data.Either
33+ import Text.Printf
3334
3435-------------------------------------------------------------------------------
3536-- import qualified GHC.RTS.Events as GHCEvents
@@ -51,14 +52,14 @@ import Data.Either
5152
5253-------------------------------------------------------------------------------
5354
54- rawEventsToHECs :: [CapEvent ] -> Timestamp
55+ rawEventsToHECs :: [Event ] -> Timestamp
5556 -> [(Double , (DurationTree , EventTree , SparkTree ))]
5657rawEventsToHECs evs endTime
57- = map (\ cap -> toTree $ L. find ((Just cap == ) . ce_cap . head ) heclists)
58- [0 .. maximum (0 : map (fromMaybe 0 . ce_cap ) evs)]
58+ = map (\ cap -> toTree $ L. find ((Just cap == ) . evCap . head ) heclists)
59+ [0 .. maximum (0 : map (fromMaybe 0 . evCap ) evs)]
5960 where
6061 heclists =
61- L. groupBy ((==) `on` ce_cap ) $ L. sortBy (compare `on` ce_cap ) evs
62+ L. groupBy ((==) `on` evCap ) $ L. sortBy (compare `on` evCap ) evs
6263
6364 toTree Nothing = (0 , (DurationTreeEmpty ,
6465 EventTree 0 0 (EventTreeLeaf [] ),
@@ -68,8 +69,7 @@ rawEventsToHECs evs endTime
6869 (mkDurationTree (eventsToDurations nondiscrete) endTime,
6970 mkEventTree discrete endTime,
7071 mkSparkTree sparkD endTime))
71- where es = map ce_event evs
72- (discrete, nondiscrete) = L. partition isDiscreteEvent es
72+ where (discrete, nondiscrete) = L. partition isDiscreteEvent evs
7373 (maxSparkPool, sparkD) = eventsToSparkDurations nondiscrete
7474
7575-------------------------------------------------------------------------------
@@ -118,15 +118,10 @@ buildEventLog progress from =
118118 divUp n k = (n + k - 1 ) `div` k
119119 build name evs = do
120120 let
121- specBy1000 e@ EventBlock {} =
122- e{end_time = end_time e `divUp` 1000 ,
123- block_events = map eBy1000 (block_events e)}
124- specBy1000 e = e
125- eBy1000 ev = ev{time = time ev `divUp` 1000 ,
126- spec = specBy1000 (spec ev)}
121+ eBy1000 ev = ev{evTime = evTime ev `divUp` 1000 }
127122 eventsBy = map eBy1000 (events (dat evs))
128- eventBlockEnd e | EventBlock { end_time= t } <- spec e = t
129- eventBlockEnd e = time e
123+ eventBlockEnd e | EventBlock { end_time= t } <- evSpec e = t
124+ eventBlockEnd e = evTime e
130125
131126 -- 1, to avoid graph scale 0 and division by 0 later on
132127 lastTx = maximum (1 : map eventBlockEnd eventsBy)
@@ -139,18 +134,18 @@ buildEventLog progress from =
139134 -- one more step in the 'perf to TS' workflow and is a bit slower
140135 -- (yet another event sorting and loading eventlog chunks
141136 -- into the CPU cache).
142- steps :: [CapEvent ] -> [(Map KernelThreadId Int , CapEvent )]
137+ steps :: [Event ] -> [(Map KernelThreadId Int , Event )]
143138 steps evs =
144139 zip (map fst $ rights $ validates capabilityTaskOSMachine evs) evs
145- addC :: (Map KernelThreadId Int , CapEvent ) -> CapEvent
146- addC (state, ev@ CapEvent {ce_event = Event {spec = PerfTracepoint {tid} }}) =
140+ addC :: (Map KernelThreadId Int , Event ) -> Event
141+ addC (state, ev@ Event {evSpec = PerfTracepoint {tid}}) =
147142 case M. lookup tid state of
148143 Nothing -> ev -- unknown task's OS thread
149- ce_cap -> ev {ce_cap }
150- addC (state, ev@ CapEvent {ce_event = Event {spec = PerfCounter {tid} }}) =
144+ evCap -> ev {evCap }
145+ addC (state, ev@ Event {evSpec = PerfCounter {tid}}) =
151146 case M. lookup tid state of
152147 Nothing -> ev -- unknown task's OS thread
153- ce_cap -> ev {ce_cap }
148+ evCap -> ev {evCap }
154149 addC (_, ev) = ev
155150 addCaps evs = map addC (steps evs)
156151
@@ -183,13 +178,13 @@ buildEventLog progress from =
183178 sparkProfile :: Process
184179 ((Map ThreadId (Profile SparkThreadState ),
185180 (Map Int ThreadId , Set ThreadId )),
186- CapEvent )
181+ Event )
187182 (ThreadId , (SparkThreadState , Timestamp , Timestamp ))
188183 sparkProfile = profileRouted
189- (refineM (spec . ce_event) sparkThreadMachine)
184+ (refineM evSpec sparkThreadMachine)
190185 capabilitySparkThreadMachine
191186 capabilitySparkThreadIndexer
192- (time . ce_event)
187+ evTime
193188 sorted
194189
195190 sparkSummary :: Map ThreadId (Int , Timestamp , Timestamp )
@@ -225,9 +220,7 @@ buildEventLog progress from =
225220 maxYHistogram = 10000 * ceiling (fromIntegral maxY / 10000 )
226221
227222 getPerfNames nmap ev =
228- case spec ev of
229- EventBlock {block_events} ->
230- L. foldl' getPerfNames nmap block_events
223+ case evSpec ev of
231224 PerfName {perfNum, name} ->
232225 IM. insert (fromIntegral perfNum) name nmap
233226 _ -> nmap
0 commit comments