arena: use the generic bh.iter to stop the benchmarks being DCE'd.

Before:

    test test::bench_nonpod_nonarena  ... bench:        62 ns/iter (+/- 6)
    test test::bench_pod_nonarena     ... bench:         0 ns/iter (+/- 0)

After:

    test test::bench_nonpod_nonarena  ... bench:       158 ns/iter (+/- 11)
    test test::bench_pod_nonarena     ... bench:        48 ns/iter (+/- 2)

The other tests show no change, but are adjusted to use the generic
return value of `.iter` anyway so that this doesn't change in future.
This commit is contained in:
Huon Wilson 2014-02-08 21:32:09 +11:00
parent b029a18820
commit 38447344f1

View File

@ -536,18 +536,18 @@ mod test {
x: 1, x: 1,
y: 2, y: 2,
z: 3, z: 3,
}); })
}) })
} }
#[bench] #[bench]
pub fn bench_pod_nonarena(bh: &mut BenchHarness) { pub fn bench_pod_nonarena(bh: &mut BenchHarness) {
bh.iter(|| { bh.iter(|| {
let _ = ~Point { ~Point {
x: 1, x: 1,
y: 2, y: 2,
z: 3, z: 3,
}; }
}) })
} }
@ -561,7 +561,7 @@ mod test {
y: 2, y: 2,
z: 3, z: 3,
} }
}); })
}) })
} }
@ -588,17 +588,17 @@ mod test {
arena.alloc(Nonpod { arena.alloc(Nonpod {
string: ~"hello world", string: ~"hello world",
array: ~[ 1, 2, 3, 4, 5 ], array: ~[ 1, 2, 3, 4, 5 ],
}); })
}) })
} }
#[bench] #[bench]
pub fn bench_nonpod_nonarena(bh: &mut BenchHarness) { pub fn bench_nonpod_nonarena(bh: &mut BenchHarness) {
bh.iter(|| { bh.iter(|| {
let _ = ~Nonpod { ~Nonpod {
string: ~"hello world", string: ~"hello world",
array: ~[ 1, 2, 3, 4, 5 ], array: ~[ 1, 2, 3, 4, 5 ],
}; }
}) })
} }
@ -606,10 +606,10 @@ mod test {
pub fn bench_nonpod_old_arena(bh: &mut BenchHarness) { pub fn bench_nonpod_old_arena(bh: &mut BenchHarness) {
let arena = Arena::new(); let arena = Arena::new();
bh.iter(|| { bh.iter(|| {
let _ = arena.alloc(|| Nonpod { arena.alloc(|| Nonpod {
string: ~"hello world", string: ~"hello world",
array: ~[ 1, 2, 3, 4, 5 ], array: ~[ 1, 2, 3, 4, 5 ],
}); })
}) })
} }
} }