Sorting benches

This commit is contained in:
Vincent Prouillet 2017-07-01 12:06:49 +09:00
parent 517c18c0f6
commit 11c89fa663
3 changed files with 46 additions and 4 deletions

27
benches/sorting.rs Normal file
View file

@ -0,0 +1,27 @@
//! Benchmarking separate functions of Gutenberg
#![feature(test)]
extern crate test;
extern crate gutenberg;
extern crate tempdir;
use std::env;
use tempdir::TempDir;
use gutenberg::{Site, sort_pages, SortBy};
fn setup_site(name: &str) -> Site {
let mut path = env::current_dir().unwrap().to_path_buf();
path.push("benches");
path.push(name);
let mut site = Site::new(&path, "config.toml").unwrap();
site.load().unwrap();
site
}
#[bench]
fn bench_sort_pages_medium_blog(b: &mut test::Bencher) {
let mut site = setup_site("huge-blog");
let section = site.sections.values().next().unwrap().clone();
b.iter(|| sort_pages(section.pages.clone(), SortBy::None));
}

View file

@ -8,7 +8,7 @@ extern crate tempdir;
use std::env; use std::env;
use tempdir::TempDir; use tempdir::TempDir;
use gutenberg::Site; use gutenberg::{Site, sort_pages};
fn setup_site(name: &str) -> Site { fn setup_site(name: &str) -> Site {
@ -58,3 +58,16 @@ fn bench_render_small_section_with_pages_and_no_pagination(b: &mut test::Bencher
section.meta.template = None; section.meta.template = None;
b.iter(|| site.render_section(&section, true).unwrap()); b.iter(|| site.render_section(&section, true).unwrap());
} }
#[bench]
fn bench_sort_sections_pages_medium_blog(b: &mut test::Bencher) {
let mut site = setup_site("medium-blog");
b.iter(|| site.sort_sections_pages(None));
}
#[bench]
fn bench_sort_sections_pages_medium_kb(b: &mut test::Bencher) {
let mut site = setup_site("medium-kb");
b.iter(|| site.sort_sections_pages(None));
}

View file

@ -1,3 +1,5 @@
use rayon::prelude::*;
use content::Page; use content::Page;
#[derive(Debug, Copy, Clone, PartialEq, Serialize, Deserialize)] #[derive(Debug, Copy, Clone, PartialEq, Serialize, Deserialize)]
@ -25,7 +27,7 @@ pub fn sort_pages(pages: Vec<Page>, sort_by: SortBy) -> (Vec<Page>, Vec<Page>) {
cannot_be_sorted.push(page); cannot_be_sorted.push(page);
} }
} }
can_be_sorted.sort_by(|a, b| b.meta.date().unwrap().cmp(&a.meta.date().unwrap())); can_be_sorted.par_sort_unstable_by(|a, b| b.meta.date().unwrap().cmp(&a.meta.date().unwrap()));
(can_be_sorted, cannot_be_sorted) (can_be_sorted, cannot_be_sorted)
}, },
@ -40,9 +42,9 @@ pub fn sort_pages(pages: Vec<Page>, sort_by: SortBy) -> (Vec<Page>, Vec<Page>) {
} }
} }
if sort_by == SortBy::Order { if sort_by == SortBy::Order {
can_be_sorted.sort_by(|a, b| b.meta.order().cmp(&a.meta.order())); can_be_sorted.par_sort_unstable_by(|a, b| b.meta.order().cmp(&a.meta.order()));
} else { } else {
can_be_sorted.sort_by(|a, b| a.meta.order().cmp(&b.meta.order())); can_be_sorted.par_sort_unstable_by(|a, b| a.meta.order().cmp(&b.meta.order()));
} }
(can_be_sorted, cannot_be_sorted) (can_be_sorted, cannot_be_sorted)