view netinstall/resource.h @ 5157:1fae11d56ad2

redo memory-usage mechanism, add way of dynamically initializing Lisp objects -------------------- ChangeLog entries follow: -------------------- lisp/ChangeLog addition: 2010-03-18 Ben Wing <ben@xemacs.org> * diagnose.el (show-memory-usage): Rewrite to take into account API changes in memory-usage functions. src/ChangeLog addition: 2010-03-18 Ben Wing <ben@xemacs.org> * alloc.c: * alloc.c (disksave_object_finalization_1): * alloc.c (lisp_object_storage_size): * alloc.c (listu): * alloc.c (listn): * alloc.c (Fobject_memory_usage_stats): * alloc.c (compute_memusage_stats_length): * alloc.c (Fobject_memory_usage): * alloc.c (Ftotal_object_memory_usage): * alloc.c (malloced_storage_size): * alloc.c (common_init_alloc_early): * alloc.c (reinit_alloc_objects_early): * alloc.c (reinit_alloc_early): * alloc.c (init_alloc_once_early): * alloc.c (syms_of_alloc): * alloc.c (reinit_vars_of_alloc): * buffer.c: * buffer.c (struct buffer_stats): * buffer.c (compute_buffer_text_usage): * buffer.c (compute_buffer_usage): * buffer.c (buffer_memory_usage): * buffer.c (buffer_objects_create): * buffer.c (syms_of_buffer): * buffer.c (vars_of_buffer): * console-impl.h (struct console_methods): * dynarr.c (Dynarr_memory_usage): * emacs.c (main_1): * events.c (clear_event_resource): * extents.c: * extents.c (compute_buffer_extent_usage): * extents.c (extent_objects_create): * extents.h: * faces.c: * faces.c (compute_face_cachel_usage): * faces.c (face_objects_create): * faces.h: * general-slots.h: * glyphs.c: * glyphs.c (compute_glyph_cachel_usage): * glyphs.c (glyph_objects_create): * glyphs.h: * lisp.h: * lisp.h (struct usage_stats): * lrecord.h: * lrecord.h (enum lrecord_type): * lrecord.h (struct lrecord_implementation): * lrecord.h (MC_ALLOC_CALL_FINALIZER_FOR_DISKSAVE): * lrecord.h (DEFINE_DUMPABLE_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_SIZABLE_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_FROB_BLOCK_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_FROB_BLOCK_SIZABLE_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_INTERNAL_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_SIZABLE_INTERNAL_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_SIZABLE_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_FROB_BLOCK_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_FROB_BLOCK_SIZABLE_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_INTERNAL_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_SIZABLE_INTERNAL_LISP_OBJECT): * lrecord.h (MAKE_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_MODULE_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_MODULE_SIZABLE_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_MODULE_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_MODULE_SIZABLE_LISP_OBJECT): * lrecord.h (MAKE_MODULE_LISP_OBJECT): * lrecord.h (INIT_LISP_OBJECT): * lrecord.h (INIT_MODULE_LISP_OBJECT): * lrecord.h (UNDEF_LISP_OBJECT): * lrecord.h (UNDEF_MODULE_LISP_OBJECT): * lrecord.h (DECLARE_LISP_OBJECT): * lrecord.h (DECLARE_MODULE_API_LISP_OBJECT): * lrecord.h (DECLARE_MODULE_LISP_OBJECT): * lstream.c: * lstream.c (syms_of_lstream): * lstream.c (vars_of_lstream): * marker.c: * marker.c (compute_buffer_marker_usage): * mc-alloc.c (mc_alloced_storage_size): * mc-alloc.h: * mule-charset.c: * mule-charset.c (struct charset_stats): * mule-charset.c (compute_charset_usage): * mule-charset.c (charset_memory_usage): * mule-charset.c (mule_charset_objects_create): * mule-charset.c (syms_of_mule_charset): * mule-charset.c (vars_of_mule_charset): * redisplay.c: * redisplay.c (compute_rune_dynarr_usage): * redisplay.c (compute_display_block_dynarr_usage): * redisplay.c (compute_glyph_block_dynarr_usage): * redisplay.c (compute_display_line_dynarr_usage): * redisplay.c (compute_line_start_cache_dynarr_usage): * redisplay.h: * scrollbar-gtk.c (gtk_compute_scrollbar_instance_usage): * scrollbar-msw.c (mswindows_compute_scrollbar_instance_usage): * scrollbar-x.c (x_compute_scrollbar_instance_usage): * scrollbar.c (compute_scrollbar_instance_usage): * scrollbar.h: * symbols.c: * symbols.c (reinit_symbol_objects_early): * symbols.c (init_symbols_once_early): * symbols.c (reinit_symbols_early): * symbols.c (defsymbol_massage_name_1): * symsinit.h: * ui-gtk.c: * ui-gtk.c (emacs_gtk_object_getprop): * ui-gtk.c (emacs_gtk_object_putprop): * ui-gtk.c (ui_gtk_objects_create): * unicode.c (compute_from_unicode_table_size_1): * unicode.c (compute_to_unicode_table_size_1): * unicode.c (compute_from_unicode_table_size): * unicode.c (compute_to_unicode_table_size): * window.c: * window.c (struct window_stats): * window.c (compute_window_mirror_usage): * window.c (compute_window_usage): * window.c (window_memory_usage): * window.c (window_objects_create): * window.c (syms_of_window): * window.c (vars_of_window): * window.h: Redo memory-usage mechanism, make it general; add way of dynamically initializing Lisp object types -- OBJECT_HAS_METHOD(), similar to CONSOLE_HAS_METHOD(). (1) Create OBJECT_HAS_METHOD(), OBJECT_HAS_PROPERTY() etc. for specifying that a Lisp object type has a particular method or property. Call such methods with OBJECT_METH, MAYBE_OBJECT_METH, OBJECT_METH_OR_GIVEN; retrieve properties with OBJECT_PROPERTY. Methods that formerly required a DEFINE_*GENERAL_LISP_OBJECT() to specify them (getprop, putprop, remprop, plist, disksave) now instead use the dynamic-method mechanism. The main benefit of this is that new methods or properties can be added without requiring that the declaration statements of all existing methods be modified. We have to make the `struct lrecord_implementation' non-const, but I don't think this should have any effect on speed -- the only possible method that's really speed-critical is the mark method, and we already extract those out into a separate (non-const) array for increased cache locality. Object methods need to be reinitialized after pdump, so we put them in separate functions such as face_objects_create(), extent_objects_create() and call them appropriately from emacs.c The only current object property (`memusage_stats_list') that objects can specify is a Lisp object and gets staticpro()ed so it only needs to be set during dump time, but because it references symbols that might not exist in a syms_of_() function, we initialize it in vars_of_(). There is also an object property (`num_extra_memusage_stats') that is automatically initialized based on `memusage_stats_list'; we do that in reinit_vars_of_alloc(), which is called after all vars_of_() functions are called. `disksaver' method was renamed `disksave' to correspond with the name normally given to the function (e.g. disksave_lstream()). (2) Generalize the memory-usage mechanism in `buffer-memory-usage', `window-memory-usage', `charset-memory-usage' into an object-type- specific mechanism called by a single function `object-memory-usage'. (Former function `object-memory-usage' renamed to `total-object-memory-usage'). Generalize the mechanism of different "slices" so that we can have different "classes" of memory described and different "slices" onto each class; `t' separates classes, `nil' separates slices. Currently we have three classes defined: the memory of an object itself, non-Lisp-object memory associated with the object (e.g. arrays or dynarrs stored as fields in the object), and Lisp-object memory associated with the object (other internal Lisp objects stored in the object). This isn't completely finished yet and we might need to further separate the "other internal Lisp objects" class into two classes. The memory-usage mechanism uses a `struct usage_stats' (renamed from `struct overhead_stats') to describe a malloc-view onto a set of allocated memory (listing how much was requested and various types of overhead) and a more general `struct generic_usage_stats' (with a `struct usage_stats' in it) to hold all statistics about object memory. `struct generic_usage_stats' contains an array of 32 Bytecounts, which are statistics of unspecified semantics. The intention is that individual types declare a corresponding struct (e.g. `struct window_stats') with the same structure but with specific fields in place of the array, corresponding to specific statistics. The number of such statistics is an object property computed from the list of tags (Lisp symbols describing the statistics) stored in `memusage_stats_list'. The idea here is to allow particular object types to customize the number and semantics of the statistics where completely avoiding consing. This doesn't matter so much yet, but the intention is to have the memory usage of all objects computed at the end of GC, at the same time as other statistics are currently computed. The values for all statistics for a single type would be added up to compute aggregate values for all objects of a specific type. To make this efficient, we can't allow any memory allocation at all. (3) Create some additional functions for creating lists that specify the elements directly as args rather than indirectly through an array: listn() (number of args given), listu() (list terminated by Qunbound). (4) Delete a bit of remaining unused C window_config stuff, also unused lrecord_type_popup_data.
author Ben Wing <ben@xemacs.org>
date Thu, 18 Mar 2010 10:50:06 -0500
parents 943eaba38521
children
line wrap: on
line source

//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by res.rc
//
#define IDS_ROOT_SLASH                  1
#define IDS_ROOT_SPACE                  2
#define IDS_CWD_NONEMPTY                3
#define IDS_MIRROR_LST                  6
#define IDS_DIALOG_FAILED               7
#define IDS_CYGWIN_FUNC_MISSING         8
#define IDS_DOWNLOAD_SHORT              9
#define IDS_ERR_OPEN_WRITE              10
#define IDS_SETUPINI_MISSING            11
#define IDS_OLD_SETUPINI                12
#define IDS_ERR_RENAME                  13
#define IDS_NOTHING_INSTALLED           14
#define IDS_INSTALL_COMPLETE            15
#define IDS_ERR_OPEN_READ               16
#define IDS_ROOT_ABSOLUTE               17
#define IDS_DOWNLOAD_COMPLETE           18
#define IDS_CVSID                       19
#define IDS_NOLOGFILE                   20
#define IDS_UNINSTALL_COMPLETE          21
#define IDS_WININET                     22
#define IDS_ERR_CHDIR                   23
#define IDS_OLD_SETUP_VERSION           24
#define IDS_DOWNLOAD_FAILED             25
#define IDS_DOWNLOAD_INCOMPLETE         26
#define IDS_INSTALL_INCOMPLETE          27
#define IDS_ROOT_NOCYGWIN               28
#define IDS_CREATE_DIR   29
#define IDD_ROOT                        101
#define IDD_SOURCE                      102
#define IDD_OTHER_URL                   103
#define IDD_SITE                        104
#define IDD_NET                         105
#define IDD_DLSTATUS                    106
#define IDD_S_LOAD_INI                  107
#define IDD_S_FROM_CWD                  108
#define IDD_CHOOSE                      109
#define IDD_S_DOWNLOAD                  110
#define IDD_S_INSTALL                   111
#define IDD_INSTATUS                    112
#define IDD_DESKTOP                     113
#define IDD_PROXY_AUTH                  114
#define IDD_S_POSTINSTALL               115
#define IDD_NET_AUTH                    116
#define IDD_SPLASH                      117
#define IDB_SPIN                        118
#define IDB_RTARROW                     119
#define IDI_SPIN                        120
#define IDI_XEMACS                      121
#define IDD_LOCAL_DIR                   122
#define IDB_CHECK_YES                   123
#define IDB_CHECK_NO                    124
#define IDB_CHECK_NA                    125
#define IDB_GNU                         126
#define IDD_UNINSTALL                   127
#define IDC_SOURCE_DOWNLOAD             1000
#define IDC_SOURCE_NETINST              1001
#define IDC_SOURCE_CWD                  1002
#define IDC_ROOT_DIR                    1003
#define IDC_ROOT_BROWSE                 1004
#define IDC_ROOT_TEXT                   1005
#define IDC_ROOT_BINARY                 1006
#define IDC_URL_LIST                    1007
#define IDC_SITE_NEXT                   1008
#define IDC_BACK                        1009
#define IDC_OTHER_URL                   1010
#define IDC_NET_IE5                     1011
#define IDC_NET_DIRECT                  1012
#define IDC_NET_PROXY                   1013
#define IDC_PROXY_HOST                  1014
#define IDC_PROXY_PORT                  1015
#define IDC_PROXY_USER                  1016
#define IDC_DLS_PROGRESS                1019
#define IDC_DLS_URL                     1020
#define IDC_DLS_RATE                    1021
#define IDC_INS_PKG                     1022
#define IDC_INS_FILE                    1023
#define IDC_INS_DISKFULL                1024
#define IDC_INS_IPROGRESS               1025
#define IDC_INS_PPROGRESS               1026
#define IDC_ROOT_SYSTEM                 1028
#define IDC_ROOT_USER                   1029
#define IDC_NET_USER                    1030
#define IDC_NET_PASSWD                  1031
#define IDC_VERSION                     1033
#define IDC_LISTVIEW_POS                1034
#define IDC_CHOOSE_FULLPART             1035
#define IDC_CHOOSE_EXP                  1036
#define IDC_CHOOSE_CURR                 1037
#define IDC_CHOOSE_PREV                 1038
#define IDC_CHOOSE_LIST                 1039
#define IDC_INS_ACTION                  1040
#define IDC_ROOT_DESKTOP                1041
#define IDC_ROOT_MENU                   1042
#define IDC_LOCAL_DIR_BROWSE            1043
#define IDC_TXT_TYPE                    1043
#define IDC_LOCAL_DIR                   1044
#define IDC_JAVA_TYPE                   1044
#define IDC_INSTALL_NATIVE              1045
#define IDC_C_TYPE                      1045
#define IDC_INSTALL_CYGWIN              1046
#define IDC_CPP_TYPE                    1046
#define IDC_UNINS_PKG                   1047
#define IDC_ELISP_TYPE                  1047
#define IDC_UNINS_FILE                  1048
#define IDC_IDL_TYPE                    1048
#define IDC_UNINS_DISKFULL              1049
#define IDC_UNINS_IPROGRESS             1050
#define IDC_UNINS_PPROGRESS             1051
#define IDC_UNINS_ACTION                1052
#define IDC_STATIC                      -1

// Next default values for new objects
// 
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NO_MFC                     1
#define _APS_3D_CONTROLS                     1
#define _APS_NEXT_RESOURCE_VALUE        127
#define _APS_NEXT_COMMAND_VALUE         40003
#define _APS_NEXT_CONTROL_VALUE         1050
#define _APS_NEXT_SYMED_VALUE           101
#endif
#endif