3-- Copyright : (c) 2018 Harendra Kumar
6-- Maintainer : harendra.kumar@gmail.com
8import Control.Concurrent (threadDelay)
9import Control.Monad (when)
10import Control.Monad.IO.Class (liftIO)
13import Streamly.Prelude as S
14import System.Random (randomRIO)
16-- Note that we should also compare the cpuTime especially when threaded
17-- runtime is used with this benchmark because thread scheduling is not
18-- predictable and can add non-deterministic delay to the total time measured.
20-- Also, the worker dispatch depends on the worker dispatch latency which is
21-- set to fixed 200 us. We need to keep that in mind when designing tests.
27source :: IsStream t => (Int, Int) -> t IO Int
28source range = S.replicateM value $ do
30 when (r /= 0) $ liftIO $ threadDelay r
34run :: IsStream t => (Int, Int) -> (Int, Int) -> (t IO Int -> SerialT IO Int) -> IO ()
35run srange crange t = runStream $ do
36 n <- t $ source srange
37 d <- liftIO (randomRIO crange)
38 when (d /= 0) $ liftIO $ threadDelay d
41low, medium, high :: Int
47noDelay :: IsStream t => (t IO Int -> SerialT IO Int) -> IO ()
48noDelay = run (0,0) (0,0)
50{-# INLINE alwaysConstSlowSerial #-}
51alwaysConstSlowSerial :: IsStream t => (t IO Int -> SerialT IO Int) -> IO ()
52alwaysConstSlowSerial = run (0,0) (medium,medium)
54{-# INLINE alwaysConstSlow #-}
55alwaysConstSlow :: IsStream t => (t IO Int -> SerialT IO Int) -> IO ()
56alwaysConstSlow = run (low,low) (medium,medium)
58{-# INLINE alwaysConstFast #-}
59alwaysConstFast :: IsStream t => (t IO Int -> SerialT IO Int) -> IO ()
60alwaysConstFast = run (high,high) (medium,medium)
62{-# INLINE alwaysVarSlow #-}
63alwaysVarSlow :: IsStream t => (t IO Int -> SerialT IO Int) -> IO ()
64alwaysVarSlow = run (low,low) (low,high)
66{-# INLINE alwaysVarFast #-}
67alwaysVarFast :: IsStream t => (t IO Int -> SerialT IO Int) -> IO ()
68alwaysVarFast = run (high,high) (low,high)
70-- XXX add variable producer tests as well
72{-# INLINE runVarSometimesFast #-}
73runVarSometimesFast :: IsStream t => (t IO Int -> SerialT IO Int) -> IO ()
74runVarSometimesFast = run (medium,medium) (low,high)
76{-# INLINE randomVar #-}
77randomVar :: IsStream t => (t IO Int -> SerialT IO Int) -> IO ()
78randomVar = run (low,high) (low,high)
84 bgroup "serialConstantSlowConsumer"
85 [ bench "serially" $ nfIO $ alwaysConstSlowSerial serially
86 , bench "wSerially" $ nfIO $ alwaysConstSlowSerial wSerially
89 [ bench "serially" $ nfIO $ noDelay serially
90 , bench "wSerially" $ nfIO $ noDelay wSerially
91 , bench "aheadly" $ nfIO $ noDelay aheadly
92 , bench "asyncly" $ nfIO $ noDelay asyncly
93 , bench "wAsyncly" $ nfIO $ noDelay wAsyncly
94 , bench "parallely" $ nfIO $ noDelay parallely
96 , bgroup "constantSlowConsumer"
97 [ bench "aheadly" $ nfIO $ alwaysConstSlow aheadly
98 , bench "asyncly" $ nfIO $ alwaysConstSlow asyncly
99 , bench "wAsyncly" $ nfIO $ alwaysConstSlow wAsyncly
100 , bench "parallely" $ nfIO $ alwaysConstSlow parallely
102 , bgroup "constantFastConsumer"
103 [ bench "aheadly" $ nfIO $ alwaysConstFast aheadly
104 , bench "asyncly" $ nfIO $ alwaysConstFast asyncly
105 , bench "wAsyncly" $ nfIO $ alwaysConstFast wAsyncly
106 , bench "parallely" $ nfIO $ alwaysConstFast parallely
108 , bgroup "variableSlowConsumer"
109 [ bench "aheadly" $ nfIO $ alwaysVarSlow aheadly
110 , bench "asyncly" $ nfIO $ alwaysVarSlow asyncly
111 , bench "wAsyncly" $ nfIO $ alwaysVarSlow wAsyncly
112 , bench "parallely" $ nfIO $ alwaysVarSlow parallely
114 , bgroup "variableFastConsumer"
115 [ bench "aheadly" $ nfIO $ alwaysVarFast aheadly
116 , bench "asyncly" $ nfIO $ alwaysVarFast asyncly
117 , bench "wAsyncly" $ nfIO $ alwaysVarFast wAsyncly
118 , bench "parallely" $ nfIO $ alwaysVarFast parallely
120 , bgroup "variableSometimesFastConsumer"
121 [ bench "aheadly" $ nfIO $ runVarSometimesFast aheadly
122 , bench "asyncly" $ nfIO $ runVarSometimesFast asyncly
123 , bench "wAsyncly" $ nfIO $ runVarSometimesFast wAsyncly
124 , bench "parallely" $ nfIO $ runVarSometimesFast parallely
126 , bgroup "variableFullOverlap"
127 [ bench "aheadly" $ nfIO $ randomVar aheadly
128 , bench "asyncly" $ nfIO $ randomVar asyncly
129 , bench "wAsyncly" $ nfIO $ randomVar wAsyncly
130 , bench "parallely" $ nfIO $ randomVar parallely
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list