@@ -75,8 +75,9 @@ struct PowerStore {
7575
7676impl PowerStore {
7777 fn push ( & mut self , value : f64 ) {
78+ let was_top = if self . items . len ( ) > 0 { self . items [ 0 ] as f64 / 1000.0 } else { 0.0 } ;
7879 items_add ( & mut self . items , ( value * 1000.0 ) as u64 ) ;
79- self . top_value = value;
80+ self . top_value = avg2 ( was_top , value) ;
8081 self . avg_value = self . items . iter ( ) . sum :: < u64 > ( ) as f64 / self . items . len ( ) as f64 / 1000.0 ;
8182 self . max_value = self . items . iter ( ) . max ( ) . map_or ( 0 , |v| * v) as f64 / 1000.0 ;
8283 }
@@ -171,6 +172,12 @@ fn run_sampler_thread(tx: mpsc::Sender<Event>, interval: u64) {
171172 } ) ;
172173}
173174
175+ // get avaerage of two values, used to smooth out metrics
176+ // see: https://github.com/vladkens/macmon/issues/10
177+ fn avg2 < T : num_traits:: Float > ( a : T , b : T ) -> T {
178+ return if a == T :: zero ( ) { b } else { ( a + b) / T :: from ( 2.0 ) . unwrap ( ) } ;
179+ }
180+
174181// MARK: App
175182
176183#[ derive( Debug , Default ) ]
@@ -208,7 +215,10 @@ impl App {
208215 self . ecpu_freq . push ( data. ecpu_usage . 0 as u64 , data. ecpu_usage . 1 as f64 ) ;
209216 self . pcpu_freq . push ( data. pcpu_usage . 0 as u64 , data. pcpu_usage . 1 as f64 ) ;
210217 self . igpu_freq . push ( data. gpu_usage . 0 as u64 , data. gpu_usage . 1 as f64 ) ;
211- self . temp = data. temp ;
218+
219+ self . temp . cpu_temp_avg = avg2 ( self . temp . cpu_temp_avg , data. temp . cpu_temp_avg ) ;
220+ self . temp . gpu_temp_avg = avg2 ( self . temp . gpu_temp_avg , data. temp . gpu_temp_avg ) ;
221+
212222 self . mem . push ( data. memory ) ;
213223 }
214224
0 commit comments