emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

scratch/memrep 7899960 1/4: Reformat the data


From: Lars Ingebrigtsen
Subject: scratch/memrep 7899960 1/4: Reformat the data
Date: Thu, 10 Dec 2020 07:08:19 -0500 (EST)

branch: scratch/memrep
commit 789996053dab8070e5fc847faccc63cb95bde7aa
Author: Lars Ingebrigtsen <larsi@gnus.org>
Commit: Lars Ingebrigtsen <larsi@gnus.org>

    Reformat the data
---
 lisp/emacs-lisp/memory-report.el | 118 ++++++++++++++++++++++-----------------
 1 file changed, 68 insertions(+), 50 deletions(-)

diff --git a/lisp/emacs-lisp/memory-report.el b/lisp/emacs-lisp/memory-report.el
index b738fc3..bef8435 100644
--- a/lisp/emacs-lisp/memory-report.el
+++ b/lisp/emacs-lisp/memory-report.el
@@ -30,12 +30,26 @@
   "Generate a report of how Emacs is using memory."
   (interactive)
   (pop-to-buffer "*Memory-Report*")
-  (erase-buffer)
-  (memory-report--garbage-collect)
-  (memory-report--image-cache)
-  (memory-report--buffers)
-  (memory-report--total-variables)
-  (memory-report--largest-variables)
+  (special-mode)
+  (let ((reports (append (memory-report--garbage-collect)
+                         (memory-report--image-cache)
+                         (memory-report--buffers)
+                         (memory-report--total-variables)
+                         (memory-report--largest-variables)))
+        (inhibit-read-only t)
+        summaries details)
+    (erase-buffer)
+    (dolist (report reports)
+      (if (listp report)
+          (push report summaries)
+        (push report details)))
+    (dolist (summary (nreverse summaries))
+      (insert (format "%-40s %s\n"
+                      (car summary)
+                      (memory-report--format (cdr summary)))))
+    (insert "\n")
+    (dolist (detail (nreverse details))
+      (insert detail "\n")))
   (goto-char (point-min)))
 
 (defvar memory-report--type-size (make-hash-table))
@@ -61,7 +75,6 @@
 (defun memory-report--garbage-collect ()
   (let ((elems (garbage-collect)))
     (memory-report--set-size elems)
-    (insert "Overall Object Memory Usage\n\n")
     (let ((data (list
                  (list 'strings
                        (+ (memory-report--gc-elem elems 'strings)
@@ -75,22 +88,27 @@
                  (list 'intervals (memory-report--gc-elem elems 'intervals))
                  (list 'buffer-objects
                        (memory-report--gc-elem elems 'buffers)))))
-      (insert (format "%-20s %-20s\n" "Object Type" "Size"))
-      (dolist (object (seq-sort (lambda (e1 e2)
-                                  (> (cadr e1) (cadr e2)))
-                                data))
-        (insert (format "%-20s %-20s\n"
-                        (capitalize (symbol-name (car object)))
-                        (memory-report--format (cadr object)))))
-      (insert "\nReserved (But Unused) Object Memory: ")
-      (insert (memory-report--format
-               (seq-reduce #'+ (mapcar (lambda (elem)
-                                         (if (nth 3 elem)
-                                             (* (nth 1 elem) (nth 3 elem))
-                                           0))
-                                       elems)
-                           0)))
-      (insert "\n\n"))))
+      (list (cons "Overall Object Memory Usage"
+                  (seq-reduce #'+ (mapcar (lambda (elem)
+                                            (* (nth 1 elem) (nth 2 elem)))
+                                          elems)
+                              0))
+            (cons "Reserved (But Unused) Object Memory"
+                  (seq-reduce #'+ (mapcar (lambda (elem)
+                                            (if (nth 3 elem)
+                                                (* (nth 1 elem) (nth 3 elem))
+                                              0))
+                                          elems)
+                              0))
+            (with-temp-buffer
+              (insert (format "Object Storage:\n\n"))
+              (dolist (object (seq-sort (lambda (e1 e2)
+                                          (> (cadr e1) (cadr e2)))
+                                        data))
+                (insert (format "%s %s\n"
+                                (memory-report--format (cadr object))
+                                (capitalize (symbol-name (car object))))))
+              (buffer-string))))))
 
 (defun memory-report--total-variables ()
   (let ((counted (make-hash-table :test #'eq))
@@ -101,8 +119,7 @@
          (cl-incf total (memory-report--variable-size
                          counted (symbol-value symbol)))))
      obarray)
-    (insert (format "Memory Used By Global Variables: %s\n\n"
-                    (memory-report--format total)))))
+    (list (cons "Memory Used By Global Variables" total))))
 
 (defun memory-report--largest-variables ()
   (let ((variables nil))
@@ -115,15 +132,18 @@
            (when (> size 1000)
              (push (cons symbol size) variables)))))
      obarray)
-    (insert "Largest Variables\n\n")
-    (cl-loop for i from 1 upto 20
-             for (symbol . size) in (seq-sort (lambda (e1 e2)
-                                                (> (cdr e1) (cdr e2)))
-                                              variables)
-             do (insert (memory-report--format size)
-                        " "
-                        (symbol-name symbol)
-                        "\n"))))
+    (list
+     (with-temp-buffer
+       (insert "Largest Variables:\n\n")
+       (cl-loop for i from 1 upto 20
+                for (symbol . size) in (seq-sort (lambda (e1 e2)
+                                                   (> (cdr e1) (cdr e2)))
+                                                 variables)
+                do (insert (memory-report--format size)
+                           " "
+                           (symbol-name symbol)
+                           "\n"))
+       (buffer-string)))))
 
 (defun memory-report--variable-size (counted value)
   (if (gethash value counted)
@@ -194,19 +214,19 @@
   (let ((buffers (mapcar (lambda (buffer)
                            (cons buffer (memory-report--buffer buffer)))
                          (buffer-list))))
-    (insert "Total Memory Usage In Buffers: "
-            (memory-report--format (seq-reduce #'+ (mapcar #'cdr buffers) 0))
-            "\n\n")
-    (insert "Largest Buffers:\n\n")
-    (cl-loop for i from 1 upto 20
-             for (buffer . size) in (seq-sort (lambda (e1 e2)
-                                                (> (cdr e1) (cdr e2)))
-                                              buffers)
-             do (insert (memory-report--format size)
-                        " "
-                        (buffer-name buffer)
-                        "\n"))
-    (insert "\n")))
+    (list (cons "Total Memory Usage In Buffers"
+                (seq-reduce #'+ (mapcar #'cdr buffers) 0))
+          (with-temp-buffer
+            (insert "Largest Buffers:\n\n")
+            (cl-loop for i from 1 upto 20
+                     for (buffer . size) in (seq-sort (lambda (e1 e2)
+                                                        (> (cdr e1) (cdr e2)))
+                                                      buffers)
+                     do (insert (memory-report--format size)
+                                " "
+                                (buffer-name buffer)
+                                "\n"))
+            (buffer-string)))))
 
 (defun memory-report--buffer (buffer)
   (with-current-buffer buffer
@@ -229,9 +249,7 @@
                                      (overlay-lists)))))
 
 (defun memory-report--image-cache ()
-  (insert "Total Image Cache Size: "
-          (memory-report--format (image-cache-size))
-          "\n\n"))
+  (list (cons "Total Image Cache Size" (image-cache-size))))
 
 (provide 'memory-report)
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]