diff --git a/examples/scenes/src/mmark.rs b/examples/scenes/src/mmark.rs
index 98be5fa..c7e439a 100644
--- a/examples/scenes/src/mmark.rs
+++ b/examples/scenes/src/mmark.rs
@@ -1,4 +1,10 @@
 //! A benchmark based on MotionMark 1.2's path benchmark.
+//! This is roughly comparable to:
+//!
+//! https://browserbench.org/MotionMark1.2/developer.html?warmup-length=2000&warmup-frame-count=30&first-frame-minimum-length=0&test-interval=15&display=minimal&tiles=big&controller=adaptive&frame-rate=50&time-measurement=performance&suite-name=MotionMark&test-name=Paths&complexity=1
+//!
+//! However, at this point it cannot be directly compared, as we don't accurately
+//! implement the stroke style parameters, and it has not been carefully validated.
 
 use std::cmp::Ordering;
 
@@ -31,7 +37,7 @@
 }
 
 #[derive(Clone, Copy)]
-struct GridPoint((i64, i64));
+struct GridPoint(i64, i64);
 
 impl MMark {
     pub fn new(n: usize) -> MMark {
@@ -49,7 +55,7 @@
                     .elements
                     .last()
                     .map(|e| e.grid_point)
-                    .unwrap_or(GridPoint((GRID_WIDTH / 2, GRID_HEIGHT / 2)));
+                    .unwrap_or(GridPoint(GRID_WIDTH / 2, GRID_HEIGHT / 2));
                 self.elements.extend((old_n..n).map(|_| {
                     let element = Element::new_rand(last);
                     last = element.grid_point;
@@ -173,23 +179,23 @@
         let mut rng = rand::thread_rng();
 
         let offset = OFFSETS.choose(&mut rng).unwrap();
-        let mut x = last.0 .0 + offset.0;
+        let mut x = last.0 + offset.0;
         if !(0..=GRID_WIDTH).contains(&x) {
             x -= offset.0 * 2;
         }
-        let mut y = last.0 .1 + offset.1;
+        let mut y = last.1 + offset.1;
         if !(0..=GRID_HEIGHT).contains(&y) {
             y -= offset.1 * 2;
         }
-        GridPoint((x, y))
+        GridPoint(x, y)
     }
 
     fn coordinate(&self) -> Point {
         let scale_x = WIDTH as f64 / ((GRID_WIDTH + 1) as f64);
         let scale_y = HEIGHT as f64 / ((GRID_HEIGHT + 1) as f64);
         Point::new(
-            (self.0 .0 as f64 + 0.5) * scale_x,
-            100.0 + (self.0 .1 as f64 + 0.5) * scale_y,
+            (self.0 as f64 + 0.5) * scale_x,
+            100.0 + (self.1 as f64 + 0.5) * scale_y,
         )
     }
 }
