From c1b9d46fa7fc7a8d39edba555bc0c9d88c29da17 Mon Sep 17 00:00:00 2001 From: Max Goodhart Date: Wed, 11 Nov 2020 23:39:52 -0800 Subject: [PATCH] Skip unnecessary view re-positions --- src/node/viewStateMachine.js | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/src/node/viewStateMachine.js b/src/node/viewStateMachine.js index 0da3995..b590489 100644 --- a/src/node/viewStateMachine.js +++ b/src/node/viewStateMachine.js @@ -86,15 +86,19 @@ const viewStateMachine = Machine( type: 'parallel', entry: 'positionView', on: { - DISPLAY: { - actions: [ - assign({ - pos: (context, event) => event.pos, - }), - 'positionView', - ], - cond: 'contentUnchanged', - }, + DISPLAY: [ + // Noop if nothing changed. + { cond: 'contentPosUnchanged' }, + { + actions: [ + assign({ + pos: (context, event) => event.pos, + }), + 'positionView', + ], + cond: 'contentUnchanged', + }, + ], }, states: { audio: { @@ -167,6 +171,12 @@ const viewStateMachine = Machine( contentUnchanged: (context, event) => { return isEqual(context.content, event.content) }, + contentPosUnchanged: (context, event) => { + return ( + isEqual(context.content, event.content) && + isEqual(context.pos, event.pos) + ) + }, optionsChanged: (context, event) => { return !isEqual(context.options, event.options) },