diff --git a/Cargo.lock b/Cargo.lock index 5ead70e0..3fab450c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1663,6 +1663,7 @@ dependencies = [ "num-traits", "serde", "specta", + "xxhash-rust", ] [[package]] @@ -1713,6 +1714,7 @@ dependencies = [ "tempfile", "vulkan-executor", "wgpu-executor", + "xxhash-rust", ] [[package]] @@ -5944,6 +5946,12 @@ version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3" +[[package]] +name = "xxhash-rust" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "735a71d46c4d68d71d4b24d03fdc2b98e38cea81730595801db779c04fe80d70" + [[package]] name = "zune-inflate" version = "0.2.50" diff --git a/Cargo.toml b/Cargo.toml index f2c38781..6dcc854d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -31,6 +31,7 @@ exclude = [ [workspace.dependencies] specta = { git = "https://github.com/oscartbeaumont/rspc", rev = "9725ddbfe40183debc055b88c37910eb6f818eae", features = ["glam"] } +xxhash-rust = { version = "0.8.4", features = ["xxh3"] } [profile.release.package.graphite-wasm] opt-level = 3 @@ -47,5 +48,11 @@ opt-level = 3 [profile.dev.package.autoquant] opt-level = 3 +[profile.dev.package.image] +opt-level = 3 + +[profile.dev.package.xxhash-rust] +opt-level = 3 + #[profile.dev] #opt-level = 3 diff --git a/about.toml b/about.toml index 989ba955..597d7532 100644 --- a/about.toml +++ b/about.toml @@ -11,6 +11,7 @@ accepted = [ "MPL-2.0", "CC0-1.0", "OpenSSL", + "BSL-1.0", ] ignore-build-dependencies = true ignore-dev-dependencies = true diff --git a/deny.toml b/deny.toml index aec5e577..889e3d95 100644 --- a/deny.toml +++ b/deny.toml @@ -82,6 +82,7 @@ allow = [ "MPL-2.0", "CC0-1.0", "OpenSSL", + "BSL-1.0", #"Apache-2.0 WITH LLVM-exception", ] # List of explicitly disallowed licenses diff --git a/editor/src/node_graph_executor.rs b/editor/src/node_graph_executor.rs index 314033d6..9c4f1811 100644 --- a/editor/src/node_graph_executor.rs +++ b/editor/src/node_graph_executor.rs @@ -27,13 +27,13 @@ impl NodeGraphExecutor { scoped_network.duplicate_outputs(&mut generate_uuid); scoped_network.remove_dead_nodes(); - debug!("Execute document network:\n{scoped_network:#?}"); + //debug!("Execute document network:\n{scoped_network:#?}"); // We assume only one output assert_eq!(scoped_network.outputs.len(), 1, "Graph with multiple outputs not yet handled"); let c = Compiler {}; let proto_network = c.compile_single(scoped_network, true)?; - debug!("Execute proto network:\n{proto_network}"); + //debug!("Execute proto network:\n{proto_network}"); assert_ne!(proto_network.nodes.len(), 0, "No protonodes exist?"); if let Err(e) = self.executor.update(proto_network) { error!("Failed to update executor:\n{}", e); diff --git a/node-graph/graph-craft/Cargo.toml b/node-graph/graph-craft/Cargo.toml index 09dacf06..eaf62b3e 100644 --- a/node-graph/graph-craft/Cargo.toml +++ b/node-graph/graph-craft/Cargo.toml @@ -24,3 +24,4 @@ specta.workspace = true bytemuck = {version = "1.8" } anyhow = "1.0.66" +xxhash-rust = {workspace = true} diff --git a/node-graph/graph-craft/src/document.rs b/node-graph/graph-craft/src/document.rs index 7e6f6842..b0680830 100644 --- a/node-graph/graph-craft/src/document.rs +++ b/node-graph/graph-craft/src/document.rs @@ -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, diff --git a/node-graph/graph-craft/src/proto.rs b/node-graph/graph-craft/src/proto.rs index c2e9d9c4..9bbeb071 100644 --- a/node-graph/graph-craft/src/proto.rs +++ b/node-graph/graph-craft/src/proto.rs @@ -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 { 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 ] ); } diff --git a/node-graph/gstd/Cargo.toml b/node-graph/gstd/Cargo.toml index ff36d1cc..f973f6d3 100644 --- a/node-graph/gstd/Cargo.toml +++ b/node-graph/gstd/Cargo.toml @@ -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" diff --git a/node-graph/gstd/src/memo.rs b/node-graph/gstd/src/memo.rs index 14c419ba..ce69c59d 100644 --- a/node-graph/gstd/src/memo.rs +++ b/node-graph/gstd/src/memo.rs @@ -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 { impl<'i, T: 'i + Hash> Node<'i, T> for CacheNode { 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> for LetNode { fn eval<'s: 'i>(&'s self, input: Option) -> Self::Output { match input { Some(input) => { - let mut hasher = DefaultHasher::new(); + let mut hasher = Xxh3::new(); input.hash(&mut hasher); let hash = hasher.finish();