|
1 | 1 | use std::{f64::consts::LOG2_E, mem::replace, ops::DerefMut, sync::Mutex}; |
2 | 2 |
|
3 | 3 | use opentelemetry::{otel_debug, KeyValue}; |
4 | | -use std::sync::OnceLock; |
| 4 | +use std::sync::LazyLock; |
5 | 5 |
|
6 | 6 | use crate::metrics::{ |
7 | 7 | data::{self, AggregatedMetrics, MetricData}, |
@@ -134,7 +134,7 @@ impl<T: Number> ExpoHistogramDataPoint<T> { |
134 | 134 | } |
135 | 135 | return (exp - correction) >> -self.scale; |
136 | 136 | } |
137 | | - (exp << self.scale) + (frac.ln() * scale_factors()[self.scale as usize]) as i32 - 1 |
| 137 | + (exp << self.scale) + (frac.ln() * SCALE_FACTORS[self.scale as usize]) as i32 - 1 |
138 | 138 | } |
139 | 139 | } |
140 | 140 |
|
@@ -168,38 +168,32 @@ fn scale_change(max_size: i32, bin: i32, start_bin: i32, length: i32) -> u32 { |
168 | 168 | count |
169 | 169 | } |
170 | 170 |
|
171 | | -// TODO - replace it with LazyLock once it is stable |
172 | | -static SCALE_FACTORS: OnceLock<[f64; 21]> = OnceLock::new(); |
173 | | - |
174 | | -/// returns constants used in calculating the logarithm index. |
175 | | -#[inline] |
176 | | -fn scale_factors() -> &'static [f64; 21] { |
177 | | - SCALE_FACTORS.get_or_init(|| { |
178 | | - [ |
179 | | - LOG2_E * 2f64.powi(0), |
180 | | - LOG2_E * 2f64.powi(1), |
181 | | - LOG2_E * 2f64.powi(2), |
182 | | - LOG2_E * 2f64.powi(3), |
183 | | - LOG2_E * 2f64.powi(4), |
184 | | - LOG2_E * 2f64.powi(5), |
185 | | - LOG2_E * 2f64.powi(6), |
186 | | - LOG2_E * 2f64.powi(7), |
187 | | - LOG2_E * 2f64.powi(8), |
188 | | - LOG2_E * 2f64.powi(9), |
189 | | - LOG2_E * 2f64.powi(10), |
190 | | - LOG2_E * 2f64.powi(11), |
191 | | - LOG2_E * 2f64.powi(12), |
192 | | - LOG2_E * 2f64.powi(13), |
193 | | - LOG2_E * 2f64.powi(14), |
194 | | - LOG2_E * 2f64.powi(15), |
195 | | - LOG2_E * 2f64.powi(16), |
196 | | - LOG2_E * 2f64.powi(17), |
197 | | - LOG2_E * 2f64.powi(18), |
198 | | - LOG2_E * 2f64.powi(19), |
199 | | - LOG2_E * 2f64.powi(20), |
200 | | - ] |
201 | | - }) |
202 | | -} |
| 171 | +/// Constants used in calculating the logarithm index. |
| 172 | +static SCALE_FACTORS: LazyLock<[f64; 21]> = LazyLock::new(|| { |
| 173 | + [ |
| 174 | + LOG2_E * 2f64.powi(0), |
| 175 | + LOG2_E * 2f64.powi(1), |
| 176 | + LOG2_E * 2f64.powi(2), |
| 177 | + LOG2_E * 2f64.powi(3), |
| 178 | + LOG2_E * 2f64.powi(4), |
| 179 | + LOG2_E * 2f64.powi(5), |
| 180 | + LOG2_E * 2f64.powi(6), |
| 181 | + LOG2_E * 2f64.powi(7), |
| 182 | + LOG2_E * 2f64.powi(8), |
| 183 | + LOG2_E * 2f64.powi(9), |
| 184 | + LOG2_E * 2f64.powi(10), |
| 185 | + LOG2_E * 2f64.powi(11), |
| 186 | + LOG2_E * 2f64.powi(12), |
| 187 | + LOG2_E * 2f64.powi(13), |
| 188 | + LOG2_E * 2f64.powi(14), |
| 189 | + LOG2_E * 2f64.powi(15), |
| 190 | + LOG2_E * 2f64.powi(16), |
| 191 | + LOG2_E * 2f64.powi(17), |
| 192 | + LOG2_E * 2f64.powi(18), |
| 193 | + LOG2_E * 2f64.powi(19), |
| 194 | + LOG2_E * 2f64.powi(20), |
| 195 | + ] |
| 196 | +}); |
203 | 197 |
|
204 | 198 | /// Breaks the number into a normalized fraction and a base-2 exponent. |
205 | 199 | /// |
|
0 commit comments