X-Git-Url: https://code.delx.au/gnu-emacs-elpa/blobdiff_plain/da0d153e1520b5af5d008412187bbcb1d686de48..74400b39e223df303583c57363c1fbb4502a2da5:/packages/memory-usage/memory-usage.el diff --git a/packages/memory-usage/memory-usage.el b/packages/memory-usage/memory-usage.el index 1f7331019..6e3749ddc 100644 --- a/packages/memory-usage/memory-usage.el +++ b/packages/memory-usage/memory-usage.el @@ -78,42 +78,41 @@ (let* ((bufs (buffer-list)) (num (length bufs)) (gc-stats (garbage-collect)) - (conses (memory-usage-mult-cons 2 (nth 0 gc-stats))) - (symbols (memory-usage-mult-cons 6 (nth 1 gc-stats))) - (markers (memory-usage-mult-cons 5 (nth 2 gc-stats))) - (chars (nth 3 gc-stats)) - (vectors (nth 4 gc-stats)) - (floats (memory-usage-mult-cons 2 (nth 5 gc-stats))) - (intervals (memory-usage-mult-cons 7 (nth 6 gc-stats))) - (strings (memory-usage-mult-cons 4 (nth 7 gc-stats)))) - (if (consp vectors) (setq vectors (cdr vectors))) + (gc-stats (if (numberp (caar gc-stats)) + (mapcar (lambda (x) + `(,(car x) + ,(max (* memory-usage-word-size (cadr x)) + 1) + ,@(let ((stat (nth (cddr x) gc-stats))) + (if (consp stat) + (list (car stat) (cdr stat)) + (list stat))))) + '((cons 2 . 0) + (symbol 6 . 1) + (marker 5 . 2) + (string 4 . 7) + (string-byte 0 . 3) + (vector-slot 1 . 4) + (float 2 . 5) + (interval 7 . 6))) + gc-stats))) (insert (format "Garbage collection stats:\n%s\n\n =>" gc-stats)) - (dolist (x `(("cons cells" . ,conses) - ("symbols" . ,symbols) - ("markers" . ,markers) - ("floats" . ,floats) - ("intervals" . ,intervals) - ("string headers" . ,strings))) - (insert (format "\t%s (+ %s dead) in %s\n" - (memory-usage-format (cadr x)) - (memory-usage-format (cddr x)) - (car x)))) - (insert (format "\t%s of string chars\n" (memory-usage-format chars))) - (insert (format "\t%s of vector slots\n" (memory-usage-format vectors))) - (let ((live (+ (car conses) - (car symbols) - (car markers) - (car floats) - (car intervals) - (car strings) - chars - vectors)) - (dead (+ (cdr conses) - (cdr symbols) - (cdr markers) - (cdr floats) - (cdr intervals) - (cdr strings)))) + (let ((live 0) + (dead 0)) + (dolist (x gc-stats) + (let* ((size (nth 1 x)) + (xlive (* size (nth 2 x))) + (xdead (if (nth 3 x) (* size (nth 3 x))))) + (insert (if xdead + (format "\t%s (+ %s dead) in %s\n" + (memory-usage-format xlive) + (memory-usage-format xdead) + (car x)) + (format "\t%s in %s\n" + (memory-usage-format xlive) + (car x)))) + (setq live (+ live xlive)) + (if xdead (setq dead (+ dead xdead))))) (insert (format "\nTotal in lisp objects: %s (live %s, dead %s)\n\n" (memory-usage-format (+ dead live))