on develop help sign in
Use inAnimationFrame from ghcjs-dom.

By using this function from ghcjs-dom we get the ghcjs-base implementation that is simpler on ghcjs. On ghc we get the new jsaddle version that has the same optimization we have now, but handlers are shared with anything else that uses `inAnimationFrame`.

commitb8ff8b6e8b300cbbcaa12f064493f0a24a9d3e1b authorHamish Mackenzie <Hamish.K.Mackenzie@googlemail.com> dateWed 28 Jun 2017, 02:39 (9 years ago) parent275939f
2 files changed+5−16
reflex-dom-core/reflex-dom-core.cabal+1−1 reflex-dom-core/src/Reflex/Dom/Builder/Immediate.hs+4−15
reflex-dom-core/reflex-dom-core.cabal+1−1
@@ -51,7 +51,7 @@ library
5151 dependent-sum-template >= 0.0.0.4 && < 0.1,
5252 directory >= 1.2 && < 1.4,
5353 exception-transformers == 0.4.*,
54− ghcjs-dom >= 0.9.0.0 && < 0.10,
54+ ghcjs-dom >= 0.9.1.0 && < 0.10,
5555 jsaddle >=0.9.0.0 && <0.10,
5656 -- keycode-0.2 has a bug on firefox
5757 keycode >= 0.2.1 && < 0.3,
reflex-dom-core/src/Reflex/Dom/Builder/Immediate.hs+4−15
@@ -208,27 +208,16 @@ runImmediateDomBuilderT
208208 -> ImmediateDomBuilderEnv t
209209 -> Chan [DSum (EventTriggerRef t) TriggerInvocation]
210210 -> m a
211−runImmediateDomBuilderT (ImmediateDomBuilderT a) env eventChan = do
212− handlersMVar <- liftIO $ newMVar []
211+runImmediateDomBuilderT (ImmediateDomBuilderT a) env eventChan =
213212 flip runTriggerEventT eventChan $ do
214− win <- DOM.currentWindowUnchecked
215213 rec (x, req) <- runRequesterT (runReaderT a env) rsp
216− rsp <- performEventAsync $ ffor req $ \rm f -> liftJSM $ runInAnimationFrame handlersMVar win f $
214+ rsp <- performEventAsync $ ffor req $ \rm f -> liftJSM $ runInAnimationFrame f $
217215 DMap.traverseWithKey (\_ r -> Identity <$> r) rm
218216 return x
219217 where
220− runInAnimationFrame handlersMVar win f x = do
221− handlers <- liftIO $ takeMVar handlersMVar
222− when (null handlers) $ do
223− rec cb <- newRequestAnimationFrameCallbackSync $ \_ -> do
224− freeRequestAnimationFrameCallback cb
225− handlersToRun <- liftIO $ takeMVar handlersMVar
226− liftIO $ putMVar handlersMVar []
227− sequence_ (reverse handlersToRun)
228− void $ Window.requestAnimationFrame win cb
229− liftIO $ putMVar handlersMVar ((do
218+ runInAnimationFrame f x = void . DOM.inAnimationFrame' $ \_ -> do
230219 v <- synchronously x
231− void . liftIO $ f v) : handlers)
220+ void . liftIO $ f v
232221
233222class Monad m => HasDocument m where
234223 askDocument :: m Document