comparison src/profile.c @ 1346:01c57eb70ae9

[xemacs-hg @ 2003-03-09 02:27:27 by ben] To: xemacs-patches@xemacs.org i.c: Sleep between calls to check for I/O, since these calls are non-blocking. behavior.el: Allow other keywords for forward compatibility. cl-macs.el: Rewrite to eliminate byte-compiler warning when `return' is used without `finally'. cmdloop.el: Avoid truncated error messages for `end-of-file' and the like. cmdloop.el: Avoid char-int error after syncing. files.el: Eliminate byte-compile warnings. printer.el: Fix line-width calculations. #### This used to work. Someone's changes (perhaps by Michael Sperber?) seem to have messed something up. simple.el: Use new clear-left-side functions to avoid messages ending up on the same line as other output. xemacs.mak: Add override for info/ as well when separate source/build dirs. xemacs.mak: Order sections in main build process and add comments. Add additional dependencies to try and prevent later steps from happening when failures in earlier steps have occurred. Makefile.in.in: Order sections in main build process and add comments. Add additional dependencies to try and prevent later steps from happening when failures in earlier steps have occurred. alloc.c: Don't arbitrarily clear Vconfigure_info_directory since it messes up separate build/source dirs. console.c, console.h, device-msw.c, device.c: Add accidentally omitted msprinter console and data descriptions. print.c, console-msw.c: Add clear-left-side functionality to help keep stdio/stderr output from separate sources on separate lines. Generalize the different kinds of debugging output. Add dpa(). profile.c: Add better docs on Unix/Windows differences. regex.c: Fix problems with rel-alloc compilation caused by previous patch. emacs.c: Seg fault rather than abort on Cygwin, since gdb doesn't trap aborts properly. console-gtk-impl.h, console-gtk.h, console-msw.h, console-x-impl.h, console-x.h, dialog-gtk.c, dialog-x.c, event-msw.c, frame-gtk.c, frame-x.c, frameslots.h, glyphs-gtk.c, glyphs-x.c, gui-gtk.c, gui-x.c, inline.c, menubar-gtk.c, menubar-msw.c, menubar-x.c, scrollbar-gtk.c, scrollbar-x.c, ui-gtk.c: Delete popup-data object. Delete menubar_data field from frames, since its usage is frame-specific. Delete menubar-msw.h, gui-x.h, gui-gtk.h. Clean up handling of lwlib callback data GCPRO'ing and add missing GCPRO recomputation in widget code.
author ben
date Sun, 09 Mar 2003 02:27:46 +0000
parents 70921960b980
children ac1be85b4a5f
comparison
equal deleted inserted replaced
1345:3b27da507d56 1346:01c57eb70ae9
49 running. 49 running.
50 50
51 The basic idea is simple. We set a profiling timer using setitimer 51 The basic idea is simple. We set a profiling timer using setitimer
52 (ITIMER_PROF), which generates a SIGPROF every so often. (This runs not 52 (ITIMER_PROF), which generates a SIGPROF every so often. (This runs not
53 in real time but rather when the process is executing or the system is 53 in real time but rather when the process is executing or the system is
54 running on behalf of the process.) When the signal goes off, we see what 54 running on behalf of the process -- at least, that is the case under
55 we're in, and add 1 to the count associated with that function. 55 Unix. Under MS Windows and Cygwin, there is no setitimer(), so we
56 simulate it using multimedia timers, which run in real time. To make
57 the results a bit more realistic, we ignore ticks that go off while
58 blocking on an event wait. Note that Cygwin does provide a simulation
59 of setitimer(), but it's in real time anyway, since Windows doesn't
60 provide a way to have process-time timers, and furthermore, it's broken,
61 so we don't use it.) When the signal goes off, we see what we're in, and
62 add 1 to the count associated with that function.
56 63
57 It would be nice to use the Lisp allocation mechanism etc. to keep track 64 It would be nice to use the Lisp allocation mechanism etc. to keep track
58 of the profiling information (i.e. to use Lisp hash tables), but we 65 of the profiling information (i.e. to use Lisp hash tables), but we
59 can't because that's not safe -- updating the timing information happens 66 can't because that's not safe -- updating the timing information happens
60 inside of a signal handler, so we can't rely on not being in the middle 67 inside of a signal handler, so we can't rely on not being in the middle
704 vars_of_profile (void) 711 vars_of_profile (void)
705 { 712 {
706 DEFVAR_INT ("default-profiling-interval", &default_profiling_interval /* 713 DEFVAR_INT ("default-profiling-interval", &default_profiling_interval /*
707 Default CPU time in microseconds between profiling sampling. 714 Default CPU time in microseconds between profiling sampling.
708 Used when the argument to `start-profiling' is nil or omitted. 715 Used when the argument to `start-profiling' is nil or omitted.
709 Note that the time in question is CPU time (when the program is executing 716 Under Unix, the time in question is CPU time (when the program is executing
710 or the kernel is executing on behalf of the program) and not real time, and 717 or the kernel is executing on behalf of the program) and not real time.
711 there is usually a machine-dependent limit on how small this value can be. 718 Under MS Windows and Cygwin, the time is real time, but time spent blocking
719 while waiting for an event is ignored, to get more accurate results.
720 Note that there is usually a machine-dependent limit on how small this
721 value can be.
712 */ ); 722 */ );
713 default_profiling_interval = 1000; 723 default_profiling_interval = 1000;
714 724
715 staticpro (&Vcall_count_profile_table); 725 staticpro (&Vcall_count_profile_table);
716 Vcall_count_profile_table = Qnil; 726 Vcall_count_profile_table = Qnil;