You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

59 lines
1.2 KiB
Rust

extern crate flame;
use std::fs::File;
fn byref(n: u64, data: &[u64; 1024]) {
if n>0 {
byref(n-1, data);
byref(n-1, data);
}
}
fn bycopy(n: u64, data: [u64; 1024]) {
if n>0 {
bycopy(n-1, data);
bycopy(n-1, data);
}
}
struct DataClonable([u64; 1024]);
impl Clone for DataClonable {
fn clone(&self) -> Self {
let mut newdata = [0; 1024];
for i in 0..1024 {
newdata[i] = self.0[i];
}
DataClonable(newdata)
}
}
fn byclone<T: Clone>(n: u64, data: T) {
if n>0 {
byclone(n-1, data.clone());
byclone(n-1, data.clone());
}
}
fn main() {
let data = [0; 1024];
flame::start("by reference");
byref(15, &data);
flame::end("by reference");
let data = [0; 1024];
flame::start("by copy");
bycopy(15, data);
flame::end("by copy");
let data = [0; 1024];
flame::start("by clone");
byclone(15, data);
flame::end("by clone");
let data = DataClonable([0; 1024]);
flame::start("by clone (with extras)");
//2^4 instead of 2^15!!!!
byclone(4, data);
flame::end("by clone (with extras)");
flame::dump_html(&mut File::create("flame-graph.html").unwrap()).unwrap();
}