Skip to content

Commit 6afdcf0

Browse files
authored
Add total parse time to package set benchmark (#60)
1 parent 0354e8f commit 6afdcf0

File tree

1 file changed

+23
-14
lines changed

1 file changed

+23
-14
lines changed

parse-package-set/Main.purs

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,9 @@ import Node.FS.Stats as FS
3535
import Node.Path (FilePath)
3636
import PureScript.CST (RecoveredParserResult(..), parseModule, printModule)
3737
import PureScript.CST.Errors (printParseError)
38+
import PureScript.CST.ModuleGraph (sortModules, ModuleSort(..))
3839
import PureScript.CST.Parser.Monad (PositionedError)
3940
import PureScript.CST.Types (Module(..), ModuleHeader)
40-
import PureScript.CST.ModuleGraph (sortModules, ModuleSort(..))
4141

4242
foreign import tmpdir :: String -> Effect String
4343

@@ -58,17 +58,7 @@ main = runAff_ (either throwException mempty) do
5858
_ <- liftEffect $ Exec.execSync ("spago install " <> packages) execOpts
5959

6060
pursFiles <- getPursFiles 0 (tmpPath <> "/.spago")
61-
62-
block <- AVar.empty
63-
64-
for_ (Array.range 1 10) \_ -> do
65-
liftEffect $ EffectAVar.put unit block mempty
66-
67-
moduleResults <- flip parTraverse pursFiles \file -> do
68-
AVar.take block
69-
result <- parseModuleFromFile file
70-
_ <- liftEffect $ EffectAVar.put unit block mempty
71-
pure result
61+
moduleResults <- parseModulesFromFiles pursFiles
7262

7363
let
7464
partition = moduleResults # partitionMap \{ path, errors, duration, printerMatches } ->
@@ -187,6 +177,19 @@ type ModuleResult =
187177
, printerMatches :: Maybe Boolean
188178
}
189179

180+
parseModulesFromFiles :: Array FilePath -> Aff (Array ModuleResult)
181+
parseModulesFromFiles pursFiles = do
182+
block <- AVar.empty
183+
184+
for_ (Array.range 1 10) \_ -> do
185+
liftEffect $ EffectAVar.put unit block mempty
186+
187+
flip parTraverse pursFiles \file -> do
188+
AVar.take block
189+
result <- parseModuleFromFile file
190+
_ <- liftEffect $ EffectAVar.put unit block mempty
191+
pure result
192+
190193
parseModuleFromFile :: FilePath -> Aff ModuleResult
191194
parseModuleFromFile path = do
192195
contents <- readTextFile UTF8 path
@@ -225,26 +228,31 @@ type DurationStats r =
225228
{ minDuration :: Array { path :: FilePath, duration :: Milliseconds | r }
226229
, maxDuration :: Array { path :: FilePath, duration :: Milliseconds | r }
227230
, mean :: Milliseconds
231+
, total :: Milliseconds
228232
}
229233

230234
getDurationStats :: forall r. Array { path :: FilePath, duration :: Milliseconds | r } -> DurationStats r
231235
getDurationStats res =
232236
{ minDuration: Array.take 20 sorted
233237
, maxDuration: Array.reverse (Array.takeEnd 20 sorted)
234238
, mean
239+
, total: Milliseconds sum.duration
235240
}
236241
where
237242
sorted =
238243
Array.sortBy (comparing _.duration) res
239244

240-
mean =
245+
sum =
241246
sorted
242247
# foldMap (\{ duration: Milliseconds duration } -> Additive { duration, total: 1.0 })
243248
# un Additive
249+
250+
mean =
251+
sum
244252
# \{ duration, total } -> Milliseconds (duration / total)
245253

246254
displayDurationStats :: forall r. DurationStats r -> String -> String
247-
displayDurationStats { minDuration, maxDuration, mean } title =
255+
displayDurationStats { minDuration, maxDuration, mean, total } title =
248256
Array.intercalate "\n"
249257
[ ""
250258
, "---- [ " <> title <> " Timing Information ] ----"
@@ -254,6 +262,7 @@ displayDurationStats { minDuration, maxDuration, mean } title =
254262
, "Slowest Parse Times:"
255263
, Array.intercalate "\n" $ displayLine <$> maxDuration
256264
, ""
265+
, "Total Parse: " <> formatMs total
257266
, "Mean Parse: " <> formatMs mean
258267
]
259268

0 commit comments

Comments
 (0)