tawasuyu

tawasuyu/taffy

A high performance rust-powered UI layout library

Rust 494HTML 245JavaScript 8CSS 61175 Definitions

bench: collect more metrics for complex sample

81d0556d807a247cec23d70dd7cb85cce9b76569 · by msiglreith · (7 years ago) · parent edd994fd3 · browse the tree at this commit

Semantic delta · 2

benches/complex.rs

1 files · +114 −92

diff --git a/benches/complex.rs b/benches/complex.rs
index 05bd3b741..79611988e 100644
--- a/benches/complex.rs
+++ b/benches/complex.rs
@@ -1,104 +1,126 @@
 use criterion::{criterion_group, criterion_main, Criterion};
 
-fn stretch_benchmarks(c: &mut Criterion) {
-    c.bench_function("deep hierarchy", |b| {
-        b.iter(|| {
-            let mut stretch = stretch::node::Stretch::new();
+fn build_deep_hierarchy(stretch: &mut stretch::node::Stretch) -> stretch::node::Node {
+    let node111 = stretch.new_node(
+        stretch::style::Style {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(10.0),
+                height: stretch::style::Dimension::Points(10.0),
+            },
+            ..Default::default()
+        },
+        vec![],
+    ).unwrap();
+    let node112 = stretch.new_node(
+        stretch::style::Style {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(10.0),
+                height: stretch::style::Dimension::Points(10.0),
+            },
+            ..Default::default()
+        },
+        vec![],
+    ).unwrap();
+
+    let node121 = stretch.new_node(
+        stretch::style::Style {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(10.0),
+                height: stretch::style::Dimension::Points(10.0),
+            },
+            ..Default::default()
+        },
+        vec![],
+    ).unwrap();
+    let node122 = stretch.new_node(
+        stretch::style::Style {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(10.0),
+                height: stretch::style::Dimension::Points(10.0),
+            },
+            ..Default::default()
+        },
+        vec![],
+    ).unwrap();
+
+    let node11 = stretch.new_node(stretch::style::Style { ..Default::default() }, vec![node111, node112]).unwrap();
+    let node12 = stretch.new_node(stretch::style::Style { ..Default::default() }, vec![node121, node122]).unwrap();
+    let node1 = stretch.new_node(stretch::style::Style { ..Default::default() }, vec![node11, node12]).unwrap();
 
-            let node111 = stretch.new_node(
-                stretch::style::Style {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(10.0),
-                        height: stretch::style::Dimension::Points(10.0),
-                    },
-                    ..Default::default()
-                },
-                vec![],
-            ).unwrap();
-            let node112 = stretch.new_node(
-                stretch::style::Style {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(10.0),
-                        height: stretch::style::Dimension::Points(10.0),
-                    },
-                    ..Default::default()
-                },
-                vec![],
-            ).unwrap();
+    let node211 = stretch.new_node(
+        stretch::style::Style {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(10.0),
+                height: stretch::style::Dimension::Points(10.0),
+            },
+            ..Default::default()
+        },
+        vec![],
+    ).unwrap();
+    let node212 = stretch.new_node(
+        stretch::style::Style {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(10.0),
+                height: stretch::style::Dimension::Points(10.0),
+            },
+            ..Default::default()
+        },
+        vec![],
+    ).unwrap();
 
-            let node121 = stretch.new_node(
-                stretch::style::Style {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(10.0),
-                        height: stretch::style::Dimension::Points(10.0),
-                    },
-                    ..Default::default()
-                },
-                vec![],
-            ).unwrap();
-            let node122 = stretch.new_node(
-                stretch::style::Style {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(10.0),
-                        height: stretch::style::Dimension::Points(10.0),
-                    },
-                    ..Default::default()
-                },
-                vec![],
-            ).unwrap();
+    let node221 = stretch.new_node(
+        stretch::style::Style {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(10.0),
+                height: stretch::style::Dimension::Points(10.0),
+            },
+            ..Default::default()
+        },
+        vec![],
+    ).unwrap();
+    let node222 = stretch.new_node(
+        stretch::style::Style {
+            size: stretch::geometry::Size {
+                width: stretch::style::Dimension::Points(10.0),
+                height: stretch::style::Dimension::Points(10.0),
+            },
+            ..Default::default()
+        },
+        vec![],
+    ).unwrap();
 
-            let node11 = stretch.new_node(stretch::style::Style { ..Default::default() }, vec![node111, node112]).unwrap();
-            let node12 = stretch.new_node(stretch::style::Style { ..Default::default() }, vec![node121, node122]).unwrap();
-            let node1 = stretch.new_node(stretch::style::Style { ..Default::default() }, vec![node11, node12]).unwrap();
+    let node21 = stretch.new_node(stretch::style::Style { ..Default::default() }, vec![node211, node212]).unwrap();
+    let node22 = stretch.new_node(stretch::style::Style { ..Default::default() }, vec![node221, node222]).unwrap();
 
-            let node211 = stretch.new_node(
-                stretch::style::Style {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(10.0),
-                        height: stretch::style::Dimension::Points(10.0),
-                    },
-                    ..Default::default()
-                },
-                vec![],
-            ).unwrap();
-            let node212 = stretch.new_node(
-                stretch::style::Style {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(10.0),
-                        height: stretch::style::Dimension::Points(10.0),
-                    },
-                    ..Default::default()
-                },
-                vec![],
-            ).unwrap();
+    let node2 = stretch.new_node(stretch::style::Style { ..Default::default() }, vec![node21, node22]).unwrap();
+    let node0 = stretch.new_node(stretch::style::Style { ..Default::default() }, vec![node1, node2]).unwrap();
+
+    node0
+}
+
+fn stretch_benchmarks(c: &mut Criterion) {
+    c.bench_function("deep hierarchy - build", |b| {
+        b.iter(|| {
+            let mut stretch = stretch::node::Stretch::new();
+            build_deep_hierarchy(&mut stretch);
+        })
+    });
 
-            let node221 = stretch.new_node(
-                stretch::style::Style {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(10.0),
-                        height: stretch::style::Dimension::Points(10.0),
-                    },
-                    ..Default::default()
-                },
-                vec![],
-            ).unwrap();
-            let node222 = stretch.new_node(
-                stretch::style::Style {
-                    size: stretch::geometry::Size {
-                        width: stretch::style::Dimension::Points(10.0),
-                        height: stretch::style::Dimension::Points(10.0),
-                    },
-                    ..Default::default()
-                },
-                vec![],
-            ).unwrap();
+    c.bench_function("deep hierarchy - single", |b| {
+        b.iter(|| {
+            let mut stretch = stretch::node::Stretch::new();
+            let root = build_deep_hierarchy(&mut stretch);
+            stretch.compute_layout(root, stretch::geometry::Size::undefined()).unwrap()
+        })
+    });
 
-            let node21 = stretch.new_node(stretch::style::Style { ..Default::default() }, vec![node211, node212]).unwrap();
-            let node22 = stretch.new_node(stretch::style::Style { ..Default::default() }, vec![node221, node222]).unwrap();
+    c.bench_function("deep hierarchy - relayout", |b| {
+        let mut stretch = stretch::node::Stretch::new();
+        let root = build_deep_hierarchy(&mut stretch);
 
-            let node2 = stretch.new_node(stretch::style::Style { ..Default::default() }, vec![node21, node22]).unwrap();
-            let node0 = stretch.new_node(stretch::style::Style { ..Default::default() }, vec![node1, node2]).unwrap();
-            stretch.compute_layout(node0, stretch::geometry::Size::undefined()).unwrap()
+        b.iter(|| {
+            stretch.mark_dirty(root);
+            stretch.compute_layout(root, stretch::geometry::Size::undefined()).unwrap()
         })
     });
 }