summaryrefslogtreecommitdiff
path: root/profile.scm
diff options
context:
space:
mode:
authorIOhannes m zmölnig <zmoelnig@umlautQ.umlaeute.mur.at>2016-05-17 12:21:04 +0200
committerIOhannes m zmölnig <zmoelnig@umlautQ.umlaeute.mur.at>2016-05-17 12:21:04 +0200
commit248790aca5d5b6dc9a8edeea1abed0195ac1338e (patch)
treec473c68af2ab5d091d7035fa1b539cbaf2ac2e4f /profile.scm
parent110d59c341b8c50c04f30d90e85e9b8f6f329a0e (diff)
Imported Upstream version 16.5~dfsg
Diffstat (limited to 'profile.scm')
-rw-r--r--profile.scm30
1 files changed, 30 insertions, 0 deletions
diff --git a/profile.scm b/profile.scm
new file mode 100644
index 0000000..614ae0b
--- /dev/null
+++ b/profile.scm
@@ -0,0 +1,30 @@
+(define* (show-profile (n 100))
+ (let ((info (*s7* 'profile-info)))
+ (if (null? info)
+ (format *stderr* "no profiling data!~%")
+ (let ((vect (make-vector (hash-table-entries info))))
+ (copy info vect)
+ (set! vect (sort! vect (lambda (a b) (> (cadr a) (cadr b)))))
+ (set! n (min n (length vect)))
+ (do ((i 0 (+ i 1)))
+ ((= i n) (newline *stderr*))
+ (let* ((data (vect i))
+ (key (car data))
+ (count (cadr data))
+ (expr (cddr data))
+ (file (pair-filename expr))
+ (line (pair-line-number expr)))
+ (if (> (ash key -20) 0)
+ (format *stderr* "~A[~A]: ~A~40T~A~%"
+ file line count
+ (let ((val (object->string expr)))
+ (if (> (length val) 40)
+ (string-append (substring val 0 36) " ...")
+ val))))))))))
+
+#|
+(define old-version s7-version)
+(define (s7-version)
+ (show-profile)
+ (old-version))
+|#