comparison src/lisp.h @ 5170:5ddbab03b0e6

various fixes to memory-usage stats -------------------- ChangeLog entries follow: -------------------- lisp/ChangeLog addition: 2010-03-25 Ben Wing <ben@xemacs.org> * diagnose.el (show-memory-usage): * diagnose.el (show-object-memory-usage-stats): Further changes to correspond with changes in the C code; add an additional column in show-object-memory-usage-stats showing the ancillary Lisp overhead used with each type; shrink columns for windows in show-memory-usage to get it to fit in 79 chars. src/ChangeLog addition: 2010-03-25 Ben Wing <ben@xemacs.org> * alloc.c: * alloc.c (struct): * alloc.c (finish_object_memory_usage_stats): * alloc.c (object_memory_usage_stats): * alloc.c (Fobject_memory_usage): * alloc.c (lisp_object_memory_usage_full): * alloc.c (compute_memusage_stats_length): * lrecord.h: * lrecord.h (struct lrecord_implementation): Add fields to the `lrecord_implementation' structure to list an offset into the array of extra statistics in a `struct generic_usage_stats' and a length, listing the first slice of ancillary Lisp-object memory. Compute automatically in compute_memusage_stats_length(). Use to add an entry `FOO-lisp-ancillary-storage' for object type FOO. Don't crash when an int or char is given to object-memory-usage, signal an error instead. Add functions lisp_object_memory_usage_full() and lisp_object_memory_usage() to compute the total memory usage of an object (sum of object, non-Lisp attached, and Lisp ancillary memory). * array.c: * array.c (gap_array_memory_usage): * array.h: Add function to return memory usage of a gap array. * buffer.c (struct buffer_stats): * buffer.c (compute_buffer_usage): * buffer.c (vars_of_buffer): * extents.c (compute_buffer_extent_usage): * marker.c: * marker.c (compute_buffer_marker_usage): * extents.h: * lisp.h: Remove `struct usage_stats' arg from compute_buffer_marker_usage() and compute_buffer_extent_usage() -- these are ancillary Lisp objects and don't get accumulated into `struct usage_stats'; change the value of `memusage_stats_list' so that `markers' and `extents' memory is in Lisp-ancillary, where it belongs. In compute_buffer_marker_usage(), use lisp_object_memory_usage() rather than lisp_object_storage_size(). * casetab.c: * casetab.c (case_table_memory_usage): * casetab.c (vars_of_casetab): * emacs.c (main_1): Add memory usage stats for case tables. * lisp.h: Add comment explaining the `struct generic_usage_stats' more, as well as the new fields in lrecord_implementation. * console-impl.h: * console-impl.h (struct console_methods): * scrollbar-gtk.c: * scrollbar-gtk.c (gtk_compute_scrollbar_instance_usage): * scrollbar-msw.c: * scrollbar-msw.c (mswindows_compute_scrollbar_instance_usage): * scrollbar-x.c: * scrollbar-x.c (x_compute_scrollbar_instance_usage): * scrollbar.c: * scrollbar.c (struct scrollbar_instance_stats): * scrollbar.c (compute_all_scrollbar_instance_usage): * scrollbar.c (scrollbar_instance_memory_usage): * scrollbar.c (scrollbar_objects_create): * scrollbar.c (vars_of_scrollbar): * scrollbar.h: * symsinit.h: * window.c: * window.c (find_window_mirror_maybe): * window.c (struct window_mirror_stats): * window.c (compute_window_mirror_usage): * window.c (window_mirror_memory_usage): * window.c (compute_window_usage): * window.c (window_objects_create): * window.c (syms_of_window): * window.c (vars_of_window): Redo memory-usage associated with windows, window mirrors, and scrollbar instances. Should fix crash in find_window_mirror, among other things. Properly assign memo ry to object memory, non-Lisp extra memory, and Lisp ancillary memory. For example, redisplay structures are non-Lisp memory hanging off a window mirror, not a window; make it an ancillary Lisp-object field. Window mirrors and scrollbar instances have their own statistics, among other things.
author Ben Wing <ben@xemacs.org>
date Thu, 25 Mar 2010 06:07:25 -0500
parents 6c6d78781d59
children 97eb4942aec8 14fda1dbdb26
comparison
equal deleted inserted replaced
5169:6c6d78781d59 5170:5ddbab03b0e6
1617 Bytecount malloc_overhead; 1617 Bytecount malloc_overhead;
1618 Bytecount dynarr_overhead; 1618 Bytecount dynarr_overhead;
1619 Bytecount gap_overhead; 1619 Bytecount gap_overhead;
1620 }; 1620 };
1621 1621
1622 /* Generic version of usage stats structure including extra non-Lisp and
1623 Lisp storage associated with the object, but not including the memory
1624 used to hold the object itself. Up to 32 statistics are allowed,
1625 in addition to the statistics in `U', which store another slice onto the
1626 ancillary non-Lisp storage.
1627
1628 Normally, each object creates its own version of this structure, e.g.
1629 `struct window_stats', which parallels the structure in beginning with
1630 a `struct usage_stats' and followed by Bytecount fields, so that a
1631 pointer to that structure can be cast to a pointer of this structure
1632 and sensible results gotten. */
1633
1622 struct generic_usage_stats 1634 struct generic_usage_stats
1623 { 1635 {
1624 struct usage_stats u; 1636 struct usage_stats u;
1625 Bytecount othervals[32]; 1637 Bytecount othervals[32];
1626 }; 1638 };
5332 void set_marker_position (Lisp_Object, Charbpos); 5344 void set_marker_position (Lisp_Object, Charbpos);
5333 void unchain_marker (Lisp_Object); 5345 void unchain_marker (Lisp_Object);
5334 Lisp_Object noseeum_copy_marker (Lisp_Object, Lisp_Object); 5346 Lisp_Object noseeum_copy_marker (Lisp_Object, Lisp_Object);
5335 Lisp_Object set_marker_restricted (Lisp_Object, Lisp_Object, Lisp_Object); 5347 Lisp_Object set_marker_restricted (Lisp_Object, Lisp_Object, Lisp_Object);
5336 #ifdef MEMORY_USAGE_STATS 5348 #ifdef MEMORY_USAGE_STATS
5337 Bytecount compute_buffer_marker_usage (struct buffer *, struct usage_stats *); 5349 Bytecount compute_buffer_marker_usage (struct buffer *b);
5338 #endif 5350 #endif
5339 void init_buffer_markers (struct buffer *b); 5351 void init_buffer_markers (struct buffer *b);
5340 void uninit_buffer_markers (struct buffer *b); 5352 void uninit_buffer_markers (struct buffer *b);
5341 5353
5342 /* Defined in menubar.c */ 5354 /* Defined in menubar.c */