comparison src/casetab.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 88bd4f3ef8e4
children 308d34e9f07d
comparison
equal deleted inserted replaced
5169:6c6d78781d59 5170:5ddbab03b0e6
506 /* This function can GC */ 506 /* This function can GC */
507 return set_case_table (case_table, 1); 507 return set_case_table (case_table, 1);
508 } 508 }
509 509
510 510
511 #ifdef MEMORY_USAGE_STATS
512
513 struct case_table_stats
514 {
515 struct usage_stats u;
516 /* Ancillary Lisp */
517 Bytecount downcase, upcase, case_canon, case_eqv;
518 };
519
520 static void
521 case_table_memory_usage (Lisp_Object casetab,
522 struct generic_usage_stats *gustats)
523 {
524 struct case_table_stats *stats = (struct case_table_stats *) gustats;
525
526 stats->downcase = lisp_object_memory_usage (XCASE_TABLE_DOWNCASE (casetab));
527 stats->upcase = lisp_object_memory_usage (XCASE_TABLE_UPCASE (casetab));
528 stats->case_canon = lisp_object_memory_usage (XCASE_TABLE_CANON (casetab));
529 stats->case_eqv = lisp_object_memory_usage (XCASE_TABLE_EQV (casetab));
530 }
531
532 #endif /* MEMORY_USAGE_STATS */
533
534
535 void
536 casetab_objects_create (void)
537 {
538 #ifdef MEMORY_USAGE_STATS
539 OBJECT_HAS_METHOD (case_table, memory_usage);
540 #endif
541 }
542
511 void 543 void
512 syms_of_casetab (void) 544 syms_of_casetab (void)
513 { 545 {
514 INIT_LISP_OBJECT (case_table); 546 INIT_LISP_OBJECT (case_table);
515 547
528 DEFSUBR (Fset_case_table); 560 DEFSUBR (Fset_case_table);
529 DEFSUBR (Fset_standard_case_table); 561 DEFSUBR (Fset_standard_case_table);
530 } 562 }
531 563
532 void 564 void
565 vars_of_casetab (void)
566 {
567 #ifdef MEMORY_USAGE_STATS
568 OBJECT_HAS_PROPERTY (case_table, memusage_stats_list,
569 list5 (Qt,
570 intern ("downcase"),
571 intern ("upcase"),
572 intern ("case-canon"),
573 intern ("case-eqv")));
574 #endif /* MEMORY_USAGE_STATS */
575 }
576
577 void
533 complex_vars_of_casetab (void) 578 complex_vars_of_casetab (void)
534 { 579 {
535 REGISTER Ichar i; 580 REGISTER Ichar i;
536 581
537 staticpro (&Vstandard_case_table); 582 staticpro (&Vstandard_case_table);