add a benchmark that attempts to mimic DrRacket redrawing the window
This commit is contained in:
parent
6f984d868c
commit
8d1e16f09c
|
@ -8,7 +8,8 @@
|
||||||
"scheme-lib"
|
"scheme-lib"
|
||||||
"srfi-lite-lib"
|
"srfi-lite-lib"
|
||||||
"racket-test"
|
"racket-test"
|
||||||
"typed-racket-lib"))
|
"typed-racket-lib"
|
||||||
|
"gui-lib"))
|
||||||
|
|
||||||
(define pkg-desc "Racket benchmarks")
|
(define pkg-desc "Racket benchmarks")
|
||||||
(define pkg-authors '(eli jay mflatt robby samth stamourv))
|
(define pkg-authors '(eli jay mflatt robby samth stamourv))
|
||||||
|
|
|
@ -0,0 +1,80 @@
|
||||||
|
#lang racket/gui
|
||||||
|
#|
|
||||||
|
|
||||||
|
This is an attempt to simulate what happens when
|
||||||
|
DrRacket redraws a full window's worth of text
|
||||||
|
|
||||||
|
|#
|
||||||
|
|
||||||
|
(require framework)
|
||||||
|
|
||||||
|
(define t%
|
||||||
|
(text:column-guide-mixin
|
||||||
|
(text:line-numbers-mixin
|
||||||
|
racket:text%)))
|
||||||
|
|
||||||
|
(define (time-print-mixin t%)
|
||||||
|
(class t%
|
||||||
|
(super-new)
|
||||||
|
(define/override (on-paint before? dc left top right bottom dx dy draw-caret)
|
||||||
|
(cond
|
||||||
|
[before?
|
||||||
|
(set! start-time (current-process-milliseconds (current-thread)))
|
||||||
|
(super on-paint before? dc left top right bottom dx dy draw-caret)]
|
||||||
|
[else
|
||||||
|
(super on-paint before? dc left top right bottom dx dy draw-caret)
|
||||||
|
(define now (current-process-milliseconds (current-thread)))
|
||||||
|
(set! times (cons (- now start-time) times))
|
||||||
|
(semaphore-post s)]))))
|
||||||
|
(define start-time #f)
|
||||||
|
|
||||||
|
(define times '())
|
||||||
|
(define s (make-semaphore))
|
||||||
|
(define t (new (time-print-mixin t%)))
|
||||||
|
(send t show-line-numbers! #t)
|
||||||
|
(send t insert "#lang racket/base\n")
|
||||||
|
(for ([x (in-range 1000)])
|
||||||
|
(send t insert (format "~s\n" '(let loop ([x ""])
|
||||||
|
(when (< (string-length x) 100)
|
||||||
|
(loop (string-append x "y")))))))
|
||||||
|
(define f (new frame% [label ""] [width 1000] [height 1400]))
|
||||||
|
(define ec (new editor-canvas% [parent f] [editor t]))
|
||||||
|
(define height
|
||||||
|
(let ([yb (box 0)])
|
||||||
|
(send t position-location (send t last-position) #f yb)
|
||||||
|
(unbox yb)))
|
||||||
|
(define width
|
||||||
|
(let ([xb (box 0)])
|
||||||
|
(for/fold ([width 0]) ([para (in-range (+ (send t last-paragraph) 1))])
|
||||||
|
(send t position-location (send t paragraph-end-position para) xb #f #t #t)
|
||||||
|
(max width (unbox xb)))))
|
||||||
|
(void (send ec scroll-to 0 (/ height 2) 1 1 #t))
|
||||||
|
(send f show #t)
|
||||||
|
|
||||||
|
;; wait for syntax coloring to finish
|
||||||
|
(send t freeze-colorer)
|
||||||
|
|
||||||
|
(define number-of-experiments 10)
|
||||||
|
|
||||||
|
(queue-callback
|
||||||
|
(λ ()
|
||||||
|
(set! times '())
|
||||||
|
(set! s (make-semaphore)) ;; because earlier paints happend before we were ready
|
||||||
|
(for ([i (in-range number-of-experiments)])
|
||||||
|
(collect-garbage) (collect-garbage) (collect-garbage)
|
||||||
|
(send ec refresh)
|
||||||
|
(yield s))
|
||||||
|
(semaphore-post done))
|
||||||
|
#f)
|
||||||
|
|
||||||
|
(define done (make-semaphore 0))
|
||||||
|
(void (yield done))
|
||||||
|
|
||||||
|
;; show the actual times.
|
||||||
|
times
|
||||||
|
|
||||||
|
;; print in drdr friendly way
|
||||||
|
(let ([t (apply + times)])
|
||||||
|
(printf "cpu time: ~a real time: ~a gc time: ~a\n" t t t))
|
||||||
|
|
||||||
|
(send f show #f) (exit)
|
Loading…
Reference in New Issue
Block a user