Replace hashing algorithm and disable debug logging for improved performance

This commit is contained in:
Dennis Kobert 2023-03-09 18:26:38 +01:00 committed by Keavon Chambers
parent 7ce9d6db05
commit 1c50f0030c
10 changed files with 35 additions and 23 deletions

View file

@ -24,3 +24,4 @@ specta.workspace = true
bytemuck = {version = "1.8" }
anyhow = "1.0.66"
xxhash-rust = {workspace = true}

View file

@ -379,14 +379,7 @@ impl NodeNetwork {
}
NodeInput::Value { tagged_value, exposed } => {
// Skip formatting very large values for seconds in performance speedup
let name = if matches!(
tagged_value,
TaggedValue::Image(_) | TaggedValue::RcImage(_) | TaggedValue::Color(_) | TaggedValue::Subpath(_) | TaggedValue::RcSubpath(_)
) {
"Value".to_string()
} else {
format!("Value: {:?}", tagged_value)
};
let name = "Value".to_string();
let new_id = map_ids(id, gen_id());
let value_node = DocumentNode {
name,
@ -654,8 +647,6 @@ mod test {
network.flatten_with_fns(1, |self_id, inner_id| self_id * 10 + inner_id, gen_node_id);
let flat_network = flat_network();
println!("{:#?}", network);
println!("{:#?}", flat_network);
assert_eq!(flat_network, network);
}
@ -746,7 +737,7 @@ mod test {
(
14,
DocumentNode {
name: "Value: U32(2)".into(),
name: "Value".into(),
inputs: vec![NodeInput::Value {
tagged_value: value::TaggedValue::U32(2),
exposed: false,

View file

@ -1,6 +1,7 @@
use std::borrow::Cow;
use std::collections::{HashMap, HashSet};
use std::hash::Hash;
use xxhash_rust::xxh3::Xxh3;
use crate::document::value;
use crate::document::NodeId;
@ -135,7 +136,8 @@ impl ProtoNodeInput {
impl ProtoNode {
pub fn stable_node_id(&self) -> Option<NodeId> {
use std::hash::Hasher;
let mut hasher = std::collections::hash_map::DefaultHasher::new();
let mut hasher = Xxh3::new();
self.identifier.name.hash(&mut hasher);
self.construction_args.hash(&mut hasher);
match self.input {
@ -593,12 +595,12 @@ mod test {
assert_eq!(
ids,
vec![
15907139529964845467,
1552706903207877482,
15211082859148708110,
3361684226823984981,
16609475913638361514,
5640155373642511298
7332206428857154453,
946497269036214321,
3038115864048241698,
1932610308557160863,
2105748431407297710,
8596220090685862327
]
);
}

View file

@ -45,6 +45,7 @@ kurbo = { git = "https://github.com/linebender/kurbo.git", features = [
glam = { version = "0.22", features = ["serde"] }
node-macro = { path="../node-macro" }
boxcar = "0.1.0"
xxhash-rust = {workspace = true}
[dependencies.serde]
version = "1.0"

View file

@ -1,6 +1,6 @@
use std::collections::hash_map::DefaultHasher;
use std::hash::{Hash, Hasher};
use std::marker::PhantomData;
use xxhash_rust::xxh3::Xxh3;
use graphene_core::Node;
@ -14,7 +14,7 @@ pub struct CacheNode<T> {
impl<'i, T: 'i + Hash> Node<'i, T> for CacheNode<T> {
type Output = &'i T;
fn eval<'s: 'i>(&'s self, input: T) -> Self::Output {
let mut hasher = DefaultHasher::new();
let mut hasher = Xxh3::new();
input.hash(&mut hasher);
let hash = hasher.finish();
@ -51,7 +51,7 @@ impl<'i, T: 'i + Hash> Node<'i, Option<T>> for LetNode<T> {
fn eval<'s: 'i>(&'s self, input: Option<T>) -> Self::Output {
match input {
Some(input) => {
let mut hasher = DefaultHasher::new();
let mut hasher = Xxh3::new();
input.hash(&mut hasher);
let hash = hasher.finish();