From 1949c5c79706b911ddeef2172b15ce103ca70f9e Mon Sep 17 00:00:00 2001 From: Victor Doval <10011941+vicdoval@users.noreply.github.com> Date: Sat, 2 May 2020 19:04:39 +0200 Subject: [PATCH 1/2] clearing cache when unregistering --- core/__init__.py | 6 ++++++ core/links.py | 18 ++++++++++++++++-- core/node_id_dict.py | 11 +++++++++-- core/socket_data.py | 7 +++++++ 4 files changed, 38 insertions(+), 4 deletions(-) diff --git a/core/__init__.py b/core/__init__.py index 70270d7c2..9528ab464 100644 --- a/core/__init__.py +++ b/core/__init__.py @@ -1,6 +1,9 @@ import importlib import sverchok from sverchok.utils.logging import debug, exception +from sverchok.core.socket_data import clear_all_socket_cache +from sverchok.core.node_id_dict import clear_nodes_id_dict +from sverchok.core.links import clear_link_memory reload_event = False @@ -24,6 +27,9 @@ def sv_register_modules(modules): m.register() def sv_unregister_modules(modules): + clear_all_socket_cache() + clear_nodes_id_dict() + clear_link_memory() for m in reversed(modules): if hasattr(m, "unregister"): # print("Unregistering module: {}".format(m.__name__)) diff --git a/core/links.py b/core/links.py index e6f64f86b..09c5bc2cf 100644 --- a/core/links.py +++ b/core/links.py @@ -17,10 +17,14 @@ # # ##### END GPL LICENSE BLOCK ##### - +import bpy import collections from typing import NamedTuple +def clear_link_memory(): + for ng in bpy.data.node_groups: + if hasattr(ng, "sv_links"): + ng.sv_links.clear_all_dictionaries() def get_output_socket_id(socket): if socket.node.bl_idname == 'NodeReroute': @@ -122,7 +126,16 @@ class SvLinks: self.input_sockets_cache[tree_id] = dict() self.inputted_nodes_cache[tree_id] = dict() - + def clear_all_dictionaries(self): + self.sv_links_new.clear() + self.sv_links_cache.clear() + self.output_sockets_new.clear() + self.input_sockets_new.clear() + self.inputted_nodes_new.clear() + self.output_sockets_cache.clear() + self.input_sockets_cache.clear() + self.inputted_nodes_cache.clear() + def create_new_links(self, node_tree): tree_id = node_tree.tree_id if not node_tree.tree_id in self.sv_links_new: @@ -154,6 +167,7 @@ class SvLinks: if not self.sv_links_cache[tree_id]: print('there was no links memory, creating it') self.create_new_links(node_tree) + node_tree.nodes_dict.load_nodes(node_tree) return node_tree.nodes affected_nodes = [] diff --git a/core/node_id_dict.py b/core/node_id_dict.py index ccecd6de8..328ad9023 100644 --- a/core/node_id_dict.py +++ b/core/node_id_dict.py @@ -16,6 +16,12 @@ # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # # ##### END GPL LICENSE BLOCK ##### +import bpy + +def clear_nodes_id_dict(): + for ng in bpy.data.node_groups: + if hasattr(ng, "nodes_dict"): + ng.nodes_dict.sv_node_dict_cache.clear() class SvNodesDict: ''' @@ -37,10 +43,11 @@ class SvNodesDict: def load_node(self, node): n_id = node.node_id - tree_id = node.id_data.tree_id + node_tree = node.id_data + tree_id = node_tree.tree_id if tree_id not in self.sv_node_dict_cache: - self.sv_node_dict_cache[tree_id] = {} + self.load_nodes(node_tree) self.sv_node_dict_cache[tree_id][n_id] = node def forget_node(self, node): diff --git a/core/socket_data.py b/core/socket_data.py index 7b8f76e51..496839057 100644 --- a/core/socket_data.py +++ b/core/socket_data.py @@ -179,3 +179,10 @@ def reset_socket_cache(ng): """ global socket_data_cache socket_data_cache[ng.tree_id] = {} + +def clear_all_socket_cache(): + """ + Reset socket cache for all node-trees. + """ + global socket_data_cache + socket_data_cache.clear() -- GitLab From 055617754b4abda1f5719623037d550f91f9dd17 Mon Sep 17 00:00:00 2001 From: Victor Doval <10011941+vicdoval@users.noreply.github.com> Date: Sat, 2 May 2020 19:28:50 +0200 Subject: [PATCH 2/2] clearing cache on pre-load --- core/__init__.py | 8 ++------ core/handlers.py | 4 ++-- core/update_system.py | 9 +++++++++ 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/core/__init__.py b/core/__init__.py index 9528ab464..4b6258575 100644 --- a/core/__init__.py +++ b/core/__init__.py @@ -1,9 +1,7 @@ import importlib import sverchok from sverchok.utils.logging import debug, exception -from sverchok.core.socket_data import clear_all_socket_cache -from sverchok.core.node_id_dict import clear_nodes_id_dict -from sverchok.core.links import clear_link_memory +from sverchok.core.update_system import clear_system_cache reload_event = False @@ -27,9 +25,7 @@ def sv_register_modules(modules): m.register() def sv_unregister_modules(modules): - clear_all_socket_cache() - clear_nodes_id_dict() - clear_link_memory() + clear_system_cache() for m in reversed(modules): if hasattr(m, "unregister"): # print("Unregistering module: {}".format(m.__name__)) diff --git a/core/handlers.py b/core/handlers.py index fee0bdee4..f6bfd33b3 100644 --- a/core/handlers.py +++ b/core/handlers.py @@ -6,7 +6,7 @@ from bpy.app.handlers import persistent from sverchok import old_nodes from sverchok import data_structure from sverchok.core import upgrade_nodes, undo_handler_node_count -from sverchok.core.update_system import set_first_run +from sverchok.core.update_system import set_first_run, clear_system_cache from sverchok.core.events import CurrentEvents, BlenderEventsTypes from sverchok.ui import color_def, bgl_callback_nodeview, bgl_callback_3dview from sverchok.utils import app_handler_ops @@ -163,7 +163,7 @@ def sv_clean(scene): @persistent def sv_pre_load(scene): - + clear_system_cache() sv_clean(scene) set_first_run(True) diff --git a/core/update_system.py b/core/update_system.py index 3174dee20..299fc644b 100644 --- a/core/update_system.py +++ b/core/update_system.py @@ -27,6 +27,9 @@ from sverchok.core.socket_data import SvNoDataError, reset_socket_cache from sverchok.utils.logging import debug, info, warning, error, exception from sverchok.utils.profile import profile from sverchok.utils.exception_drawing_with_bgl import clear_exception_drawing_with_bgl, start_exception_drawing_with_bgl +from sverchok.core.socket_data import clear_all_socket_cache +from sverchok.core.node_id_dict import clear_nodes_id_dict +from sverchok.core.links import clear_link_memory import sverchok import traceback @@ -47,6 +50,12 @@ def is_first_run(): global sv_first_run return sv_first_run +def clear_system_cache(): + print("cleaning Sverchok cache") + clear_all_socket_cache() + clear_nodes_id_dict() + clear_link_memory() + def update_error_colors(self, context): global no_data_color global exception_color -- GitLab