~ chicken-core (chicken-5) 9bdcc7ea41018947036e22dc09524fc901c9c413
commit 9bdcc7ea41018947036e22dc09524fc901c9c413
Author: felix <felix@call-with-current-continuation.org>
AuthorDate: Tue Aug 2 09:09:06 2011 +0200
Commit: felix <felix@call-with-current-continuation.org>
CommitDate: Tue Aug 2 09:09:06 2011 +0200
profile-unit is compiled unsafe; fixed incorrect % calculation in chicken-profile (thanks to Sven hartrumpf)
diff --git a/chicken-profile.scm b/chicken-profile.scm
index 257591ed..5a28eb36 100644
--- a/chicken-profile.scm
+++ b/chicken-profile.scm
@@ -182,31 +182,28 @@ EOF
(define (write-profile)
(print "reading `" file "' ...\n")
- (let* ([data0 (with-input-from-file file read-profile)]
- [max-t (fold (lambda (t result)
- (+ (third t) result))
- 0
- data0)]
- [data (sort (map
+ (let* ((data0 (with-input-from-file file read-profile))
+ (max-t (foldl (lambda (r t) (max r (third t))) 0 data0))
+ (data (sort (map
(lambda (t)
(append
t
- (let ((c (second t))
- (t (third t)))
- (list (or (and c (> c 0) (/ t c))
+ (let ((c (second t)) ; count
+ (t (third t))) ; total time
+ (list (or (and c (> c 0) (/ t c)) ; time / count
0)
- (or (and (> max-t 0) (* (/ t max-t) 100))
+ (or (and (> max-t 0) (* (/ t max-t) 100)) ; % of max-time
0)
))))
data0)
- sort-by)])
+ sort-by)))
(if (< 0 top (length data))
(set! data (take data top)))
(set! data (map (lambda (entry)
- (let ([c (second entry)]
- [t (third entry)]
- [a (fourth entry)]
- [p (fifth entry)] )
+ (let ([c (second entry)] ; count
+ [t (third entry)] ; total time
+ [a (fourth entry)] ; average time
+ [p (fifth entry)] ) ; % of max time
(list (##sys#symbol->qualified-string (first entry))
(if (not c) "overflow" (number->string c))
(format-real (/ t 1000) seconds-digits)
diff --git a/profiler.scm b/profiler.scm
index 1879b461..4ba7cb93 100644
--- a/profiler.scm
+++ b/profiler.scm
@@ -28,6 +28,7 @@
(declare
(unit profiler)
(hide ##sys#profile-name ##sys#profile-vector-list cpu-ms)
+ (unsafe)
(disable-interrupts))
(foreign-declare #<<EOF
Trap