cs: fix PLT_LINKLET_TIMES mode Racket-thread safety

This commit is contained in:
Matthew Flatt 2018-07-02 07:20:44 -06:00
parent eea40a6350
commit a2f1f11f9b

View File

@ -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