Skip to content

Commit 0cd273d

Browse files
hawkwkaffarell
authored andcommitted
chore: remove *all* extern crate statements (tokio-rs#1738)
Depends on tokio-rs#1737 This branch removes all remaining `extern crate` statements. Most of these are in old code and were not removed when updating to Rust 2018. Whoops! Our MSRV no longer requires `extern crate`, so we don't need these. The exception is `extern crate` statements for `std` and `alloc`, which are still the way these libraries are included explicitly when building for `no_std` platforms. In some cases, the tests had to explicitly import the `span!` and `event!` macros at every use, because their names conflict with the `span` and `event` modules in the test support code. Oh well. Signed-off-by: Eliza Weisman <[email protected]>
1 parent 58c0f19 commit 0cd273d

File tree

4 files changed

+199
-14
lines changed

4 files changed

+199
-14
lines changed

tracing-core/src/subscriber.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -246,8 +246,7 @@ pub trait Subscriber: 'static {
246246
/// but values for them won't be recorded at this time.
247247
///
248248
/// ```rust,ignore
249-
/// #[macro_use]
250-
/// extern crate tracing;
249+
/// # use tracing::span;
251250
///
252251
/// let mut span = span!("my_span", foo = 3, bar, baz);
253252
///

tracing/benches/subscriber.rs

Lines changed: 189 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,189 @@
1+
use criterion::{black_box, criterion_group, criterion_main, Criterion};
2+
use tracing::Level;
3+
4+
use std::{
5+
fmt,
6+
sync::{Mutex, MutexGuard},
7+
};
8+
use tracing::{field, span, Event, Id, Metadata};
9+
10+
/// A subscriber that is enabled but otherwise does nothing.
11+
struct EnabledSubscriber;
12+
13+
impl tracing::Subscriber for EnabledSubscriber {
14+
fn new_span(&self, span: &span::Attributes<'_>) -> Id {
15+
let _ = span;
16+
Id::from_u64(0xDEAD_FACE)
17+
}
18+
19+
fn event(&self, event: &Event<'_>) {
20+
let _ = event;
21+
}
22+
23+
fn record(&self, span: &Id, values: &span::Record<'_>) {
24+
let _ = (span, values);
25+
}
26+
27+
fn record_follows_from(&self, span: &Id, follows: &Id) {
28+
let _ = (span, follows);
29+
}
30+
31+
fn enabled(&self, metadata: &Metadata<'_>) -> bool {
32+
let _ = metadata;
33+
true
34+
}
35+
36+
fn enter(&self, span: &Id) {
37+
let _ = span;
38+
}
39+
40+
fn exit(&self, span: &Id) {
41+
let _ = span;
42+
}
43+
}
44+
45+
/// Simulates a subscriber that records span data.
46+
struct VisitingSubscriber(Mutex<String>);
47+
48+
struct Visitor<'a>(MutexGuard<'a, String>);
49+
50+
impl<'a> field::Visit for Visitor<'a> {
51+
fn record_debug(&mut self, _field: &field::Field, value: &dyn fmt::Debug) {
52+
use std::fmt::Write;
53+
let _ = write!(&mut *self.0, "{:?}", value);
54+
}
55+
}
56+
57+
impl tracing::Subscriber for VisitingSubscriber {
58+
fn new_span(&self, span: &span::Attributes<'_>) -> Id {
59+
let mut visitor = Visitor(self.0.lock().unwrap());
60+
span.record(&mut visitor);
61+
Id::from_u64(0xDEAD_FACE)
62+
}
63+
64+
fn record(&self, _span: &Id, values: &span::Record<'_>) {
65+
let mut visitor = Visitor(self.0.lock().unwrap());
66+
values.record(&mut visitor);
67+
}
68+
69+
fn event(&self, event: &Event<'_>) {
70+
let mut visitor = Visitor(self.0.lock().unwrap());
71+
event.record(&mut visitor);
72+
}
73+
74+
fn record_follows_from(&self, span: &Id, follows: &Id) {
75+
let _ = (span, follows);
76+
}
77+
78+
fn enabled(&self, metadata: &Metadata<'_>) -> bool {
79+
let _ = metadata;
80+
true
81+
}
82+
83+
fn enter(&self, span: &Id) {
84+
let _ = span;
85+
}
86+
87+
fn exit(&self, span: &Id) {
88+
let _ = span;
89+
}
90+
}
91+
92+
const N_SPANS: usize = 100;
93+
94+
fn criterion_benchmark(c: &mut Criterion) {
95+
c.bench_function("span_no_fields", |b| {
96+
tracing::subscriber::with_default(EnabledSubscriber, || {
97+
b.iter(|| span!(Level::TRACE, "span"))
98+
});
99+
});
100+
101+
c.bench_function("enter_span", |b| {
102+
tracing::subscriber::with_default(EnabledSubscriber, || {
103+
let span = span!(Level::TRACE, "span");
104+
#[allow(clippy::unit_arg)]
105+
b.iter(|| black_box(span.in_scope(|| {})))
106+
});
107+
});
108+
109+
c.bench_function("span_repeatedly", |b| {
110+
#[inline]
111+
fn mk_span(i: u64) -> tracing::Span {
112+
span!(Level::TRACE, "span", i = i)
113+
}
114+
115+
let n = black_box(N_SPANS);
116+
tracing::subscriber::with_default(EnabledSubscriber, || {
117+
b.iter(|| (0..n).fold(mk_span(0), |_, i| mk_span(i as u64)))
118+
});
119+
});
120+
121+
c.bench_function("span_with_fields", |b| {
122+
tracing::subscriber::with_default(EnabledSubscriber, || {
123+
b.iter(|| {
124+
span!(
125+
Level::TRACE,
126+
"span",
127+
foo = "foo",
128+
bar = "bar",
129+
baz = 3,
130+
quuux = tracing::field::debug(0.99)
131+
)
132+
})
133+
});
134+
});
135+
136+
c.bench_function("span_with_fields_record", |b| {
137+
let subscriber = VisitingSubscriber(Mutex::new(String::from("")));
138+
tracing::subscriber::with_default(subscriber, || {
139+
b.iter(|| {
140+
span!(
141+
Level::TRACE,
142+
"span",
143+
foo = "foo",
144+
bar = "bar",
145+
baz = 3,
146+
quuux = tracing::field::debug(0.99)
147+
)
148+
})
149+
});
150+
});
151+
}
152+
153+
fn bench_dispatch(c: &mut Criterion) {
154+
let mut group = c.benchmark_group("dispatch");
155+
group.bench_function("no_dispatch_get_ref", |b| {
156+
b.iter(|| {
157+
tracing::dispatcher::get_default(|current| {
158+
black_box(&current);
159+
})
160+
})
161+
});
162+
group.bench_function("no_dispatch_get_clone", |b| {
163+
b.iter(|| {
164+
let current = tracing::dispatcher::get_default(|current| current.clone());
165+
black_box(current);
166+
})
167+
});
168+
group.bench_function("get_ref", |b| {
169+
tracing::subscriber::with_default(EnabledSubscriber, || {
170+
b.iter(|| {
171+
tracing::dispatcher::get_default(|current| {
172+
black_box(&current);
173+
})
174+
})
175+
})
176+
});
177+
group.bench_function("get_clone", |b| {
178+
tracing::subscriber::with_default(EnabledSubscriber, || {
179+
b.iter(|| {
180+
let current = tracing::dispatcher::get_default(|current| current.clone());
181+
black_box(current);
182+
})
183+
})
184+
});
185+
group.finish();
186+
}
187+
188+
criterion_group!(benches, criterion_benchmark, bench_dispatch);
189+
criterion_main!(benches);

tracing/tests/span.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -348,8 +348,8 @@ fn entered() {
348348
.done()
349349
.run_with_handle();
350350
with_default(subscriber, || {
351-
let _span = span!(Level::TRACE, "foo").entered();
352-
debug!("dropping guard...");
351+
let _span = tracing::span!(Level::TRACE, "foo").entered();
352+
tracing::debug!("dropping guard...");
353353
});
354354

355355
handle.assert_finished();
@@ -366,9 +366,9 @@ fn entered_api() {
366366
.done()
367367
.run_with_handle();
368368
with_default(subscriber, || {
369-
let span = span!(Level::TRACE, "foo").entered();
369+
let span = tracing::span!(Level::TRACE, "foo").entered();
370370
let _derefs_to_span = span.id();
371-
debug!("exiting span...");
371+
tracing::debug!("exiting span...");
372372
let _: Span = span.exit();
373373
});
374374

tracing/tests/subscriber.rs

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,6 @@
55
// The alternative would be for each of these tests to be defined in a separate
66
// file, which is :(
77
#![cfg(feature = "std")]
8-
9-
#[macro_use]
10-
extern crate tracing;
118
use tracing::{
129
field::display,
1310
span::{Attributes, Id, Record},
@@ -34,7 +31,7 @@ fn event_macros_dont_infinite_loop() {
3431

3532
fn enabled(&self, meta: &Metadata<'_>) -> bool {
3633
assert!(meta.fields().iter().any(|f| f.name() == "foo"));
37-
event!(Level::TRACE, bar = false);
34+
tracing::event!(Level::TRACE, bar = false);
3835
true
3936
}
4037

@@ -48,7 +45,7 @@ fn event_macros_dont_infinite_loop() {
4845

4946
fn event(&self, event: &Event<'_>) {
5047
assert!(event.metadata().fields().iter().any(|f| f.name() == "foo"));
51-
event!(Level::TRACE, baz = false);
48+
tracing::event!(Level::TRACE, baz = false);
5249
}
5350

5451
fn enter(&self, _: &Id) {}
@@ -57,7 +54,7 @@ fn event_macros_dont_infinite_loop() {
5754
}
5855

5956
with_default(TestSubscriber, || {
60-
event!(Level::TRACE, foo = false);
57+
tracing::event!(Level::TRACE, foo = false);
6158
})
6259
}
6360

@@ -81,7 +78,7 @@ fn boxed_subscriber() {
8178

8279
with_default(subscriber, || {
8380
let from = "my span";
84-
let span = span!(
81+
let span = tracing::span!(
8582
Level::TRACE,
8683
"foo",
8784
bar = format_args!("hello from {}", from)
@@ -119,7 +116,7 @@ fn arced_subscriber() {
119116
// Test using a clone of the `Arc`ed subscriber
120117
with_default(subscriber.clone(), || {
121118
let from = "my span";
122-
let span = span!(
119+
let span = tracing::span!(
123120
Level::TRACE,
124121
"foo",
125122
bar = format_args!("hello from {}", from)

0 commit comments

Comments
 (0)