# HG changeset patch # User Drew Perttula # Date 2017-04-12 06:04:18 # Node ID 3bb58b74c9c1606027173dd91dcf051491f27f5b # Parent b1fed8880adaec85717a88f99d63a3b665133a9d timeline: add cache of floats between graph updates for smoother redraws Ignore-this: dbdc4782855087f4ec12f1d24d440484 diff --git a/light9/web/graph.coffee b/light9/web/graph.coffee --- a/light9/web/graph.coffee +++ b/light9/web/graph.coffee @@ -136,6 +136,7 @@ class window.SyncedGraph # if we had a Store already, this lets N3.Store free all its indices/etc @graph = N3.Store() @_addPrefixes(@prefixes) + @cachedFloatValues = new Map(); _addPrefixes: (prefixes) -> @@ -179,6 +180,7 @@ class window.SyncedGraph # In most cases you want applyAndSendPatch. # # This is the only method that writes to @graph! + @cachedFloatValues.clear() for quad in patch.delQuads @graph.removeTriple(quad) for quad in patch.addQuads @@ -233,7 +235,13 @@ class window.SyncedGraph throw new Error("too many values: " + JSON.stringify(quads)) floatValue: (s, p) -> - parseFloat(N3.Util.getLiteralValue(@_singleValue(s, p))) + key = s + '|' + p + hit = @cachedFloatValues.get(key) + return hit if hit != undefined + + ret = parseFloat(N3.Util.getLiteralValue(@_singleValue(s, p))) + @cachedFloatValues.set(key, ret) + return ret stringValue: (s, p) -> N3.Util.getLiteralValue(@_singleValue(s, p)) diff --git a/light9/web/timeline/timeline.coffee b/light9/web/timeline/timeline.coffee --- a/light9/web/timeline/timeline.coffee +++ b/light9/web/timeline/timeline.coffee @@ -433,7 +433,12 @@ Polymer @graph.subjects(@uri, @uri, @uri) return if @isDetached? - return + return + + @updateDisplay() + + updateDisplay: -> + # update our note DOM and SVG elements based on the graph U = (x) -> @graph.Uri(x) @@ -559,6 +564,7 @@ Polymer addHandler: -> @graph.runHandler(@update.bind(@)) + update: -> U = (x) -> @graph.Uri(x) @effect = @graph.uriValue(@uri, U(':effectClass')) @@ -735,7 +741,6 @@ Polymer _line(@ctx, @cursorPath.bot0, @cursorPath.bot1, '#ff0303', '3px') @ctx.stroke() - Polymer is: 'light9-adjusters-canvas' behaviors: [ Polymer.IronResizableBehavior ]