Как профилировать ракетку GUI-код с помощью canvas - PullRequest
0 голосов
/ 18 мая 2018

Я сейчас пишу игру в Racket, используя canvas. Я бы очень хотел профилировать свой код, чтобы помочь оптимизировать его, но я изо всех сил пытаюсь понять, как это сделать. У меня есть игровой цикл, управляемый таймером, который управляет обновлением объекта и вызывает refresh на холсте (я переопределил (on-paint)). Я попытался профилировать мой основной файл, и (send frame show #t), (send canvas start frame), и мой таймер, но он не профилирует все это. В идеале я бы хотел, чтобы он был в профиле, пока я не закрою окно.

(define/public (game-loop dt)
  (update dt)
  (integrate dt)
  (refresh))

(define/public (start frame)
  (unless game-loop-timer
    (send frame set-canvas! this)
    (set! last-frame-time (current-inexact-milliseconds))
    (set! game-loop-timer
          (new timer% [interval frame-interval]
               [notify-callback
                 (lambda _
                   (yield)
                   (define dt (/ (- (current-inexact-milliseconds) last-frame-time) 1000.0))
                   (set! last-frame-time (current-inexact-milliseconds))
                   (send this game-loop dt))]))))
...