[go: up one dir, main page]

image 0.23.1

Imaging library written in Rust. Provides basic filters and decoders for the most common image formats.
Documentation
extern crate criterion;

use criterion::{Bencher, Criterion, ParameterizedBenchmark, criterion_group, criterion_main};
use image::{ColorType, bmp::BMPEncoder};

use std::fs::File;
use std::io::BufWriter;

fn encode_gray_test(criterion: &mut Criterion) {
    let counts = vec![100usize, 200, 400, 800, 1200];
    fn raw_vec(b: &mut Bencher, s: &usize) {
        let s = *s;
        let im = vec![0; s * s];
        let mut v = vec![0; s * s / 4 + 4096 + s * 4];
        b.iter(|| {
            v.clear();
            let mut x = BMPEncoder::new(&mut v);
            x.encode(&im, (s / 2) as u32, (s / 2) as u32, ColorType::L8).unwrap();
        }
        )
    }

    fn buf_vec(b: &mut Bencher, s: &usize) {
        let s = *s;
        let im = vec![0; s * s];
        let mut v = vec![0; s * s / 4 + 4096 + s * 4];
        b.iter(|| {
            v.clear();
            let mut buf = BufWriter::new(&mut v);
            let mut x = BMPEncoder::new(&mut buf);
            x.encode(&im, (s / 2) as u32, (s / 2) as u32, ColorType::L8).unwrap();
        }
        )
    }

    fn buf_file(b: &mut Bencher, s: &usize) {
        let s = *s;
        let im = vec![0; s * s];
        b.iter(|| {
            let mut f = File::open("temp.bmp").unwrap();
            let mut buf = BufWriter::new(&mut f);
            let mut x = BMPEncoder::new(&mut buf);
            x.encode(&im, (s / 2) as u32, (s / 2) as u32, ColorType::L8).unwrap();
        }
        )
    }

    criterion.bench("encode_gray",
                    ParameterizedBenchmark::new("raw_vec", raw_vec, counts)
                        .with_function("buf_vec", buf_vec)
                        .with_function("buf_file", buf_file));
}

fn encode_rgb_test(criterion: &mut Criterion) {
    let counts = vec![100usize, 200, 400, 800, 1200];
    fn raw_vec(b: &mut Bencher, s: &usize) {
        let s = *s;
        let im = vec![0; s * s];
        let mut v = vec![0; s * s / 4 + 4096 + s * 4];
        b.iter(|| {
            v.clear();
            let mut x = BMPEncoder::new(&mut v);
            x.encode(&im, (s / 2) as u32, (s / 2) as u32, ColorType::Rgb8).unwrap();
        }
        )
    }

    fn buf_vec(b: &mut Bencher, s: &usize) {
        let s = *s;
        let im = vec![0; s * s];
        let mut v = vec![0; s * s / 4 + 4096 + s * 4];
        b.iter(|| {
            v.clear();
            let mut buf = BufWriter::new(&mut v);
            let mut x = BMPEncoder::new(&mut buf);
            x.encode(&im, (s / 2) as u32, (s / 2) as u32, ColorType::Rgb8).unwrap();
        }
        )
    }

    fn buf_file(b: &mut Bencher, s: &usize) {
        let s = *s;
        let im = vec![0; s * s];
        b.iter(|| {
            let mut f = File::open("temp.bmp").unwrap();
            let mut buf = BufWriter::new(&mut f);
            let mut x = BMPEncoder::new(&mut buf);
            x.encode(&im, (s / 2) as u32, (s / 2) as u32, ColorType::Rgb8).unwrap();
        }
        )
    }

    criterion.bench("encode_rgb",
                    ParameterizedBenchmark::new("raw_vec", raw_vec, counts)
                        .with_function("buf_vec", buf_vec)
                        .with_function("buf_file", buf_file));
}

fn encode_rgba_test(criterion: &mut Criterion) {
    let counts = vec![100usize, 200, 400, 800, 1200];
    fn raw_vec(b: &mut Bencher, s: &usize) {
        let s = *s;
        let im = vec![0; s * s];
        let mut v = vec![0; s * s / 4 + 4096 + s * 4];
        b.iter(|| {
            v.clear();
            let mut x = BMPEncoder::new(&mut v);
            x.encode(&im, (s / 2) as u32, (s / 2) as u32, ColorType::Rgba8).unwrap();
        }
        )
    }

    fn buf_vec(b: &mut Bencher, s: &usize) {
        let s = *s;
        let im = vec![0; s * s];
        let mut v = vec![0; s * s / 4 + 4096 + s * 4];
        b.iter(|| {
            v.clear();
            let mut buf = BufWriter::new(&mut v);
            let mut x = BMPEncoder::new(&mut buf);
            x.encode(&im, (s / 2) as u32, (s / 2) as u32, ColorType::Rgba8).unwrap();
        }
        )
    }

    fn buf_file(b: &mut Bencher, s: &usize) {
        let s = *s;
        let im = vec![0; s * s];
        b.iter(|| {
            let mut f = File::open("temp.bmp").unwrap();
            let mut buf = BufWriter::new(&mut f);
            let mut x = BMPEncoder::new(&mut buf);
            x.encode(&im, (s / 2) as u32, (s / 2) as u32, ColorType::Rgba8).unwrap();
        }
        )
    }

    criterion.bench("encode_rgba",
                    ParameterizedBenchmark::new("raw_vec", raw_vec, counts)
                        .with_function("buf_vec", buf_vec)
                        .with_function("buf_file", buf_file));
}

criterion_group!(benches, encode_gray_test);
criterion_main!(benches);