1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
//! Performance instrumentation
//!
//! This provides zero-cost performance logging when compiled without the `perf-logging` feature.
//! When the feature is enabled, it provides detailed timing information for instrumented operations.
//!
//! # Usage
//!
//! ```rust
//! use liboxen::perf_guard;
//!
//! fn my_operation() {
//! let _guard = perf_guard!("my_operation");
//! // Your code here
//! // Timing is logged when guard is dropped
//! }
//! ```
//!
//! # Compile-time flags
//!
//! Build with performance logging:
//! ```bash
//! cargo build --features liboxen/perf-logging
//! ```
use ;
use Instant;
static PERF_LOGGING_ENABLED: AtomicBool = new;
/// Initialize performance logging based on environment variable
///
/// This should be called once at application startup.
/// If `OXEN_PERF_LOGGING` environment variable is set to "1", "true", or "yes",
/// performance logging will be enabled.
/// Check if performance logging is enabled
/// Performance guard that measures execution time
///
/// When dropped, it logs the elapsed time if performance logging is enabled.
/// If the `perf-logging` feature is not enabled at compile time, this becomes
/// a zero-sized type with no runtime overhead.
/// macro to create a performance guard with the current function name
///
/// # Example
///
/// ```rust
/// use liboxen::perf_guard;
///
/// fn my_function() {
/// let _perf = perf_guard!("my_function");
/// // function body
/// }
/// ```