Autoscale histogram views
This commit is contained in:
		
							parent
							
								
									721376e02c
								
							
						
					
					
						commit
						4760ff97e0
					
				| @ -40,11 +40,12 @@ pub struct HeatmapRect { | ||||
|     density: f64, | ||||
| } | ||||
| 
 | ||||
| #[derive(Clone, Debug, Default)] | ||||
| #[derive(Clone, Debug)] | ||||
| pub struct HistogramWindow { | ||||
|     pub heatmap: Vec<HeatmapRect>, | ||||
|     pub min_density: f64, | ||||
|     pub max_density: f64, | ||||
|     pub y_axis: RangeInclusive<f64>, | ||||
| } | ||||
| 
 | ||||
| #[derive(Clone, Debug, Default)] | ||||
| @ -62,12 +63,15 @@ impl UnsummarisedHistogramWindow { | ||||
| 
 | ||||
|         let mut min_density = f64::INFINITY; | ||||
|         let mut max_density = f64::NEG_INFINITY; | ||||
|         let mut min_val = f64::INFINITY; | ||||
|         let mut max_val = f64::NEG_INFINITY; | ||||
| 
 | ||||
|         for (xa, xb, hist) in self.map.iter() { | ||||
|             let min_val = hist.min(); | ||||
|             let max_val = hist.max(); | ||||
|             let min_this_slice = hist.min(); | ||||
|             min_val = min_val.min(min_this_slice as f64); | ||||
|             max_val = max_val.max(hist.max() as f64); | ||||
| 
 | ||||
|             let mut prev = min_val; | ||||
|             let mut prev = min_this_slice; | ||||
|             for q in (1..=10).map(|i| i as f64 * 0.1) { | ||||
|                 // TODO improve this. It's going to be a bit off because of the way that
 | ||||
|                 // numbers can be 'equivalent' etc ...
 | ||||
| @ -95,17 +99,21 @@ impl UnsummarisedHistogramWindow { | ||||
|             //debug!("hist min {:?} max {:?}", hist.min(), hist.max());
 | ||||
|         } | ||||
| 
 | ||||
|         let y_axis = min_val..=max_val; | ||||
|         debug!("yaxis {:?}", y_axis); | ||||
|         HistogramWindow { | ||||
|             heatmap, | ||||
|             min_density, | ||||
|             max_density, | ||||
|             y_axis, | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| #[derive(Clone, Debug, Default)] | ||||
| #[derive(Clone, Debug)] | ||||
| pub struct ScalarWindow { | ||||
|     points: Vec<(UnixTimestampMilliseconds, f64)>, | ||||
|     pub points: Vec<(UnixTimestampMilliseconds, f64)>, | ||||
|     pub y_axis: RangeInclusive<f64>, | ||||
| } | ||||
| 
 | ||||
| pub struct MetricsLogReadingRequester { | ||||
| @ -392,12 +400,22 @@ impl<R: Read + Seek> MetricsLogReaderManager<R> { | ||||
|                         histograms.insert(*metric_id, Default::default()); | ||||
|                     } | ||||
|                     MetricKind::Gauge => { | ||||
|                         metrics_window.gauges.insert(*metric_id, Default::default()); | ||||
|                         metrics_window.gauges.insert( | ||||
|                             *metric_id, | ||||
|                             ScalarWindow { | ||||
|                                 points: vec![], | ||||
|                                 y_axis: 0.0..=0.0, | ||||
|                             }, | ||||
|                         ); | ||||
|                     } | ||||
|                     MetricKind::Counter => { | ||||
|                         metrics_window | ||||
|                             .counters | ||||
|                             .insert(*metric_id, Default::default()); | ||||
|                         metrics_window.counters.insert( | ||||
|                             *metric_id, | ||||
|                             ScalarWindow { | ||||
|                                 points: vec![], | ||||
|                                 y_axis: 0.0..=0.0, | ||||
|                             }, | ||||
|                         ); | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
| @ -707,7 +725,18 @@ impl Graph { | ||||
| 
 | ||||
|             // This range is reversed because screen coordinates go down, but we'd like them to go
 | ||||
|             // up since this is more of a mathematical graph.
 | ||||
|             let y_axis = 300.0..=0.0; | ||||
|             let y_axis = if let Some(histogram) = current_window.histograms.get(&metric_id) { | ||||
|                 histogram.y_axis.clone().into_inner() | ||||
|             } else if let Some(scalar) = current_window | ||||
|                 .counters | ||||
|                 .get(&metric_id) | ||||
|                 .or_else(|| current_window.gauges.get(&metric_id)) | ||||
|             { | ||||
|                 scalar.y_axis.clone().into_inner() | ||||
|             } else { | ||||
|                 (0.0, 10.0) | ||||
|             }; | ||||
|             let y_axis = (y_axis.1)..=(y_axis.0); | ||||
| 
 | ||||
|             // let display_transform =
 | ||||
|             //     emath::RectTransform::from_to(Rect::from_x_y_ranges(x_axis, y_axis), display_rect);
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user