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