cs: fix PLT_LINKLET_TIMES
mode Racket-thread safety
This commit is contained in:
parent
eea40a6350
commit
a2f1f11f9b
|
@ -6,6 +6,10 @@
|
|||
(define current-start-time '())
|
||||
(define current-gc-start-time '())
|
||||
|
||||
;; Beware that `performance-region` doesn't really handle escapes, and
|
||||
;; Racket-level thread swaps during `performance-region` can cause
|
||||
;; strange results.
|
||||
|
||||
(define-syntax performance-region
|
||||
(syntax-rules ()
|
||||
[(_ label e ...) (measure-performance-region label (lambda () e ...))]))
|
||||
|
@ -13,10 +17,12 @@
|
|||
(define (measure-performance-region label thunk)
|
||||
(cond
|
||||
[measure-performance?
|
||||
(with-interrupts-disabled
|
||||
(set! current-start-time (cons (current-process-milliseconds) current-start-time))
|
||||
(set! current-gc-start-time (cons (current-gc-milliseconds) current-gc-start-time))
|
||||
(set! current-gc-start-time (cons (current-gc-milliseconds) current-gc-start-time)))
|
||||
(begin0
|
||||
(thunk)
|
||||
(with-interrupts-disabled
|
||||
(let ([delta (- (current-process-milliseconds) (car current-start-time))]
|
||||
[gc-delta (- (current-gc-milliseconds) (car current-gc-start-time))])
|
||||
(hashtable-update! region-times label (lambda (v) (+ v delta)) 0)
|
||||
|
@ -28,12 +34,13 @@
|
|||
(unless (null? l)
|
||||
(set-car! l (+ (car l) delta))
|
||||
(set-car! gc-l (+ (car gc-l) gc-delta))
|
||||
(loop (cdr l) (cdr gc-l))))))]
|
||||
(loop (cdr l) (cdr gc-l)))))))]
|
||||
[else (thunk)]))
|
||||
|
||||
(define (add-performance-memory! label delta)
|
||||
(when measure-performance?
|
||||
(hashtable-update! region-memories label (lambda (v) (+ v delta)) 0)))
|
||||
(with-interrupts-disabled
|
||||
(hashtable-update! region-memories label (lambda (v) (+ v delta)) 0))))
|
||||
|
||||
(define (linklet-performance-init!)
|
||||
(hashtable-set! region-times 'boot
|
||||
|
|
Loading…
Reference in New Issue
Block a user