@@ -35,9 +35,9 @@ import Node.FS.Stats as FS
3535import Node.Path (FilePath )
3636import PureScript.CST (RecoveredParserResult (..), parseModule , printModule )
3737import PureScript.CST.Errors (printParseError )
38+ import PureScript.CST.ModuleGraph (sortModules , ModuleSort (..))
3839import PureScript.CST.Parser.Monad (PositionedError )
3940import PureScript.CST.Types (Module (..), ModuleHeader )
40- import PureScript.CST.ModuleGraph (sortModules , ModuleSort (..))
4141
4242foreign 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+
190193parseModuleFromFile :: FilePath -> Aff ModuleResult
191194parseModuleFromFile 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
230234getDurationStats :: forall r . Array { path :: FilePath , duration :: Milliseconds | r } -> DurationStats r
231235getDurationStats 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
246254displayDurationStats :: 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