about summary refs log tree commit diff
path: root/src/griph/mod.rs
diff options
context:
space:
mode:
authorgennyble <gen@nyble.dev>2025-02-25 17:07:24 -0600
committergennyble <gen@nyble.dev>2025-02-25 17:07:24 -0600
commitf0595846660239fc6ac7aadca5d6b9d153f8d6c5 (patch)
treeb46e03946e15c7bdc21daff824021f8b957d10ba /src/griph/mod.rs
parente60e9fae45915a4ca4457dfdc9794980e373b1f1 (diff)
downloadawake-f0595846660239fc6ac7aadca5d6b9d153f8d6c5.tar.gz
awake-f0595846660239fc6ac7aadca5d6b9d153f8d6c5.zip
Teach statistics graphs about time
Diffstat (limited to 'src/griph/mod.rs')
-rw-r--r--src/griph/mod.rs51
1 files changed, 30 insertions, 21 deletions
diff --git a/src/griph/mod.rs b/src/griph/mod.rs
index 6b84233..b1449f5 100644
--- a/src/griph/mod.rs
+++ b/src/griph/mod.rs
@@ -25,7 +25,7 @@ const WIDTH: usize = 256;
 const HEIGHT: usize = 160;
 const SIZE: usize = WIDTH * HEIGHT;
 
-pub fn make_1line(min: usize, max: usize, values: &[usize]) -> Gif {
+pub fn make_1line(min: usize, max: usize, values: &[Option<usize>]) -> Gif {
 	let range = max - min;
 	// this assumes a range of values that is >1 per pixel
 	let vpp = range / HEIGHT;
@@ -45,7 +45,12 @@ pub fn make_1line(min: usize, max: usize, values: &[usize]) -> Gif {
 	standard
 }
 
-pub fn make_2line(min: usize, max: usize, values1: &[usize], values2: &[usize]) -> Gif {
+pub fn make_2line(
+	min: usize,
+	max: usize,
+	values1: &[Option<usize>],
+	values2: &[Option<usize>],
+) -> Gif {
 	let range = max - min;
 	// this assumes a range of values that is >1 per pixel
 	let vpp = range / HEIGHT;
@@ -85,39 +90,43 @@ fn draw_grid(raster: &mut [u8]) {
 	}
 }
 
-fn draw_line(raster: &mut [u8], values: &[usize], vpp: usize, colour: u8) {
+fn draw_line(raster: &mut [u8], values: &[Option<usize>], vpp: usize, colour: u8) {
 	// Draw Line
 	// this will be discontinuous and i think that's okay. we
 	// could make it a proper line by keeping track what value
 	// was last and drawing the whole vertical there
-	for (x, value) in values.iter().enumerate() {
-		let value_height = value / vpp;
-		if value_height > (HEIGHT - 1) {
-			continue;
+	for (x, maybe) in values.iter().enumerate() {
+		if let Some(value) = maybe {
+			let value_height = value / vpp;
+			if value_height > (HEIGHT - 1) {
+				continue;
+			}
+			let y_val = (HEIGHT - 1) - value_height;
+
+			raster[y_val * WIDTH + x] = colour;
 		}
-		let y_val = (HEIGHT - 1) - value_height;
-
-		raster[y_val * WIDTH + x] = colour;
 	}
 }
 
 fn draw_line_underfill(
 	raster: &mut [u8],
-	values: &[usize],
+	values: &[Option<usize>],
 	vpp: usize,
 	colour: u8,
 	colour_fill: u8,
 ) {
-	for (x, value) in values.iter().enumerate() {
-		let value_height = value / vpp;
-		if value_height > (HEIGHT - 1) {
-			continue;
-		}
-		let y_val = (HEIGHT - 1) - value_height;
-
-		for y in y_val + 1..HEIGHT {
-			raster[y * WIDTH + x] = colour_fill;
+	for (x, maybe) in values.iter().enumerate() {
+		if let Some(value) = maybe {
+			let value_height = value / vpp;
+			if value_height > (HEIGHT - 1) {
+				continue;
+			}
+			let y_val = (HEIGHT - 1) - value_height;
+
+			for y in y_val + 1..HEIGHT {
+				raster[y * WIDTH + x] = colour_fill;
+			}
+			raster[y_val * WIDTH + x] = colour;
 		}
-		raster[y_val * WIDTH + x] = colour;
 	}
 }