diff --git a/glean-core/src/traits/memory_distribution.rs b/glean-core/src/traits/memory_distribution.rs index 6ec2f5c09b..ae069f4e61 100644 --- a/glean-core/src/traits/memory_distribution.rs +++ b/glean-core/src/traits/memory_distribution.rs @@ -24,6 +24,31 @@ pub trait MemoryDistribution: TestGetValue { /// and an `ErrorType::InvalidValue` error is recorded. fn accumulate(&self, sample: u64); + /// Accumulates the provided signed samples in the metric. + /// + /// This is required so that the platform-specific code can provide us with + /// 64 bit signed integers if no `u64` comparable type is available. This + /// will take care of filtering and reporting errors for any provided negative + /// sample. + /// + /// Please note that this assumes that the provided samples are already in + /// the "unit" declared by the instance of the metric type (e.g. if the the + /// instance this method was called on is using [`crate::MemoryUnit::Kilobyte`], then + /// `samples` are assumed to be in that unit). + /// + /// # Arguments + /// + /// * `samples` - The vector holding the samples to be recorded by the metric. + /// + /// ## Notes + /// + /// Discards any negative value in `samples` and report an [`ErrorType::InvalidValue`] + /// for each of them. + /// + /// Values bigger than 1 Terabyte (240 bytes) are truncated + /// and an [`ErrorType::InvalidValue`] error is recorded. + fn accumulate_samples(&self, samples: Vec); + /// **Exported for test purposes.** /// /// Gets the number of recorded errors for the given error type.