mirror of
https://github.com/ashinn/chibi-scheme.git
synced 2025-05-18 21:29:19 +02:00
52 lines
1.8 KiB
Scheme
52 lines
1.8 KiB
Scheme
|
|
(import (chibi ast) (chibi time) (scheme cxr) (srfi 33) (srfi 39))
|
|
|
|
(define (timeval->milliseconds tv)
|
|
(quotient (+ (* 1000000 (timeval-seconds tv)) (timeval-microseconds tv))
|
|
1000))
|
|
|
|
(define (timeval-diff start end)
|
|
(- (timeval->milliseconds end)
|
|
(timeval->milliseconds start)))
|
|
|
|
(define (time* thunk)
|
|
(call-with-output-string
|
|
(lambda (out)
|
|
(gc)
|
|
(let* ((start (car (get-time-of-day)))
|
|
(start-rusage (get-resource-usage))
|
|
(gc-start (gc-usecs))
|
|
(gc-start-count (gc-count))
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
(result (parameterize ((current-output-port out)) (thunk)))
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
(end (car (get-time-of-day)))
|
|
(end-rusage (get-resource-usage))
|
|
(gc-end (gc-usecs))
|
|
(gc-msecs (quotient (- gc-end gc-start) 1000))
|
|
(real-msecs (timeval-diff start end))
|
|
(user-msecs
|
|
(timeval-diff (resource-usage-time start-rusage)
|
|
(resource-usage-time end-rusage)))
|
|
(system-msecs
|
|
(timeval-diff (resource-usage-system-time start-rusage)
|
|
(resource-usage-system-time end-rusage))))
|
|
(display "user: ")
|
|
(display user-msecs)
|
|
(display " system: ")
|
|
(display system-msecs)
|
|
(display " real: ")
|
|
(display real-msecs)
|
|
(display " gc: ")
|
|
(display gc-msecs)
|
|
(display " (")
|
|
(display (- (gc-count) gc-start-count))
|
|
(display " times)\n")
|
|
(display "result: ")
|
|
(write result)
|
|
(newline)
|
|
result))))
|
|
|
|
(define-syntax time
|
|
(syntax-rules ()
|
|
((_ expr) (time* (lambda () expr)))))
|