HiI made an enhanced version of Guile statprof that computes the cumulative time spent in procedures correctly (so that recursive invocations of the same procedure are counted only once). The patch is attached. Please inform me if you find any bugs.
- Tommi Höynälänmaa
31c31 < (define-module (statprof) --- > (define-module (statprof-work) 358c358,359 < call-count cum-sample-count self-sample-count) --- > call-count cum-sample-count corr-cum-sample-count > self-sample-count) 364a366,367 > (corr-cum-sample-count call-data-corr-cum-sample-count > set-call-data-corr-cum-sample-count!) 389a393,396 > (define (inc-call-data-corr-cum-sample-count! cd) > (set-call-data-corr-cum-sample-count! > cd > (1+ (call-data-corr-cum-sample-count cd)))) 427c434,435 < 0))) --- > 0 > 0))) 446c454,455 < (let visit-stack ((pos pos)) --- > (let visit-stack ((pos pos) > (visited-data '())) 450,451c459,463 < (inc-call-data-cum-sample-count! (addr->call-data ip)) < (visit-stack (1+ pos)))) --- > (let ((cur-data (addr->call-data ip))) > (inc-call-data-cum-sample-count! cur-data) > (if (not (memv cur-data visited-data)) > (inc-call-data-corr-cum-sample-count! cur-data)) > (visit-stack (1+ pos) (cons cur-data visited-data))))) 505c517,518 < %-time-in-proc cum-secs-in-proc self-secs-in-proc --- > %-time-in-proc cum-secs-in-proc corr-cum-secs-in-proc > self-secs-in-proc 511a525 > (corr-cum-secs-in-proc statprof-stats-corr-cum-secs-in-proc) 536a551 > (corr-cum-samples (call-data-corr-cum-sample-count call-data)) 549a565 > (* corr-cum-samples secs-per-sample 1.0) 580c596 < (format port "~6,2f ~9,2f ~9,2f" --- > (format port "~6,2f ~9,2f ~9,2f ~9,2f" 582a599 > (statprof-stats-corr-cum-secs-in-proc stats) 602,605c619,622 < (format port "~5a ~10a ~7a ~8a\n" < "% " "cumulative" "self" "") < (format port "~5a ~9a ~8a ~7a ~a\n" < "time" "seconds" "seconds" "calls" "procedure")) --- > (format port "~5a ~10a ~10a ~7a ~8a\n" > "% " "cumulative" "corr. cum." "self" "") > (format port "~5a ~10a ~10a ~8a ~7a ~a\n" > "time" "seconds" "seconds" "seconds" "calls" "procedure")) 607,610c624,627 < (format port "~5a ~10a ~7a ~8a\n" < "%" "cumulative" "self" "") < (format port "~5a ~10a ~7a ~a\n" < "time" "seconds" "seconds" "procedure"))) --- > (format port "~5a ~10a ~10a ~7a ~8a\n" > "%" "cumulative" "corr. cum." "self" "") > (format port "~5a ~10a ~10a ~7a ~a\n" > "time" "seconds" "seconds" "seconds" "procedure")))
OpenPGP_0xBB861FDE40460F83.asc
Description: application/pgp-keys
OpenPGP_signature
Description: OpenPGP digital signature