aboutsummaryrefslogtreecommitdiff
path: root/alacritty_terminal/src/meter.rs
diff options
context:
space:
mode:
authorKirill Chibisov <contact@kchibisov.com>2020-07-11 20:03:09 +0300
committerGitHub <noreply@github.com>2020-07-11 20:03:09 +0300
commit18cf806a27f06185b1ceb2d63f3b9bc2dd3dc80e (patch)
tree6609ca3aec4fe8da171de474a4a8e8d9b572f0e5 /alacritty_terminal/src/meter.rs
parent5f039cee49b9c817177c6feecc5e7d97fb0a57e1 (diff)
downloadr-alacritty-18cf806a27f06185b1ceb2d63f3b9bc2dd3dc80e.tar.gz
r-alacritty-18cf806a27f06185b1ceb2d63f3b9bc2dd3dc80e.tar.bz2
r-alacritty-18cf806a27f06185b1ceb2d63f3b9bc2dd3dc80e.zip
Remove gui dependencies from alacritty_terminal
This commit removes font dependency from alacritty_terminal, so it'll simplify the usage of alacritty_terminal as a library, since you won't link to system's libraries anymore. It also moves many alacritty related config options from it. Fixes #3393.
Diffstat (limited to 'alacritty_terminal/src/meter.rs')
-rw-r--r--alacritty_terminal/src/meter.rs97
1 files changed, 0 insertions, 97 deletions
diff --git a/alacritty_terminal/src/meter.rs b/alacritty_terminal/src/meter.rs
deleted file mode 100644
index c07d901f..00000000
--- a/alacritty_terminal/src/meter.rs
+++ /dev/null
@@ -1,97 +0,0 @@
-//! Rendering time meter.
-//!
-//! Used to track rendering times and provide moving averages.
-//!
-//! # Examples
-//!
-//! ```rust
-//! // create a meter
-//! let mut meter = alacritty_terminal::meter::Meter::new();
-//!
-//! // Sample something.
-//! {
-//! let _sampler = meter.sampler();
-//! }
-//!
-//! // Get the moving average. The meter tracks a fixed number of samples, and
-//! // the average won't mean much until it's filled up at least once.
-//! println!("Average time: {}", meter.average());
-//! ```
-
-use std::time::{Duration, Instant};
-
-const NUM_SAMPLES: usize = 10;
-
-/// The meter.
-#[derive(Default)]
-pub struct Meter {
- /// Track last 60 timestamps.
- times: [f64; NUM_SAMPLES],
-
- /// Average sample time in microseconds.
- avg: f64,
-
- /// Index of next time to update..
- index: usize,
-}
-
-/// Sampler.
-///
-/// Samplers record how long they are "alive" for and update the meter on drop..
-pub struct Sampler<'a> {
- /// Reference to meter that created the sampler.
- meter: &'a mut Meter,
-
- /// When the sampler was created.
- created_at: Instant,
-}
-
-impl<'a> Sampler<'a> {
- fn new(meter: &'a mut Meter) -> Sampler<'a> {
- Sampler { meter, created_at: Instant::now() }
- }
-
- #[inline]
- fn alive_duration(&self) -> Duration {
- self.created_at.elapsed()
- }
-}
-
-impl<'a> Drop for Sampler<'a> {
- fn drop(&mut self) {
- self.meter.add_sample(self.alive_duration());
- }
-}
-
-impl Meter {
- /// Create a meter.
- pub fn new() -> Meter {
- Default::default()
- }
-
- /// Get a sampler.
- pub fn sampler(&mut self) -> Sampler<'_> {
- Sampler::new(self)
- }
-
- /// Get the current average sample duration in microseconds.
- pub fn average(&self) -> f64 {
- self.avg
- }
-
- /// Add a sample.
- ///
- /// Used by Sampler::drop.
- fn add_sample(&mut self, sample: Duration) {
- let mut usec = 0f64;
-
- usec += f64::from(sample.subsec_nanos()) / 1e3;
- usec += (sample.as_secs() as f64) * 1e6;
-
- let prev = self.times[self.index];
- self.times[self.index] = usec;
- self.avg -= prev / NUM_SAMPLES as f64;
- self.avg += usec / NUM_SAMPLES as f64;
- self.index = (self.index + 1) % NUM_SAMPLES;
- }
-}