Skip to content

Commit eadd6da

Browse files
committed
Overhaul codebase to compile with ghc-events 0.5
1 parent ec07a0c commit eadd6da

File tree

11 files changed

+175
-212
lines changed

11 files changed

+175
-212
lines changed

Events/EventDuration.hs

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ module Events.EventDuration (
1010
) where
1111

1212
-- Imports for GHC Events
13+
import GHC.RTS.Events hiding (Event, GCIdle, GCWork)
1314
import qualified GHC.RTS.Events as GHC
14-
import GHC.RTS.Events hiding (Event,GCWork,GCIdle)
1515

1616
-------------------------------------------------------------------------------
1717
-- This datastructure is a duration-based representation of the event
@@ -86,23 +86,23 @@ durationOf ed = endTimeOf ed - startTimeOf ed
8686
eventsToDurations :: [GHC.Event] -> [EventDuration]
8787
eventsToDurations [] = []
8888
eventsToDurations (event : events) =
89-
case spec event of
89+
case evSpec event of
9090
RunThread{thread=t} -> runDuration t : rest
9191
StopThread{} -> rest
92-
StartGC -> gcStart (time event) events
92+
StartGC -> gcStart (evTime event) events
9393
EndGC{} -> rest
9494
_otherEvent -> rest
9595
where
9696
rest = eventsToDurations events
9797

98-
runDuration t = ThreadRun t s (time event) endTime
98+
runDuration t = ThreadRun t s (evTime event) endTime
9999
where (endTime, s) = case findRunThreadTime events of
100100
Nothing -> error $ "findRunThreadTime for " ++ (show event)
101101
Just x -> x
102102

103103
isDiscreteEvent :: GHC.Event -> Bool
104104
isDiscreteEvent e =
105-
case spec e of
105+
case evSpec e of
106106
RunThread{} -> False
107107
StopThread{} -> False
108108
StartGC{} -> False
@@ -116,62 +116,62 @@ isDiscreteEvent e =
116116
gcStart :: Timestamp -> [GHC.Event] -> [EventDuration]
117117
gcStart _ [] = []
118118
gcStart t0 (event : events) =
119-
case spec event of
119+
case evSpec event of
120120
GHC.GCWork{} -> GCStart t0 t1 : gcWork t1 events
121121
GHC.GCIdle{} -> GCStart t0 t1 : gcIdle t1 events
122122
GHC.GCDone{} -> GCStart t0 t1 : gcDone t1 events
123123
GHC.EndGC{} -> GCStart t0 t1 : eventsToDurations events
124124
RunThread{} -> GCStart t0 t1 : eventsToDurations (event : events)
125125
_other -> gcStart t0 events
126126
where
127-
t1 = time event
127+
t1 = evTime event
128128

129129
gcWork :: Timestamp -> [GHC.Event] -> [EventDuration]
130130
gcWork _ [] = []
131131
gcWork t0 (event : events) =
132-
case spec event of
132+
case evSpec event of
133133
GHC.GCWork{} -> gcWork t0 events
134134
GHC.GCIdle{} -> GCWork t0 t1 : gcIdle t1 events
135135
GHC.GCDone{} -> GCWork t0 t1 : gcDone t1 events
136136
GHC.EndGC{} -> GCWork t0 t1 : eventsToDurations events
137137
RunThread{} -> GCWork t0 t1 : eventsToDurations (event : events)
138138
_other -> gcStart t0 events
139139
where
140-
t1 = time event
140+
t1 = evTime event
141141

142142
gcIdle :: Timestamp -> [GHC.Event] -> [EventDuration]
143143
gcIdle _ [] = []
144144
gcIdle t0 (event : events) =
145-
case spec event of
145+
case evSpec event of
146146
GHC.GCIdle{} -> gcIdle t0 events
147147
GHC.GCWork{} -> GCIdle t0 t1 : gcWork t1 events
148148
GHC.GCDone{} -> GCIdle t0 t1 : gcDone t1 events
149149
GHC.EndGC{} -> GCIdle t0 t1 : eventsToDurations events
150150
RunThread{} -> GCIdle t0 t1 : eventsToDurations (event : events)
151151
_other -> gcStart t0 events
152152
where
153-
t1 = time event
153+
t1 = evTime event
154154

155155
gcDone :: Timestamp -> [GHC.Event] -> [EventDuration]
156156
gcDone _ [] = []
157157
gcDone t0 (event : events) =
158-
case spec event of
158+
case evSpec event of
159159
GHC.GCDone{} -> gcDone t0 events
160160
GHC.GCWork{} -> GCEnd t0 t1 : gcWork t1 events
161161
GHC.GCIdle{} -> GCEnd t0 t1 : gcIdle t1 events
162162
GHC.EndGC{} -> GCEnd t0 t1 : eventsToDurations events
163163
RunThread{} -> GCEnd t0 t1 : eventsToDurations (event : events)
164164
_other -> gcStart t0 events
165165
where
166-
t1 = time event
166+
t1 = evTime event
167167

168168
-------------------------------------------------------------------------------
169169

170170
findRunThreadTime :: [GHC.Event] -> Maybe (Timestamp, ThreadStopStatus)
171171
findRunThreadTime [] = Nothing
172172
findRunThreadTime (e : es)
173-
= case spec e of
174-
StopThread{status=s} -> Just (time e, s)
173+
= case evSpec e of
174+
StopThread{status=s} -> Just (evTime e, s)
175175
_ -> findRunThreadTime es
176176

177177
-------------------------------------------------------------------------------

Events/EventTree.hs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@ module Events.EventTree (
1414

1515
import Events.EventDuration
1616

17-
import qualified GHC.RTS.Events as GHC
1817
import GHC.RTS.Events hiding (Event)
18+
import qualified GHC.RTS.Events as GHC
1919

20-
import Text.Printf
2120
import Control.Exception (assert)
21+
import Text.Printf
2222

2323
-------------------------------------------------------------------------------
2424

@@ -195,7 +195,7 @@ mkEventTree es endTime =
195195
tree
196196
where
197197
tree = splitEvents es endTime
198-
(s,e) = if null es then (0,0) else (time (head es), endTime)
198+
(s,e) = if null es then (0,0) else (evTime (head es), endTime)
199199

200200
splitEvents :: [GHC.Event] -- events
201201
-> Timestamp -- end time of last event in the list
@@ -223,14 +223,14 @@ splitEvents es !endTime
223223
| otherwise
224224
= -- trace (printf "len = %d, startTime = %d, endTime = %d, lhs_len = %d\n" len startTime endTime lhs_len) $
225225
assert (length lhs + length rhs == length es) $
226-
EventSplit (time (head rhs))
226+
EventSplit (evTime (head rhs))
227227
ltree
228228
rtree
229229
where
230230
-- | Integer division, rounding up.
231231
divUp :: Timestamp -> Timestamp -> Timestamp
232232
divUp n k = (n + k - 1) `div` k
233-
startTime = time (head es)
233+
startTime = evTime (head es)
234234
splitTime = startTime + (endTime - startTime) `divUp` 2
235235
duration = endTime - startTime
236236

@@ -257,7 +257,7 @@ splitEventList (e:es) acc !tsplit !tmax
257257
| otherwise
258258
= (reverse acc, tmax, e:es)
259259
where
260-
t = time e
260+
t = evTime e
261261

262262
-------------------------------------------------------------------------------
263263

Events/HECs.hs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
module Events.HECs (
33
HECs(..),
44
Event,
5-
CapEvent,
65
Timestamp,
76

87
eventIndexToTimestamp,
@@ -26,7 +25,7 @@ import qualified Data.List as L
2625
data HECs = HECs {
2726
hecCount :: Int,
2827
hecTrees :: [(DurationTree, EventTree, SparkTree)],
29-
hecEventArray :: Array Int CapEvent,
28+
hecEventArray :: Array Int Event,
3029
hecLastEventTime :: Timestamp,
3130
maxSparkPool :: Double,
3231
minXHistogram :: Int,
@@ -40,7 +39,7 @@ data HECs = HECs {
4039

4140
eventIndexToTimestamp :: HECs -> Int -> Timestamp
4241
eventIndexToTimestamp HECs{hecEventArray=arr} n =
43-
time (ce_event (arr ! n))
42+
evTime (arr ! n)
4443

4544
timestampToEventIndex :: HECs -> Timestamp -> Int
4645
timestampToEventIndex HECs{hecEventArray=arr} ts =
@@ -49,17 +48,17 @@ timestampToEventIndex HECs{hecEventArray=arr} ts =
4948
(l,r) = bounds arr
5049

5150
search !l !r
52-
| (r - l) <= 1 = if ts > time (ce_event (arr!l)) then r else l
51+
| (r - l) <= 1 = if ts > evTime (arr!l) then r else l
5352
| ts < tmid = search l mid
5453
| otherwise = search mid r
5554
where
5655
mid = l + (r - l) `quot` 2
57-
tmid = time (ce_event (arr!mid))
56+
tmid = evTime (arr!mid)
5857

5958
extractUserMarkers :: HECs -> [(Timestamp, String)]
6059
extractUserMarkers hecs =
6160
[ (ts, mark)
62-
| CapEvent _ (Event ts (UserMarker mark)) <- elems (hecEventArray hecs) ]
61+
| (Event ts (UserMarker mark) _) <- elems (hecEventArray hecs) ]
6362

6463
-- | Sum durations in the same buckets to form a histogram.
6564
histogram :: [(Int, Timestamp)] -> [(Int, Timestamp)]

Events/ReadEvents.hs

Lines changed: 32 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -2,34 +2,35 @@ module Events.ReadEvents (
22
registerEventsFromFile, registerEventsFromTrace
33
) where
44

5+
import Events.EventDuration
56
import Events.EventTree
7+
import Events.HECs (HECs (..), histogram)
68
import Events.SparkTree
7-
import Events.HECs (HECs(..), histogram)
89
import Events.TestEvents
9-
import Events.EventDuration
10-
import qualified GUI.ProgressView as ProgressView
1110
import GUI.ProgressView (ProgressView)
11+
import qualified GUI.ProgressView as ProgressView
1212

13-
import GHC.RTS.Events -- hiding (Event)
13+
import GHC.RTS.Events
1414

1515
import GHC.RTS.Events.Analysis
16-
import GHC.RTS.Events.Analysis.SparkThread
1716
import 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
1923
import Data.Array
24+
import Data.Either
25+
import Data.Function
26+
import qualified Data.IntMap as IM
2027
import qualified Data.List as L
2128
import Data.Map (Map)
2229
import qualified Data.Map as M
23-
import qualified Data.IntMap as IM
24-
import Data.Set (Set)
2530
import Data.Maybe (catMaybes, fromMaybe)
26-
import Text.Printf
31+
import Data.Set (Set)
2732
import 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))]
5657
rawEventsToHECs 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

Events/SparkTree.hs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ module Events.SparkTree (
99

1010
import qualified Events.SparkStats as SparkStats
1111

12-
import qualified GHC.RTS.Events as GHCEvents
1312
import GHC.RTS.Events (Timestamp)
13+
import qualified GHC.RTS.Events as GHCEvents
1414

1515
import Control.Exception (assert)
1616
import Text.Printf
@@ -32,9 +32,9 @@ eventsToSparkDurations :: [GHCEvents.Event] -> (Double, [SparkDuration])
3232
eventsToSparkDurations es =
3333
let aux _startTime _startCounters [] = (0, [])
3434
aux startTime startCounters (event : events) =
35-
case GHCEvents.spec event of
35+
case GHCEvents.evSpec event of
3636
GHCEvents.SparkCounters crt dud ovf cnv fiz gcd rem ->
37-
let endTime = GHCEvents.time event
37+
let endTime = GHCEvents.evTime event
3838
endCounters = (crt, dud, ovf, cnv, fiz, gcd, rem)
3939
delta = SparkStats.create startCounters endCounters
4040
newMaxSparkPool = SparkStats.maxPool delta

0 commit comments

Comments
 (0)