Skip to content

Commit

Permalink
macros: Move test for NEVER interest to callsite
Browse files Browse the repository at this point in the history
This lets us completely skip `Span::new` in this case. This brings the benchmarks for the disabled case back into parity with `log`.

Before:
```
     Running target/release/deps/no_subscriber-1064195d321c8640

running 5 tests
test bench_1_atomic_load              ... bench:           0 ns/iter (+/- 0)
test bench_costly_field_no_subscriber ... bench:           6 ns/iter (+/- 0)
test bench_log_no_logger              ... bench:           0 ns/iter (+/- 0)
test bench_no_span_no_subscriber      ... bench:           0 ns/iter (+/- 0)
test bench_span_no_subscriber         ... bench:           6 ns/iter (+/- 0)

test result: ok. 0 passed; 0 failed; 0 ignored; 5 measured; 0 filtered out

     Running target/release/deps/subscriber-7319775649c47f41

running 4 tests
test span_no_fields          ... bench:          37 ns/iter (+/- 10)
test span_repeatedly         ... bench:       5,626 ns/iter (+/- 812)
test span_with_fields        ... bench:         101 ns/iter (+/- 20)
test span_with_fields_record ... bench:       1,035 ns/iter (+/- 171)

test result: ok. 0 passed; 0 failed; 0 ignored; 4 measured; 0 filtered out
```
After:
```
     Running target/release/deps/no_subscriber-1064195d321c8640

running 5 tests
test bench_1_atomic_load              ... bench:           0 ns/iter (+/- 0)
test bench_costly_field_no_subscriber ... bench:           0 ns/iter (+/- 0)
test bench_log_no_logger              ... bench:           0 ns/iter (+/- 0)
test bench_no_span_no_subscriber      ... bench:           0 ns/iter (+/- 0)
test bench_span_no_subscriber         ... bench:           0 ns/iter (+/- 0)

test result: ok. 0 passed; 0 failed; 0 ignored; 5 measured; 0 filtered out

     Running target/release/deps/subscriber-7319775649c47f41

running 4 tests
test span_no_fields          ... bench:          36 ns/iter (+/- 8)
test span_repeatedly         ... bench:       5,381 ns/iter (+/- 1,075)
test span_with_fields        ... bench:         110 ns/iter (+/- 19)
test span_with_fields_record ... bench:       1,019 ns/iter (+/- 247)

test result: ok. 0 passed; 0 failed; 0 ignored; 4 measured; 0 filtered out
```

Signed-off-by: Eliza Weisman <eliza@buoyant.io>
  • Loading branch information
hawkw committed Jan 18, 2019
1 parent f0170be commit bdeea40
Showing 1 changed file with 37 additions and 27 deletions.
64 changes: 37 additions & 27 deletions tokio-trace/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -448,20 +448,25 @@ macro_rules! span {
use $crate::{callsite, field::{Value, AsField}, Span};
use $crate::callsite::Callsite;
let callsite = callsite! { span: $name, $( $k ),* };
let mut span = Span::new(callsite.interest(), callsite.metadata());
// Depending on how many fields are generated, this may or may
// not actually be used, but it doesn't make sense to repeat it.
#[allow(unused_variables, unused_mut)] {
if !span.is_disabled() {
let mut keys = callsite.metadata().fields().into_iter();
$(
let key = keys.next()
.expect(concat!("metadata should define a key for '", stringify!($k), "'"));
span!(@ record: span, $k, &key, $($val)*);
)*
};
let interest = callsite.interest();
if interest.is_never() {
Span::new_disabled()
} else {
let mut span = Span::new(interest, callsite.metadata());
// Depending on how many fields are generated, this may or may
// not actually be used, but it doesn't make sense to repeat it.
#[allow(unused_variables, unused_mut)] {
if !span.is_disabled() {
let mut keys = callsite.metadata().fields().into_iter();
$(
let key = keys.next()
.expect(concat!("metadata should define a key for '", stringify!($k), "'"));
span!(@ record: span, $k, &key, $($val)*);
)*
};
}
span
}
span
}
};
(@ record: $span:expr, $k:expr, $i:expr, $val:expr) => (
Expand Down Expand Up @@ -540,22 +545,27 @@ macro_rules! event {
target:
$target, $( $k ),*
};
let mut event = Event::new(callsite.interest(), callsite.metadata());
// Depending on how many fields are generated, this may or may
// not actually be used, but it doesn't make sense to repeat it.
#[allow(unused_variables, unused_mut)] {
if !event.is_disabled() {
let mut keys = callsite.metadata().fields().into_iter();
let msg_key = keys.next()
.expect("event metadata should define a key for the message");
$(
let key = keys.next()
.expect(concat!("metadata should define a key for '", stringify!($k), "'"));
event!(@ record: event, $k, &key, $($val)*);
)*
let interest = callsite.interest();
if interest.is_never() {
Event::new_disabled()
} else {
let mut event = Event::new(callsite.interest(), callsite.metadata());
// Depending on how many fields are generated, this may or may
// not actually be used, but it doesn't make sense to repeat it.
#[allow(unused_variables, unused_mut)] {
if !event.is_disabled() {
let mut keys = callsite.metadata().fields().into_iter();
let msg_key = keys.next()
.expect("event metadata should define a key for the message");
$(
let key = keys.next()
.expect(concat!("metadata should define a key for '", stringify!($k), "'"));
event!(@ record: event, $k, &key, $($val)*);
)*
}
}
event
}
event
}
});
(target: $target:expr, $lvl:expr, $($arg:tt)+ ) => (
Expand Down

0 comments on commit bdeea40

Please sign in to comment.