aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--site/index.html2
-rw-r--r--site/pure.mjs2
-rw-r--r--src/lib.rs10
-rw-r--r--src/state.rs4
4 files changed, 15 insertions, 3 deletions
diff --git a/site/index.html b/site/index.html
index 97b5997..5ef2cf6 100644
--- a/site/index.html
+++ b/site/index.html
@@ -22,7 +22,7 @@
<section class='bench'>
<h2>bench</h2>
- <input name='iters' value='100000'>
+ <input name='iters' value='1000'>
<button>bench</button>
<p class='results'></p>
</section>
diff --git a/site/pure.mjs b/site/pure.mjs
index 03b5996..bc3f8a4 100644
--- a/site/pure.mjs
+++ b/site/pure.mjs
@@ -268,6 +268,8 @@ export default async function () {
const start = self.performance.now();
for (let i = 0; i < iters; i++) {
update(points);
+ points.sort((a, b) => a.y > b.y);
+ findPoly3(points);
}
const end = self.performance.now();
const delta = end - start;
diff --git a/src/lib.rs b/src/lib.rs
index dfbeaae..8e650e5 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -118,6 +118,16 @@ pub fn init() -> JSResult<()> {
let perf = window().performance().unwrap();
let start = perf.now();
for _ in 0..iters {
+ s.points.sort_by(|a, b| {
+ if a.y > b.y {
+ std::cmp::Ordering::Greater
+ } else if a.y == b.y {
+ std::cmp::Ordering::Equal
+ } else {
+ std::cmp::Ordering::Less
+ }
+ });
+ s.find_poly();
s.update()?;
}
let end = perf.now();
diff --git a/src/state.rs b/src/state.rs
index 09120fb..592f26e 100644
--- a/src/state.rs
+++ b/src/state.rs
@@ -19,7 +19,7 @@ pub struct State {
canvas: HtmlCanvasElement,
ctx: CanvasRenderingContext2d,
fps: HtmlElement,
- points: Vec<Point>,
+ pub points: Vec<Point>,
last_time: Option<f64>,
inter_count: u16,
}
@@ -124,7 +124,7 @@ impl State {
Ok(())
}
- fn find_poly(&self) -> Vec<&Point> {
+ pub fn find_poly(&self) -> Vec<&Point> {
let p1 = Point::new(0.0, 0.0);
let p2 = Point::new(1.0, 0.0);
let mut last_line = Line::new(&p1, &p2);