@@ -20,90 +20,32 @@ file = joinpath(@__DIR__, "nasa.xml")
2020
2121df = DataFrame (kind= String[], name= String[], bench= BenchmarkTools. Trial[])
2222
23+ macro add_benchmark (kind, name, expr... )
24+ esc (:(let
25+ @info string ($ kind, " - " , $ name)
26+ bench = @benchmark $ (expr... )
27+ push! (df, (; kind= $ kind, name= $ name, bench))
28+ end ))
29+ end
2330
2431# -----------------------------------------------------------------------------# Write
25- kind = " Write"
26- output = tempname ()
27-
28- name = " XML.write 2"
29- @info name
30- node1 = read (file, Node)
31- bench = @benchmark XML. write ($ output, $ node1)
32- push! (df, (;kind, name, bench))
33-
34-
35- name = " EzXML.writexml"
36- @info name
37- node2 = EzXML. readxml (file)
38- bench = @benchmark EzXML. write ($ output, $ node2)
39- push! (df, (;kind, name, bench))
40-
41-
32+ @add_benchmark " Write" " XML.write" XML. write ($ (tempname ()), o) setup = (o = read (file, Node))
33+ @add_benchmark " Write" " EzXML.writexml" EzXML. write ($ (tempname ()), o) setup = (o = EzXML. readxml (file))
4234
4335# -----------------------------------------------------------------------------# Read
44- kind = " Read"
45-
46- # name = "XML.Raw"
47- # @info name
48- # bench = @benchmark read($file, XML.Raw)
49- # push!(df, (;kind, name, bench))
50-
51-
52- name = " XML.LazyNode"
53- @info name
54- bench = @benchmark read ($ file, LazyNode)
55- push! (df, (;kind, name, bench))
56-
57- name = " XML.Node"
58- @info name
59- bench = @benchmark read ($ file, Node)
60- push! (df, (;kind, name, bench))
61-
62-
63- name = " EzXML.readxml"
64- @info name
65- bench = @benchmark EzXML. readxml ($ file)
66- push! (df, (;kind, name, bench))
67-
68-
69- name = " XMLDict.xml_dict"
70- @info name
71- bench = @benchmark XMLDict. xml_dict (read ($ file, String))
72- push! (df, (;kind, name, bench))
73-
36+ @add_benchmark " Read" " XML.LazyNode" read ($ file, LazyNode)
37+ @add_benchmark " Read" " XML.Node" read ($ file, Node)
38+ @add_benchmark " Read" " EzXML.readxml" EzXML. readxml ($ file)
39+ @add_benchmark " Read" " XMLDict.xml_dict" XMLDict. xml_dict (read ($ file, String))
7440
7541# -----------------------------------------------------------------------------# Lazy Iteration
76- kind = " Lazy Iteration"
77-
78- name = " for x in read(file, LazyNode); end"
79- @info name
80- bench = @benchmark (for x in read ($ file, LazyNode); end )
81- push! (df, (;kind, name, bench))
82-
83-
84- name = " for x in open(EzXML.StreamReader, file); end"
85- @info name
86- bench = @benchmark (reader = open (EzXML. StreamReader, $ file); for x in reader; end ; close (reader))
87- push! (df, (;kind, name, bench))
88-
42+ @add_benchmark " Lazy Iteration" " LazyNode" for x in read ($ file, LazyNode); end
43+ @add_benchmark " Lazy Iteration" " EzXML.StreamReader" (reader = open (EzXML. StreamReader, $ file); for x in reader; end ; close (reader))
8944
9045# -----------------------------------------------------------------------------# Lazy Iteration: Collect Tags
91- kind = " Collect Tags"
92-
93- name = " via XML.LazyNode"
94- @info name
95- bench = @benchmark [tag (x) for x in o] setup= (o = read (file, LazyNode))
96- push! (df, (;kind, name, bench))
46+ @add_benchmark " Collect Tags" " LazyNode" [tag (x) for x in o] setup = (o = read (file, LazyNode))
47+ @add_benchmark " Collect Tags" " EzXML.StreamReader" [r. name for x in r if x == EzXML. READER_ELEMENT] setup= (r= open (EzXML. StreamReader, file)) teardown= (close (r))
9748
98-
99- name = " via EzXML.StreamReader"
100- @info name
101- bench = @benchmark [r. name for x in r if x == EzXML. READER_ELEMENT] setup= (r= open (EzXML. StreamReader, file)) teardown= (close (r))
102- push! (df, (;kind, name, bench))
103-
104-
105- name = " via EzXML.readxml"
106- @info name
10749function get_tags (o:: EzXML.Node )
10850 out = String[]
10951 for node in EzXML. eachelement (o)
@@ -114,18 +56,14 @@ function get_tags(o::EzXML.Node)
11456 end
11557 out
11658end
117- bench = @benchmark get_tags (o. root) setup= (o = EzXML. readxml (file))
118- push! (df, (;kind, name, bench))
119-
120-
121-
59+ @add_benchmark " Collect Tags" " EzXML.readxml" get_tags (o. root) setup= (o = EzXML. readxml (file))
12260
12361
12462# -----------------------------------------------------------------------------# Plots
12563function plot (df, kind)
12664 g = groupby (df, :kind )
12765 sub = g[(;kind)]
128- x = map (row -> " $(row. kind) : $(row . name)" , eachrow (sub))
66+ x = map (row -> " $(row. name) " , eachrow (sub))
12967 y = map (x -> median (x). time / 1000 ^ 2 , sub. bench)
13068 display (barplot (x, y, title = " $kind Time (ms)" , border= :none , width= 50 ))
13169end
0 commit comments