1 | // |
2 | // To use this library, enable one of the feature flags. Each backend implementation provides the |
3 | // exact same interface. Only one may be active at a time. |
4 | // |
5 | |
6 | // This library itself does not require std, but if any features are enabled, the upstream crate |
7 | // likely will bring in std. |
8 | #![no_std ] |
9 | |
10 | /// Proc macro for creating a scope around each function under struct impl block |
11 | /// ``` |
12 | /// pub struct Foo { |
13 | /// // some data... |
14 | /// } |
15 | /// |
16 | /// #[profiling::all_functions] |
17 | /// impl Foo { |
18 | /// pub fn do_something(&self) { |
19 | /// // some code... |
20 | /// } |
21 | /// |
22 | /// pub fn do_otherthing(&self) { |
23 | /// // some code... |
24 | /// } |
25 | /// } |
26 | /// ``` |
27 | /// |
28 | /// The following will generate the same code |
29 | /// |
30 | /// ``` |
31 | /// pub struct Foo { |
32 | /// // some data... |
33 | /// } |
34 | /// |
35 | /// impl Foo { |
36 | /// #[profiling::function] |
37 | /// pub fn do_something(&self) { |
38 | /// // some code... |
39 | /// } |
40 | /// |
41 | /// #[profiling::function] |
42 | /// pub fn do_otherthing(&self) { |
43 | /// // some code... |
44 | /// } |
45 | /// } |
46 | /// ``` |
47 | #[cfg (feature = "procmacros" )] |
48 | pub use profiling_procmacros::all_functions; |
49 | /// Proc macro for creating a scope around the function, using the name of the function for the |
50 | /// scope's name |
51 | /// |
52 | /// This must be done as a proc macro because tracing requires a const string |
53 | /// |
54 | /// ``` |
55 | /// #[profiling::function] |
56 | /// fn my_function() { |
57 | /// |
58 | /// } |
59 | /// ``` |
60 | #[cfg (feature = "procmacros" )] |
61 | pub use profiling_procmacros::function; |
62 | /// Proc macro to skip the auto_impl for the function |
63 | /// ``` |
64 | /// pub struct Foo { |
65 | /// // some data... |
66 | /// } |
67 | /// |
68 | /// #[profiling::all_functions] |
69 | /// impl Foo { |
70 | /// pub fn do_something(&self) { |
71 | /// // some code... |
72 | /// } |
73 | /// |
74 | /// #[profiling::skip] |
75 | /// pub fn do_otherthing(&self) { |
76 | /// // some code... |
77 | /// } |
78 | /// } |
79 | /// ``` |
80 | /// |
81 | /// The following will generate the same code |
82 | /// |
83 | /// ``` |
84 | /// pub struct Foo { |
85 | /// // some data... |
86 | /// } |
87 | /// |
88 | /// impl Foo { |
89 | /// #[profiling::function] |
90 | /// pub fn do_something(&self) { |
91 | /// // some code... |
92 | /// } |
93 | /// |
94 | /// pub fn do_otherthing(&self) { |
95 | /// // some code... |
96 | /// } |
97 | /// } |
98 | /// ``` |
99 | #[cfg (feature = "procmacros" )] |
100 | pub use profiling_procmacros::skip; |
101 | |
102 | #[cfg (feature = "profile-with-puffin" )] |
103 | pub use puffin; |
104 | #[cfg (feature = "profile-with-puffin" )] |
105 | mod puffin_impl; |
106 | #[cfg (feature = "profile-with-puffin" )] |
107 | #[allow (unused_imports)] |
108 | pub use puffin_impl::*; |
109 | |
110 | #[cfg (feature = "profile-with-optick" )] |
111 | pub use optick; |
112 | #[cfg (feature = "profile-with-optick" )] |
113 | mod optick_impl; |
114 | #[cfg (feature = "profile-with-optick" )] |
115 | #[allow (unused_imports)] |
116 | pub use optick_impl::*; |
117 | |
118 | #[cfg (feature = "profile-with-superluminal" )] |
119 | pub use superluminal_perf; |
120 | #[cfg (feature = "profile-with-superluminal" )] |
121 | mod superluminal_impl; |
122 | #[cfg (feature = "profile-with-superluminal" )] |
123 | #[allow (unused_imports)] |
124 | pub use superluminal_impl::*; |
125 | |
126 | #[cfg (feature = "profile-with-tracing" )] |
127 | pub use tracing; |
128 | #[cfg (feature = "profile-with-tracing" )] |
129 | mod tracing_impl; |
130 | #[cfg (feature = "profile-with-tracing" )] |
131 | #[allow (unused_imports)] |
132 | pub use tracing_impl::*; |
133 | |
134 | #[cfg (feature = "profile-with-tracy" )] |
135 | pub use tracy_client; |
136 | #[cfg (feature = "profile-with-tracy" )] |
137 | mod tracy_impl; |
138 | #[cfg (feature = "profile-with-tracy" )] |
139 | #[allow (unused_imports)] |
140 | pub use tracy_impl::*; |
141 | |
142 | #[cfg (feature = "type-check" )] |
143 | mod type_check_impl; |
144 | #[cfg (feature = "type-check" )] |
145 | #[allow (unused_imports)] |
146 | pub use type_check_impl::*; |
147 | |
148 | #[cfg (not(any( |
149 | feature = "profile-with-puffin" , |
150 | feature = "profile-with-optick" , |
151 | feature = "profile-with-superluminal" , |
152 | feature = "profile-with-tracing" , |
153 | feature = "profile-with-tracy" , |
154 | feature = "type-check" |
155 | )))] |
156 | mod empty_impl; |
157 | |
158 | #[cfg (not(any( |
159 | feature = "profile-with-puffin" , |
160 | feature = "profile-with-optick" , |
161 | feature = "profile-with-superluminal" , |
162 | feature = "profile-with-tracing" , |
163 | feature = "profile-with-tracy" , |
164 | feature = "type-check" |
165 | )))] |
166 | #[allow (unused_imports)] |
167 | pub use empty_impl::*; |
168 | |