@@ -54,16 +54,36 @@ fn low_level_comparison(c: &mut Criterion) {
5454
5555 group. throughput ( Throughput :: Bytes ( data. len ( ) as u64 ) ) ;
5656 group. bench_with_input (
57- BenchmarkId :: new ( "quick_xml" , filename) ,
57+ BenchmarkId :: new ( "quick_xml:borrowed " , filename) ,
5858 * data,
5959 |b, input| {
6060 b. iter ( || {
61- let mut r = Reader :: from_reader ( input. as_bytes ( ) ) ;
62- r. config_mut ( ) . check_end_names = false ;
61+ let mut reader = Reader :: from_str ( input) ;
62+ reader. config_mut ( ) . check_end_names = false ;
63+ let mut count = criterion:: black_box ( 0 ) ;
64+ loop {
65+ match reader. read_event ( ) {
66+ Ok ( Event :: Start ( _) ) | Ok ( Event :: Empty ( _) ) => count += 1 ,
67+ Ok ( Event :: Eof ) => break ,
68+ _ => ( ) ,
69+ }
70+ }
71+ assert_eq ! ( count, total_tags, "Overall tag count in {}" , filename) ;
72+ } )
73+ } ,
74+ ) ;
75+
76+ group. bench_with_input (
77+ BenchmarkId :: new ( "quick_xml:buffered" , filename) ,
78+ * data,
79+ |b, input| {
80+ b. iter ( || {
81+ let mut reader = Reader :: from_reader ( input. as_bytes ( ) ) ;
82+ reader. config_mut ( ) . check_end_names = false ;
6383 let mut count = criterion:: black_box ( 0 ) ;
6484 let mut buf = Vec :: new ( ) ;
6585 loop {
66- match r . read_event_into ( & mut buf) {
86+ match reader . read_event_into ( & mut buf) {
6787 Ok ( Event :: Start ( _) ) | Ok ( Event :: Empty ( _) ) => count += 1 ,
6888 Ok ( Event :: Eof ) => break ,
6989 _ => ( ) ,
@@ -79,14 +99,14 @@ fn low_level_comparison(c: &mut Criterion) {
7999 BenchmarkId :: new ( "maybe_xml" , filename) ,
80100 * data,
81101 |b, input| {
82- use maybe_xml:: Lexer ;
83102 use maybe_xml:: token:: Ty ;
103+ use maybe_xml:: Reader ;
84104
85105 b. iter ( || {
86- let lexer = Lexer :: from_slice ( input. as_bytes ( ) ) ;
106+ let reader = Reader :: from_str ( input) ;
87107
88108 let mut count = criterion:: black_box ( 0 ) ;
89- for token in lexer . into_iter ( ) {
109+ for token in reader . into_iter ( ) {
90110 match token. ty ( ) {
91111 Ty :: StartTag ( _) | Ty :: EmptyElementTag ( _) => count += 1 ,
92112 _ => ( ) ,
@@ -272,7 +292,8 @@ fn serde_comparison(c: &mut Criterion) {
272292 }
273293
274294 b. iter ( || {
275- let rss: Rss < Enclosure > = criterion:: black_box ( quick_xml:: de:: from_str ( input) . unwrap ( ) ) ;
295+ let rss: Rss < Enclosure > =
296+ criterion:: black_box ( quick_xml:: de:: from_str ( input) . unwrap ( ) ) ;
276297 assert_eq ! ( rss. channel. items. len( ) , 99 ) ;
277298 } )
278299 } ,
@@ -307,7 +328,8 @@ fn serde_comparison(c: &mut Criterion) {
307328 }
308329
309330 b. iter ( || {
310- let rss: Rss < Enclosure > = criterion:: black_box ( serde_xml_rs:: from_str ( input) . unwrap ( ) ) ;
331+ let rss: Rss < Enclosure > =
332+ criterion:: black_box ( serde_xml_rs:: from_str ( input) . unwrap ( ) ) ;
311333 assert_eq ! ( rss. channel. items. len( ) , 99 ) ;
312334 } )
313335 } ,
0 commit comments