Skip to content

Commit 5ec7d68

Browse files
committed
Add extra benchmarks
1 parent 283e63f commit 5ec7d68

File tree

2 files changed

+58
-0
lines changed

2 files changed

+58
-0
lines changed

benchmarks/Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ authors = ["Jan Bujak <[email protected]>"]
66
[dependencies]
77
stdweb = { path = ".." }
88
lazy_static = "1"
9+
serde = "1"
10+
serde_derive = "1"
911

1012
[build-dependencies]
1113
rustc_version = "0.2"

benchmarks/src/main.rs

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,13 @@ extern crate stdweb;
99
#[macro_use]
1010
extern crate lazy_static;
1111

12+
#[macro_use]
13+
extern crate serde_derive;
14+
1215
use std::time::Duration;
16+
use std::collections::HashMap;
1317

18+
use stdweb::Reference;
1419
use stdweb::web::document;
1520
use stdweb::web::event::ClickEvent;
1621
use stdweb::unstable::TryInto;
@@ -135,10 +140,61 @@ fn run_benchmarks< F: FnOnce( &mut Bencher ) >( callback: F ) {
135140
}
136141
}
137142

143+
#[derive(PartialEq, Serialize, Deserialize, Debug)]
144+
struct Struct {
145+
number: i32,
146+
boolean: bool,
147+
string: String,
148+
array: Vec< i32 >,
149+
object: HashMap< String, i32 >
150+
}
151+
152+
js_serializable!( Struct );
153+
138154
fn main() {
139155
run_benchmarks( |bencher| {
140156
bencher.add( "call-into-js", || || js!( @(no_return) ) );
141157
bencher.add( "call-into-js-returning-undefined", || || js!() );
158+
bencher.add( "call-into-js-returning-bool", || || js!( return true; ) );
159+
bencher.add( "call-into-js-returning-string", || || js!( return "Hello world!"; ) );
142160
bencher.add( "call-into-js-with-string", || || js!( @(no_return) var test = @{"Hello world!"}; ) );
161+
bencher.add( "call-into-js-with-bool", || || js!( @(no_return) var test = @{true}; ) );
162+
bencher.add( "call-into-js-with-array", || || js!( @(no_return) var test = @{&[1, 2, 3, 4, 5, 6, 7, 8][..]}; ) );
163+
bencher.add( "call-into-js-with-object", || {
164+
let object: HashMap< _, _ > =
165+
vec![
166+
("One".to_owned(), 1),
167+
("Two".to_owned(), 2),
168+
("Three".to_owned(), 3)
169+
].into_iter().collect();
170+
171+
move || js!( @(no_return) var test = @{&object}; )
172+
});
173+
bencher.add( "call-into-js-with-serde-struct", || {
174+
let structure = Struct {
175+
number: 123,
176+
boolean: true,
177+
string: "Hello world!".to_owned(),
178+
array: vec![ 1, 2, 3, 4, 5, 6, 7, 8 ],
179+
object: vec![
180+
("One".to_owned(), 1),
181+
("Two".to_owned(), 2),
182+
("Three".to_owned(), 3)
183+
].into_iter().collect()
184+
};
185+
186+
move || js!( @(no_return) var test = @{&structure}; )
187+
});
188+
bencher.add( "call-into-js-with-reference", || {
189+
let reference: Reference = js!( return [@{0}]; ).try_into().unwrap();
190+
move || js!( @(no_return) var test = @{&reference}; )
191+
});
192+
bencher.add( "call-into-js-with-reference-while-having-a-lot-of-references", || {
193+
let references: Vec< Reference > = (0..1000).into_iter().map( |nth| {
194+
js!( return [@{nth}]; ).try_into().unwrap()
195+
}).collect();
196+
197+
move || js!( @(no_return) var test = @{&references[0]}; )
198+
});
143199
});
144200
}

0 commit comments

Comments
 (0)