Graphite icon indicating copy to clipboard operation
Graphite copied to clipboard

BorrowTree inconsistency when closing and opening document

Open adamgerhant opened this issue 9 months ago • 0 comments

When closing a newly created blank document and then creating another new document, the BorrowTree in the DynamicExecutor is not the same as the first, even though both node networks are the same. Blocks #1750

How to reproduce:

  • Refresh on new document screen
  • Create new document
  • Close document
  • Create another new document https://github.com/GraphiteEditor/Graphite/assets/116332429/01dcb127-2a7c-444e-8cea-21d73ad1bb8e

Borrow tree from new document after refreshing (Artboard node id 17505474457066797865)

tree.inputs_source_map(): [(Source { node: [], index: 0 }, (NodeId(1776386397), 2)), (Source { node: [NodeId(0)], index: 0 }, (NodeId(209454463), 1)), (Source { node: [NodeId(0), NodeId(0)], index: 0 }, (NodeId(209454463), 0)), (Source { node: [NodeId(0), NodeId(1)], index: 0 }, (NodeId(1553787294), 0)), (Source { node: [NodeId(0), NodeId(2)], index: 0 }, (NodeId(766666474), 1)), (Source { node: [NodeId(0), NodeId(3)], index: 0 }, (NodeId(209454463), 0)), (Source { node: [NodeId(0), NodeId(3)], index: 1 }, (NodeId(209454463), 2)), (Source { node: [NodeId(17505474457066797865)], index: 1 }, (NodeId(2719152001), 1)), (Source { node: [NodeId(17505474457066797865)], index: 2 }, (NodeId(2719152001), 5)), (Source { node: [NodeId(17505474457066797865)], index: 0 }, (NodeId(2290264875), 2)), (Source { node: [NodeId(17505474457066797865), NodeId(0)], index: 0 }, (NodeId(2719152001), 5)), (Source { node: [NodeId(17505474457066797865), NodeId(1)], index: 0 }, (NodeId(4128425038), 1)), (Source { node: [NodeId(17505474457066797865), NodeId(2)], index: 1 }, (NodeId(2290264875), 2)), (Source { node: [NodeId(17505474457066797865), NodeId(2)], index: 0 }, (NodeId(2290264875), 1)), (Source { node: [NodeId(17505474457066797865), NodeId(536129167933390016)], index: 0 }, (NodeId(1627101688), 0)), (Source { node: [NodeId(17505474457066797865), NodeId(536129167933390016)], index: 1 }, (NodeId(1627101688), 1)), (Source { node: [NodeId(17505474457066797865), NodeId(6416337593867558447)], index: 0 }, (NodeId(165319789), 0)), (Source { node: [NodeId(17505474457066797865), NodeId(6416337593867558447)], index: 1 }, (NodeId(165319789), 1)), (Source { node: [NodeId(17505474457066797865), NodeId(6825362522106989504)], index: 0 }, (NodeId(4255178570), 0)), (Source { node: [NodeId(17505474457066797865), NodeId(6825362522106989504)], index: 1 }, (NodeId(4255178570), 1)), (Source { node: [NodeId(17505474457066797865), NodeId(7832534103926174319)], index: 0 }, (NodeId(2542087029), 0)), (Source { node: [NodeId(17505474457066797865), NodeId(7832534103926174319)], index: 1 }, (NodeId(2542087029), 1)), (Source { node: [NodeId(17505474457066797865), NodeId(8298558591740644999)], index: 1 }, (NodeId(1175147230), 1)), (Source { node: [NodeId(17505474457066797865), NodeId(8298558591740644999)], index: 0 }, (NodeId(1175147230), 0)), (Source { node: [NodeId(17505474457066797865), NodeId(12089252423572272489)], index: 1 }, (NodeId(2801556587), 1)), (Source { node: [NodeId(17505474457066797865), NodeId(12089252423572272489)], index: 0 }, (NodeId(2801556587), 0))]

Borrow tree after refreshing (Artboard node id 648511539128895861)

tree.inputs_source_map(): [(Source { node: [], index: 0 }, (NodeId(187226068), 2)), (Source { node: [NodeId(0)], index: 0 }, (NodeId(2443952850), 1)), (Source { node: [NodeId(0), NodeId(0)], index: 0 }, (NodeId(2443952850), 0)), (Source { node: [NodeId(0), NodeId(1)], index: 0 }, (NodeId(1553787294), 0)), (Source { node: [NodeId(0), NodeId(2)], index: 0 }, (NodeId(766666474), 1)), (Source { node: [NodeId(0), NodeId(3)], index: 0 }, (NodeId(2443952850), 0)), (Source { node: [NodeId(0), NodeId(3)], index: 1 }, (NodeId(2443952850), 2)), (Source { node: [NodeId(648511539128895861)], index: 0 }, (NodeId(271972563), 2)), (Source { node: [NodeId(648511539128895861), NodeId(1)], index: 0 }, (NodeId(3802644005), 1)), (Source { node: [NodeId(648511539128895861), NodeId(2)], index: 1 }, (NodeId(271972563), 2)), (Source { node: [NodeId(648511539128895861), NodeId(2)], index: 0 }, (NodeId(271972563), 1)), (Source { node: [NodeId(17505474457066797865)], index: 2 }, (NodeId(2719152001), 5)), (Source { node: [NodeId(17505474457066797865)], index: 1 }, (NodeId(2719152001), 1)), (Source { node: [NodeId(17505474457066797865), NodeId(0)], index: 0 }, (NodeId(2719152001), 5)), (Source { node: [NodeId(17505474457066797865), NodeId(536129167933390016)], index: 0 }, (NodeId(1627101688), 0)), (Source { node: [NodeId(17505474457066797865), NodeId(536129167933390016)], index: 1 }, (NodeId(1627101688), 1)), (Source { node: [NodeId(17505474457066797865), NodeId(6416337593867558447)], index: 0 }, (NodeId(165319789), 0)), (Source { node: [NodeId(17505474457066797865), NodeId(6416337593867558447)], index: 1 }, (NodeId(165319789), 1)), (Source { node: [NodeId(17505474457066797865), NodeId(6825362522106989504)], index: 0 }, (NodeId(4255178570), 0)), (Source { node: [NodeId(17505474457066797865), NodeId(6825362522106989504)], index: 1 }, (NodeId(4255178570), 1)), (Source { node: [NodeId(17505474457066797865), NodeId(7832534103926174319)], index: 1 }, (NodeId(2542087029), 1)), (Source { node: [NodeId(17505474457066797865), NodeId(7832534103926174319)], index: 0 }, (NodeId(2542087029), 0)), (Source { node: [NodeId(17505474457066797865), NodeId(8298558591740644999)], index: 1 }, (NodeId(1175147230), 1)), (Source { node: [NodeId(17505474457066797865), NodeId(8298558591740644999)], index: 0 }, (NodeId(1175147230), 0)), (Source { node: [NodeId(17505474457066797865), NodeId(12089252423572272489)], index: 1 }, (NodeId(2801556587), 1)), (Source { node: [NodeId(17505474457066797865), NodeId(12089252423572272489)], index: 0 }, (NodeId(2801556587), 0))]

In the first borrow tree, all the sources are added properly. For example, the artboard node has sources for all inputs

(Source { node: [NodeId(17505474457066797865)], index: 1 }, (NodeId(2719152001), 1)), (Source { node: [NodeId(17505474457066797865)], index: 2 }, (NodeId(2719152001), 5)), (Source { node: [NodeId(17505474457066797865)], index: 0 }

However, in the second borrow tree, only the source for the first input is added.

Source { node: [NodeId(648511539128895861)], index: 0 }, (NodeId(271972563), 2)),

In fact, the second tree just has a total of 4 sources for the artboard node and its entire nested network, while the first tree has sources for every artboard node input and nested network input. Another observation is that the second inputs source map retains all the sources from the previous document (artboard id 17505474457066797865). It seems that the root issue is that the borrow tree is not being reset when changing networks. This means the nodes are being preserved, so nodes in the protonetwork for the new document are being skipped here:

if !self.nodes.contains_key(&id) {
    self.push_node(id, node, typing_context).await?;
}

I think a solution could be to reset the borrow tree when switching documents, but I'm not sure what other effects this would have.

adamgerhant avatar May 20 '24 22:05 adamgerhant