Skip to content

Commit

Permalink
Added CLEAN_JS and MINI_JS benches (#581)
Browse files Browse the repository at this point in the history
* Added CLEAN_JS and MINI_JS benches

These benches are arbitrary code which is subject to change,
functionally the programs are identical.

* Forgot semicolon

* Adding parsing benchmarks for CleanJS & MiniJS

Added identical benchmark cases for parser.

* Migrating Clean and Mini benchmarks to new format

Adding js scripts in bench_scripts & moving exec, full and parser
benchmarks to new include_str!() macro.
  • Loading branch information
neeldug authored Aug 20, 2020
1 parent 8ade420 commit 4009204
Show file tree
Hide file tree
Showing 5 changed files with 90 additions and 0 deletions.
15 changes: 15 additions & 0 deletions boa/benches/bench_scripts/clean_js.js
Original file line number Diff line number Diff line change
@@ -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
});
}();
1 change: 1 addition & 0 deletions boa/benches/bench_scripts/mini_js.js
Original file line number Diff line number Diff line change
@@ -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})}();
28 changes: 28 additions & 0 deletions boa/benches/exec.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -397,5 +423,7 @@ criterion_group!(
boolean_object_access,
string_object_access,
arithmetic_operations,
clean_js,
mini_js,
);
criterion_main!(execution);
18 changes: 18 additions & 0 deletions boa/benches/full.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -200,5 +216,7 @@ criterion_group!(
boolean_object_access,
string_object_access,
arithmetic_operations,
clean_js,
mini_js,
);
criterion_main!(full);
28 changes: 28 additions & 0 deletions boa/benches/parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -104,12 +104,40 @@ 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,
hello_world_parser,
for_loop_parser,
long_file_parser,
goal_symbol_switch,
clean_js,
mini_js,
);
criterion_main!(parser);

0 comments on commit 4009204

Please sign in to comment.