aboutsummaryrefslogtreecommitdiff
path: root/vendor/backtrace/benches/benchmarks.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/backtrace/benches/benchmarks.rs')
-rw-r--r--vendor/backtrace/benches/benchmarks.rs92
1 files changed, 92 insertions, 0 deletions
diff --git a/vendor/backtrace/benches/benchmarks.rs b/vendor/backtrace/benches/benchmarks.rs
new file mode 100644
index 0000000..e14e733
--- /dev/null
+++ b/vendor/backtrace/benches/benchmarks.rs
@@ -0,0 +1,92 @@
+#![feature(test)]
+
+extern crate test;
+
+#[cfg(feature = "std")]
+use backtrace::Backtrace;
+
+#[bench]
+#[cfg(feature = "std")]
+fn trace(b: &mut test::Bencher) {
+ #[inline(never)]
+ fn the_function() {
+ backtrace::trace(|frame| {
+ let ip = frame.ip();
+ test::black_box(ip);
+ true
+ });
+ }
+ b.iter(the_function);
+}
+
+#[bench]
+#[cfg(feature = "std")]
+fn trace_and_resolve_callback(b: &mut test::Bencher) {
+ #[inline(never)]
+ fn the_function() {
+ backtrace::trace(|frame| {
+ backtrace::resolve(frame.ip(), |symbol| {
+ let addr = symbol.addr();
+ test::black_box(addr);
+ });
+ true
+ });
+ }
+ b.iter(the_function);
+}
+
+#[bench]
+#[cfg(feature = "std")]
+fn trace_and_resolve_separate(b: &mut test::Bencher) {
+ #[inline(never)]
+ fn the_function(frames: &mut Vec<*mut std::ffi::c_void>) {
+ backtrace::trace(|frame| {
+ frames.push(frame.ip());
+ true
+ });
+ frames.iter().for_each(|frame_ip| {
+ backtrace::resolve(*frame_ip, |symbol| {
+ test::black_box(symbol);
+ });
+ });
+ }
+ let mut frames = Vec::with_capacity(1024);
+ b.iter(|| {
+ the_function(&mut frames);
+ frames.clear();
+ });
+}
+
+#[bench]
+#[cfg(feature = "std")]
+fn new_unresolved(b: &mut test::Bencher) {
+ #[inline(never)]
+ fn the_function() {
+ let bt = Backtrace::new_unresolved();
+ test::black_box(bt);
+ }
+ b.iter(the_function);
+}
+
+#[bench]
+#[cfg(feature = "std")]
+fn new(b: &mut test::Bencher) {
+ #[inline(never)]
+ fn the_function() {
+ let bt = Backtrace::new();
+ test::black_box(bt);
+ }
+ b.iter(the_function);
+}
+
+#[bench]
+#[cfg(feature = "std")]
+fn new_unresolved_and_resolve_separate(b: &mut test::Bencher) {
+ #[inline(never)]
+ fn the_function() {
+ let mut bt = Backtrace::new_unresolved();
+ bt.resolve();
+ test::black_box(bt);
+ }
+ b.iter(the_function);
+}