diff --git a/boa/benches/bench_scripts/clean_js.js b/boa/benches/bench_scripts/clean_js.js new file mode 100644 index 0000000000..848ee4d8a0 --- /dev/null +++ b/boa/benches/bench_scripts/clean_js.js @@ -0,0 +1,15 @@ +!function () { + var M = new Array(); + for (i = 0; i < 100; i++) { + M.push(Math.floor(Math.random() * 100)); + } + var test = []; + for (i = 0; i < 100; i++) { + if (M[i] > 50) { + test.push(M[i]); + } + } + test.forEach(elem => { + 0 + }); +}(); diff --git a/boa/benches/bench_scripts/mini_js.js b/boa/benches/bench_scripts/mini_js.js new file mode 100644 index 0000000000..e7a82793a7 --- /dev/null +++ b/boa/benches/bench_scripts/mini_js.js @@ -0,0 +1 @@ +!function(){var r=new Array();for(i=0;i<100;i++)r.push(Math.floor(100*Math.random()));var a=[];for(i=0;i<100;i++)r[i]>50&&a.push(r[i]);a.forEach(i=>{0})}(); diff --git a/boa/benches/exec.rs b/boa/benches/exec.rs index 4b53386466..fee5916c3b 100644 --- a/boa/benches/exec.rs +++ b/boa/benches/exec.rs @@ -374,6 +374,32 @@ fn arithmetic_operations(c: &mut Criterion) { }); } +static CLEAN_JS: &str = include_str!("bench_scripts/clean_js.js"); + +fn clean_js(c: &mut Criterion) { + let realm = Realm::create(); + let mut engine = Interpreter::new(realm); + let mut lexer = Lexer::new(CLEAN_JS); + lexer.lex().expect("failed to lex"); + let nodes = Parser::new(&lexer.tokens).parse_all().unwrap(); + c.bench_function("Clean js (Execution)", move |b| { + b.iter(|| black_box(&nodes).run(&mut engine).unwrap()) + }); +} + +static MINI_JS: &str = include_str!("bench_scripts/mini_js.js"); + +fn mini_js(c: &mut Criterion) { + let realm = Realm::create(); + let mut engine = Interpreter::new(realm); + let mut lexer = Lexer::new(MINI_JS); + lexer.lex().expect("failed to lex"); + let nodes = Parser::new(&lexer.tokens).parse_all().unwrap(); + c.bench_function("Mini js (Execution)", move |b| { + b.iter(|| black_box(&nodes).run(&mut engine).unwrap()) + }); +} + criterion_group!( execution, create_realm, @@ -397,5 +423,7 @@ criterion_group!( boolean_object_access, string_object_access, arithmetic_operations, + clean_js, + mini_js, ); criterion_main!(execution); diff --git a/boa/benches/full.rs b/boa/benches/full.rs index 55dd5fab6e..d979c5ea68 100644 --- a/boa/benches/full.rs +++ b/boa/benches/full.rs @@ -178,6 +178,22 @@ fn arithmetic_operations(c: &mut Criterion) { }); } +static CLEAN_JS: &str = include_str!("bench_scripts/clean_js.js"); + +fn clean_js(c: &mut Criterion) { + c.bench_function("Clean js (Full)", move |b| { + b.iter(|| exec(black_box(CLEAN_JS))) + }); +} + +static MINI_JS: &str = include_str!("bench_scripts/mini_js.js"); + +fn mini_js(c: &mut Criterion) { + c.bench_function("Mini js (Full)", move |b| { + b.iter(|| exec(black_box(MINI_JS))) + }); +} + criterion_group!( full, symbol_creation, @@ -200,5 +216,7 @@ criterion_group!( boolean_object_access, string_object_access, arithmetic_operations, + clean_js, + mini_js, ); criterion_main!(full); diff --git a/boa/benches/parser.rs b/boa/benches/parser.rs index ac9ab7586f..1f60cd0ad7 100644 --- a/boa/benches/parser.rs +++ b/boa/benches/parser.rs @@ -104,6 +104,32 @@ fn goal_symbol_switch(c: &mut Criterion) { }); } +static CLEAN_JS: &str = include_str!("bench_scripts/clean_js.js"); + +fn clean_js(c: &mut Criterion) { + c.bench_function("Clean js (Parser)", move |b| { + b.iter(|| { + let mut lexer = Lexer::new(black_box(CLEAN_JS)); + lexer.lex().expect("failed to lex"); + + Parser::new(&black_box(lexer.tokens)).parse_all() + }) + }); +} + +static MINI_JS: &str = include_str!("bench_scripts/mini_js.js"); + +fn mini_js(c: &mut Criterion) { + c.bench_function("Mini js (Parser)", move |b| { + b.iter(|| { + let mut lexer = Lexer::new(black_box(MINI_JS)); + lexer.lex().expect("failed to lex"); + + Parser::new(&black_box(lexer.tokens)).parse_all() + }) + }); +} + criterion_group!( parser, expression_parser, @@ -111,5 +137,7 @@ criterion_group!( for_loop_parser, long_file_parser, goal_symbol_switch, + clean_js, + mini_js, ); criterion_main!(parser);