Skip to main content

bench/
bench.rs

1use ferrum_flow::*;
2use gpui::{AppContext as _, Application, WindowOptions};
3use serde_json::json;
4
5fn main() {
6    Application::new().run(|cx| {
7        let mut graph = Graph::new();
8
9        for j in 0..100 {
10            for i in 0..100 {
11                graph
12                    .create_node("")
13                    .position(200.0 * i as f32, 200.0 * j as f32)
14                    .input()
15                    .output()
16                    .data(json!({ "label": format!("Node {}", i * 100 + j) }))
17                    .build(&mut graph);
18            }
19        }
20
21        let node_ids = graph.nodes().iter().map(|(id, _)| *id).collect::<Vec<_>>();
22
23        generate_chain_edges(&mut graph, node_ids);
24
25        cx.open_window(WindowOptions::default(), |window, cx| {
26            cx.new(|ctx| {
27                FlowCanvas::builder(graph, ctx, window)
28                    .plugins_core()
29                    .plugin(MinimapPlugin::new())
30                    .plugin(ClipboardPlugin::new())
31                    .plugin(ContextMenuPlugin::new())
32                    .plugin(SelectAllViewportPlugin::new())
33                    .plugin(AlignPlugin::new())
34                    .plugin(FocusSelectionPlugin::new())
35                    .plugin(FitAllGraphPlugin::new())
36                    .plugin(SnapGuidesPlugin::new())
37                    .plugin(ZoomControlsPlugin::new())
38                    .build()
39            })
40        })
41        .unwrap();
42    });
43}
44
45pub fn generate_chain_edges(graph: &mut Graph, node_ids: Vec<NodeId>) {
46    for window in node_ids.windows(2) {
47        let from = window[0];
48        let to = window[1];
49
50        let from_node = graph.get_node(&from).unwrap();
51        let to_node = graph.get_node(&to).unwrap();
52
53        let source_port = from_node.outputs[0];
54        let target_port = to_node.inputs[0];
55
56        EdgeBuilder::new()
57            .source(source_port)
58            .target(target_port)
59            .build(graph);
60    }
61}