Ticket #26 (new defect)
Opened 4 years ago
Strange performance behaviour
| Reported by: | cgibbard | Owned by: | |
|---|---|---|---|
| Priority: | major | Milestone: | |
| Version: | Keywords: | ||
| Cc: | cgibbard@… |
Description
In the following program, velocity is computed as the sum of the integral of an acceleration term derived from keyboard input, and the position of the mouse. If I comment out the liftA2 (+) and either one of the two sources of velocity, the performance is smooth. However, taking the sum like this makes the program very jerky and unresponsive. Compiling with optimisations does not appear to help. Is it just my machine?
import Control.Applicative
import Data.VectorSpace
import FRP.Reactive
import FRP.Reactive.GLUT.Adapter
import Graphics.FieldTrip
import FRP.Reactive.FieldTrip
main = anim2 myDisk
myDisk ui = motion . pure $ uscale2 (0.1 :: Double) *% udisk
where motion = liftA2 (*%) (fmap translate2 (position ui))
position = uiIntegral velocity
velocity ui = liftA2 (^+^)
(uiIntegral accel ui)
(fmap (uncurry vector2) (mousePosition ui))
accel ui = keyAccel ui
keyAccel :: Anim (Vector2 Double)
keyAccel ui = accumB zeroV . fmap f $ keyAction ui
where f (Down, k) = (^+^ keyMotion k)
f (Up, k) = (^-^ keyMotion k)
keyMotion (SpecialKey KeyUp) = vector2 0 1
keyMotion (SpecialKey KeyDown) = vector2 0 (-1)
keyMotion (SpecialKey KeyLeft) = vector2 (-1) 0
keyMotion (SpecialKey KeyRight) = vector2 1 0
keyMotion _ = zeroV
Note: See
TracTickets for help on using
tickets.
