Mercurial > hg > xemacs-beta
comparison src/scrollbar.c @ 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 | 1fae11d56ad2 |
children | 308d34e9f07d |
comparison
equal
deleted
inserted
replaced
5169:6c6d78781d59 | 5170:5ddbab03b0e6 |
---|---|
255 } | 255 } |
256 #undef RELEASE_SCROLLBAR_INSTANCE_INTERNAL | 256 #undef RELEASE_SCROLLBAR_INSTANCE_INTERNAL |
257 | 257 |
258 #ifdef MEMORY_USAGE_STATS | 258 #ifdef MEMORY_USAGE_STATS |
259 | 259 |
260 int | 260 struct scrollbar_instance_stats |
261 compute_scrollbar_instance_usage (struct device *d, | 261 { |
262 struct scrollbar_instance *inst, | 262 struct usage_stats u; |
263 struct usage_stats *ustats) | 263 Bytecount device_data; |
264 { | 264 }; |
265 int total = 0; | 265 |
266 | 266 Bytecount |
267 if (HAS_DEVMETH_P(d, compute_scrollbar_instance_usage)) | 267 compute_all_scrollbar_instance_usage (struct scrollbar_instance *inst) |
268 total += DEVMETH (d, compute_scrollbar_instance_usage, (d, inst, ustats)); | 268 { |
269 Bytecount total = 0; | |
269 | 270 |
270 while (inst) | 271 while (inst) |
271 { | 272 { |
272 total += lisp_object_storage_size (wrap_scrollbar_instance (inst), | 273 total += lisp_object_memory_usage (wrap_scrollbar_instance (inst)); |
273 ustats); | |
274 inst = inst->next; | 274 inst = inst->next; |
275 } | 275 } |
276 | 276 |
277 return total; | 277 return total; |
278 } | |
279 | |
280 static void | |
281 scrollbar_instance_memory_usage (Lisp_Object scrollbar_instance, | |
282 struct generic_usage_stats *gustats) | |
283 { | |
284 struct scrollbar_instance_stats *stats = | |
285 (struct scrollbar_instance_stats *) gustats; | |
286 struct scrollbar_instance *inst = XSCROLLBAR_INSTANCE (scrollbar_instance); | |
287 struct device *d = FRAME_XDEVICE (inst->mirror->frame); | |
288 Bytecount total = 0; | |
289 | |
290 if (HAS_DEVMETH_P (d, compute_scrollbar_instance_usage)) | |
291 total += DEVMETH (d, compute_scrollbar_instance_usage, (d, inst, | |
292 &gustats->u)); | |
293 | |
294 stats->device_data = total; | |
278 } | 295 } |
279 | 296 |
280 #endif /* MEMORY_USAGE_STATS */ | 297 #endif /* MEMORY_USAGE_STATS */ |
281 | 298 |
282 void | 299 void |
922 /************************************************************************/ | 939 /************************************************************************/ |
923 /* initialization */ | 940 /* initialization */ |
924 /************************************************************************/ | 941 /************************************************************************/ |
925 | 942 |
926 void | 943 void |
944 scrollbar_objects_create (void) | |
945 { | |
946 #ifdef MEMORY_USAGE_STATS | |
947 OBJECT_HAS_METHOD (scrollbar_instance, memory_usage); | |
948 #endif | |
949 } | |
950 void | |
927 syms_of_scrollbar (void) | 951 syms_of_scrollbar (void) |
928 { | 952 { |
929 INIT_LISP_OBJECT (scrollbar_instance); | 953 INIT_LISP_OBJECT (scrollbar_instance); |
930 | 954 |
931 DEFSYMBOL (Qscrollbar_line_up); | 955 DEFSYMBOL (Qscrollbar_line_up); |
960 } | 984 } |
961 | 985 |
962 void | 986 void |
963 vars_of_scrollbar (void) | 987 vars_of_scrollbar (void) |
964 { | 988 { |
989 #ifdef MEMORY_USAGE_STATS | |
990 OBJECT_HAS_PROPERTY | |
991 (scrollbar_instance, memusage_stats_list, | |
992 list1 (intern ("device-data"))); | |
993 #endif /* MEMORY_USAGE_STATS */ | |
994 | |
965 DEFVAR_LISP ("scrollbar-pointer-glyph", &Vscrollbar_pointer_glyph /* | 995 DEFVAR_LISP ("scrollbar-pointer-glyph", &Vscrollbar_pointer_glyph /* |
966 *The shape of the mouse-pointer when over a scrollbar. | 996 *The shape of the mouse-pointer when over a scrollbar. |
967 This is a glyph; use `set-glyph-image' to change it. | 997 This is a glyph; use `set-glyph-image' to change it. |
968 If unspecified in a particular domain, the window-system-provided | 998 If unspecified in a particular domain, the window-system-provided |
969 default pointer is used. | 999 default pointer is used. |