Skip to content

Commit 1931d8a

Browse files
committed
io-sim-por: added cost centers annotations
1 parent 81d1d46 commit 1931d8a

File tree

1 file changed

+32
-17
lines changed

1 file changed

+32
-17
lines changed

io-sim/src/Control/Monad/IOSimPOR/Internal.hs

Lines changed: 32 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1057,7 +1057,9 @@ execAtomically time tid tlbl nextVid0 action0 k0 =
10571057
-> ST s (SimTrace c)
10581058
go ctl !read !written writtenSeq createdSeq !nextVid action = assert localInvariant $
10591059
case action of
1060-
ReturnStm x -> case ctl of
1060+
ReturnStm x ->
1061+
{-# SCC "execAtomically.go.ReturnStm" #-}
1062+
case ctl of
10611063
AtomicallyFrame -> do
10621064
-- Trace each created TVar
10631065
ds <- traverse (\(SomeTVar tvar) -> traceTVarST tvar True
@@ -1112,78 +1114,91 @@ execAtomically time tid tlbl nextVid0 action0 k0 =
11121114
-- Continue with the k continuation
11131115
go ctl' read written' writtenSeq' createdSeq' nextVid (k x)
11141116

1115-
ThrowStm e -> do
1117+
ThrowStm e ->
1118+
{-# SCC "execAtomically.go.ThrowStm" #-} do
11161119
-- Revert all the TVar writes
11171120
traverse_ (\(SomeTVar tvar) -> revertTVar tvar) written
11181121
k0 $ StmTxAborted (Map.elems read) (toException e)
11191122

1120-
Retry -> case ctl of
1123+
Retry ->
1124+
{-# SCC "execAtomically.go.Retry" #-}
1125+
case ctl of
11211126
AtomicallyFrame -> do
11221127
-- Revert all the TVar writes
11231128
traverse_ (\(SomeTVar tvar) -> revertTVar tvar) written
11241129
-- Return vars read, so the thread can block on them
11251130
k0 $ StmTxBlocked (Map.elems read)
11261131

1127-
OrElseLeftFrame b k writtenOuter writtenOuterSeq createdOuterSeq ctl' -> do
1132+
OrElseLeftFrame b k writtenOuter writtenOuterSeq createdOuterSeq ctl' ->
1133+
{-# SCC "execAtomically.go.OrElseLeftFrame" #-} do
11281134
-- Revert all the TVar writes within this orElse
11291135
traverse_ (\(SomeTVar tvar) -> revertTVar tvar) written
11301136
-- Execute the orElse right hand with an empty written set
11311137
let ctl'' = OrElseRightFrame k writtenOuter writtenOuterSeq createdOuterSeq ctl'
11321138
go ctl'' read Map.empty [] [] nextVid b
11331139

1134-
OrElseRightFrame _k writtenOuter writtenOuterSeq createdOuterSeq ctl' -> do
1140+
OrElseRightFrame _k writtenOuter writtenOuterSeq createdOuterSeq ctl' ->
1141+
{-# SCC "execAtomically.go.OrElseRightFrame" #-} do
11351142
-- Revert all the TVar writes within this orElse branch
11361143
traverse_ (\(SomeTVar tvar) -> revertTVar tvar) written
11371144
-- Skip the continuation and propagate the retry into the outer frame
11381145
-- using the written set for the outer frame
11391146
go ctl' read writtenOuter writtenOuterSeq createdOuterSeq nextVid Retry
11401147

1141-
OrElse a b k -> do
1148+
OrElse a b k ->
1149+
{-# SCC "execAtomically.go.OrElse" #-} do
11421150
-- Execute the left side in a new frame with an empty written set
11431151
let ctl' = OrElseLeftFrame b k written writtenSeq createdSeq ctl
11441152
go ctl' read Map.empty [] [] nextVid a
11451153

1146-
NewTVar !mbLabel x k -> do
1154+
NewTVar !mbLabel x k ->
1155+
{-# SCC "execAtomically.go.NewTVar" #-} do
11471156
v <- execNewTVar nextVid mbLabel x
11481157
-- record a write to the TVar so we know to update its VClock
11491158
let written' = Map.insert (tvarId v) (SomeTVar v) written
11501159
-- save the value: it will be committed or reverted
11511160
saveTVar v
11521161
go ctl read written' writtenSeq (SomeTVar v : createdSeq) (succ nextVid) (k v)
11531162

1154-
LabelTVar !label tvar k -> do
1163+
LabelTVar !label tvar k ->
1164+
{-# SCC "execAtomically.go.LabelTVar" #-} do
11551165
writeSTRef (tvarLabel tvar) $! (Just label)
11561166
go ctl read written writtenSeq createdSeq nextVid k
11571167

1158-
TraceTVar tvar f k -> do
1168+
TraceTVar tvar f k ->
1169+
{-# SCC "execAtomically.go.TraceTVar" #-} do
11591170
writeSTRef (tvarTrace tvar) (Just f)
11601171
go ctl read written writtenSeq createdSeq nextVid k
11611172

11621173
ReadTVar v k
1163-
| tvarId v `Map.member` read || tvarId v `Map.member` written -> do
1174+
| tvarId v `Map.member` read || tvarId v `Map.member` written ->
1175+
{-# SCC "execAtomically.go.ReadTVar" #-} do
11641176
x <- execReadTVar v
11651177
go ctl read written writtenSeq createdSeq nextVid (k x)
1166-
| otherwise -> do
1178+
| otherwise ->
1179+
{-# SCC "execAtomically.go.ReadTVar" #-} do
11671180
x <- execReadTVar v
11681181
let read' = Map.insert (tvarId v) (SomeTVar v) read
11691182
go ctl read' written writtenSeq createdSeq nextVid (k x)
11701183

11711184
WriteTVar v x k
1172-
| tvarId v `Map.member` written -> do
1173-
execWriteTVar v x
1185+
| tvarId v `Map.member` written ->
1186+
{-# SCC "execAtomically.go.WriteTVar" #-} do
11741187
go ctl read written writtenSeq createdSeq nextVid k
1175-
| otherwise -> do
1176-
saveTVar v
1188+
| otherwise ->
1189+
{-# SCC "execAtomically.go.WriteTVar" #-} do
11771190
execWriteTVar v x
11781191
let written' = Map.insert (tvarId v) (SomeTVar v) written
11791192
go ctl read written' (SomeTVar v : writtenSeq) createdSeq nextVid k
11801193

1181-
SayStm msg k -> do
1194+
SayStm msg k ->
1195+
{-# SCC "execAtomically.go.SayStm" #-} do
11821196
trace <- go ctl read written writtenSeq createdSeq nextVid k
11831197
-- TODO: step
11841198
return $ SimPORTrace time tid (-1) tlbl (EventSay msg) trace
11851199

1186-
OutputStm x k -> do
1200+
OutputStm x k ->
1201+
{-# SCC "execAtomically.go.OutputStm" #-} do
11871202
trace <- go ctl read written writtenSeq createdSeq nextVid k
11881203
-- TODO: step
11891204
return $ SimPORTrace time tid (-1) tlbl (EventLog x) trace

0 commit comments

Comments
 (0)