 
     run: ->
         @stopped = false
-        if @enabled
-            return
-        @req_tick = requestAnimationFrame @_bound_tick
         @enabled = true
+        if not @req_tick
+            @req_tick = requestAnimationFrame @_bound_tick
         @last_time = performance.now()
 
 

        else
            @req_tick = requestAnimationFrame @_bound_tick
        time = performance.now()
        @frame_duration = frame_duration = Math.min(time - @last_time, MAX_FRAME_DURATION)
        @last_time = time

        if not @enabled
            return
        @last_frame_durations[@_fdi] = frame_duration
        @_fdi = (@_fdi+1) % @last_frame_durations.length

        task_time = time
        max_task_time = MAX_TASK_DURATION + time

    reset_timeout: =>
        if @timeout_time
            @timeout(@timeout_time)
        
    tick_once: ->
        if @req_tick?
            cancelAnimationFrame @req_tick
            @tick()
        else
            @tick()
            cancelAnimationFrame @req_tick
            @req_tick = null
    
    tick: ->
        {_HMD} = @context
        if _HMD?
