Skip to content

Commit 2883886

Browse files
committed
Add mix task to run benchmarks
1 parent 2295faf commit 2883886

File tree

3 files changed

+52
-33
lines changed

3 files changed

+52
-33
lines changed

lib/chorex_benchmarks.ex

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -91,29 +91,32 @@ defmodule ChorexBenchmarks do
9191
Logger.configure(level: :alert) # suppress crash messages
9292
Benchee.run(
9393
%{
94-
"nested, no crash, 100" => fn -> LoopBenches.crashy_nested_runner(10, false) end,
95-
"nested, yes crash, 100" => fn -> LoopBenches.crashy_nested_runner(10, true) end,
94+
"nested, no try, 100" => fn -> LoopBenches.crashy_nested_runner(100, false, false) end,
95+
"nested, no crash, 100" => fn -> LoopBenches.crashy_nested_runner(100, false, true) end,
96+
"nested, yes crash, 100" => fn -> LoopBenches.crashy_nested_runner(100, true, true) end,
9697
},
9798
time: @time,
9899
memory_time: @memory_time
99100
)
100-
# Benchee.run(
101-
# %{
102-
# "nested, no crash, 1000" => fn -> LoopBenches.crashy_nested_runner(1000, false) end,
103-
# "nested, yes crash, 1000" => fn -> LoopBenches.crashy_nested_runner(1000, true) end,
104-
# },
105-
# time: @time,
106-
# memory_time: @memory_time
107-
# )
108-
# Benchee.run(
109-
# %{
110-
# "nested, no crash, 10000" => fn -> LoopBenches.crashy_nested_runner(10000, false) end,
111-
# "nested, yes crash, 10000" => fn -> LoopBenches.crashy_nested_runner(10000, true) end,
112-
# },
113-
# time: @time,
114-
# memory_time: @memory_time
115-
# )
116-
# Logger.configure(level: :warning) # restore
101+
Benchee.run(
102+
%{
103+
"nested, no try, 1000" => fn -> LoopBenches.crashy_nested_runner(1000, false, false) end,
104+
"nested, no crash, 1000" => fn -> LoopBenches.crashy_nested_runner(1000, false) end,
105+
"nested, yes crash, 1000" => fn -> LoopBenches.crashy_nested_runner(1000, true) end,
106+
},
107+
time: @time,
108+
memory_time: @memory_time
109+
)
110+
Benchee.run(
111+
%{
112+
"nested, no try, 10000" => fn -> LoopBenches.crashy_nested_runner(10000, false, false) end,
113+
"nested, no crash, 10000" => fn -> LoopBenches.crashy_nested_runner(10000, false) end,
114+
"nested, yes crash, 10000" => fn -> LoopBenches.crashy_nested_runner(10000, true) end,
115+
},
116+
time: @time,
117+
memory_time: @memory_time
118+
)
119+
Logger.configure(level: :warning) # restore
117120
:ok
118121
end
119122

lib/loop_benches.ex

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -30,34 +30,41 @@ defmodule LoopBenches do
3030

3131
defmodule CrashyNestedLoop do
3232
defchor [CnRunner, CnMonitor] do
33-
def run(CnMonitor.(laps)) do
34-
loop_try(CnMonitor.(laps), CnRunner.(0))
35-
# CnMonitor.(dbg(:done2))
36-
# CnRunner.(dbg(:finished2))
33+
def run(CnMonitor.(laps), CnMonitor.(use_try?)) do
34+
if CnMonitor.(use_try?) do
35+
loop_try(CnMonitor.(laps), CnRunner.(0))
36+
else
37+
loop_plain(CnMonitor.(laps), CnRunner.(0))
38+
end
39+
end
40+
41+
def loop_plain(CnMonitor.(laps), CnRunner.(lap_no)) do
42+
CnMonitor.work_hard()
43+
CnRunner.work_hard()
44+
CnRunner.(lap_no) ~> CnMonitor.(l)
45+
46+
if CnMonitor.(l < laps) do
47+
loop_plain(CnMonitor.(laps), CnRunner.(lap_no + 1))
48+
else
49+
CnMonitor.(:done)
50+
CnRunner.(:finished)
51+
end
3752
end
3853

3954
def loop_try(CnMonitor.(laps), CnRunner.(lap_no)) do
40-
# CnRunner.(dbg({:foo, lap_no}))
4155
try do
4256
CnMonitor.work_hard()
4357
CnRunner.work_hard()
4458
CnRunner.(lap_no) ~> CnMonitor.(l)
45-
# CnRunner.(dbg(lap_no))
46-
# CnMonitor.(dbg(l))
4759

4860
if CnMonitor.(l < laps) do
4961
CnMonitor.maybe_explode?(0)
50-
# should never be reached if maybe_explode?(0) goes off
51-
# CnRunner.(dbg({:bar, lap_no}))
5262
loop_try(CnMonitor.(laps), CnRunner.(lap_no + 1))
5363
else
5464
CnMonitor.(:done)
5565
CnRunner.(:finished)
56-
# CnMonitor.(dbg(:done))
57-
# CnRunner.(dbg(:finished))
5866
end
5967
rescue
60-
# CnRunner.(dbg({:baz, lap_no}))
6168
loop_try(CnMonitor.(laps), CnRunner.(lap_no + 1))
6269
end
6370
end
@@ -338,15 +345,15 @@ defmodule LoopBenches do
338345
{m1, m2}
339346
end
340347

341-
def crashy_nested_runner(laps \\ 100, blow_up? \\ true) do
348+
def crashy_nested_runner(laps \\ 100, blow_up? \\ true, use_try? \\ true) do
342349
Chorex.start(
343350
CrashyNestedLoop.Chorex,
344351
%{
345352
CnRunner => MyCrashyNestedRunner,
346353
# CnMonitor => MyCrashyNestedMonitor
347354
CnMonitor => if(blow_up?, do: MyCrashyNestedMonitor, else: MySafeNestedMonitor)
348355
},
349-
[laps]
356+
[laps, use_try?]
350357
)
351358

352359
m1 =

lib/mix/tasks/benchmarks.ex

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
defmodule Mix.Tasks.Benchmarks do
2+
@shortdoc "Run the Chorex benchmarks in full"
3+
@requirements ["loadpaths", "app.config", "app.start"]
4+
use Mix.Task
5+
6+
def run(_args) do
7+
ChorexBenchmarks.stats()
8+
end
9+
end

0 commit comments

Comments
 (0)