From bb12275b2628e602c4f0845667ee16c4b4ee4ce3 Mon Sep 17 00:00:00 2001
From: David Sehnal <david.sehnal@gmail.com>
Date: Fri, 8 Mar 2019 23:32:31 +0100
Subject: [PATCH] mol-plugin: do not recompute query if the parent structure
 hasn't changed

---
 src/mol-plugin/state/transforms/model.ts | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/src/mol-plugin/state/transforms/model.ts b/src/mol-plugin/state/transforms/model.ts
index 052ec2ba9..679db9b70 100644
--- a/src/mol-plugin/state/transforms/model.ts
+++ b/src/mol-plugin/state/transforms/model.ts
@@ -264,6 +264,7 @@ const StructureSelection = PluginStateTransform.BuiltIn({
     apply({ a, params, cache }) {
         const compiled = compile<Sel>(params.query);
         (cache as { compiled: QueryFn<Sel> }).compiled = compiled;
+        (cache as { source: Structure }).source = a.data;
 
         const result = compiled(new QueryContext(a.data));
         const s = Sel.unionStructure(result);
@@ -274,6 +275,11 @@ const StructureSelection = PluginStateTransform.BuiltIn({
     update: ({ a, b, oldParams, newParams, cache }) => {
         if (oldParams.query !== newParams.query) return StateTransformer.UpdateResult.Recreate;
 
+        if ((cache as { source: Structure }).source === a.data) {
+            return StateTransformer.UpdateResult.Unchanged;
+        }
+        (cache as { source: Structure }).source === a.data;
+
         if (updateStructureFromQuery((cache as { compiled: QueryFn<Sel> }).compiled, a.data, b, newParams.label)) {
             return StateTransformer.UpdateResult.Updated;
         }
@@ -298,6 +304,7 @@ const UserStructureSelection = PluginStateTransform.BuiltIn({
         const query = transpileMolScript(parsed[0]);
         const compiled = compile<Sel>(query);
         (cache as { compiled: QueryFn<Sel> }).compiled = compiled;
+        (cache as { source: Structure }).source = a.data;
         const result = compiled(new QueryContext(a.data));
         const s = Sel.unionStructure(result);
         const props = { label: `${params.label || 'Selection'}`, description: structureDesc(s) };
@@ -308,6 +315,11 @@ const UserStructureSelection = PluginStateTransform.BuiltIn({
             return StateTransformer.UpdateResult.Recreate;
         }
 
+        if ((cache as { source: Structure }).source === a.data) {
+            return StateTransformer.UpdateResult.Unchanged;
+        }
+        (cache as { source: Structure }).source === a.data;
+
         updateStructureFromQuery((cache as { compiled: QueryFn<Sel> }).compiled, a.data, b, newParams.label);
         return StateTransformer.UpdateResult.Updated;
     }
-- 
GitLab