]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix memory-report counting of vector/hash table sizes
authorYikai Zhao <i@blahgeek.com>
Sat, 14 Aug 2021 11:46:30 +0000 (13:46 +0200)
committerLars Ingebrigtsen <larsi@gnus.org>
Sat, 14 Aug 2021 11:46:37 +0000 (13:46 +0200)
* lisp/emacs-lisp/memory-report.el (memory-report--object-size-1):
Count element values in vectors and hash tables.

Copyright-paperwork-exempt: yes

lisp/emacs-lisp/memory-report.el
test/lisp/emacs-lisp/memory-report-tests.el

index 1125dde4055597f486aa953ec98910ddd51a35c1..aee2a0079caa70b367b0267d3dc4c077e7d8cd70 100644 (file)
@@ -230,8 +230,7 @@ by counted more than once."
   (let ((total (+ (memory-report--size 'vector)
                   (* (memory-report--size 'object) (length value)))))
     (cl-loop for elem across value
-             do (setf (gethash elem counted) t)
-             (cl-incf total (memory-report--object-size counted elem)))
+             do (cl-incf total (memory-report--object-size counted elem)))
     total))
 
 (cl-defmethod memory-report--object-size-1 (counted (value hash-table))
@@ -239,8 +238,6 @@ by counted more than once."
                   (* (memory-report--size 'object) (hash-table-size value)))))
     (maphash
      (lambda (key elem)
-       (setf (gethash key counted) t)
-       (setf (gethash elem counted) t)
        (cl-incf total (memory-report--object-size counted key))
        (cl-incf total (memory-report--object-size counted elem)))
      value)
index da5f4f5700fb5068d50f47c2565a137a914a481c..0c0297b5fce66c3da5b7f661706b42a102db58ca 100644 (file)
@@ -45,6 +45,7 @@
 
   (should (equal (memory-report-object-size (list 'foo)) 16))
 
+  (should (equal (memory-report-object-size (vector 1 2 3)) 64))
   (should (equal (memory-report-object-size (vector 1 2 3 4)) 80))
 
   (should (equal (memory-report-object-size "") 32))
   (should (equal (memory-report-object-size (propertize "a" 'face 'foo))
                  81)))
 
+(ert-deftest memory-report-sizes-vectors ()
+  (should (= (memory-report--object-size
+              (make-hash-table :test #'eq)
+              ["long string that should be at least 40 bytes"])
+             108))
+  (let ((string "long string that should be at least 40 bytes"))
+    (should (= (memory-report--object-size
+                (make-hash-table :test #'eq)
+                (vector string))
+               108))
+    (should (= (memory-report--object-size
+                (make-hash-table :test #'eq)
+                (vector string string))
+               124))))
+
 (provide 'memory-report-tests)
 
 ;;; memory-report-tests.el ends here